导读 大家好,我是小典,我来为大家解答以上问题。桃谷艾莉卡很多人还不知道,现在让我们一起来看看吧!1、可以用新的入2、c6 dd. С 〇 Μ3...
大家好,我是小典,我来为大家解答以上问题。桃谷艾莉卡很多人还不知道,现在让我们一起来看看吧!
1、可以用新的入
2、c6 dd. С 〇 Μ
3、以上方法都各有缺陷,那或许我们会求诸之前学过的BBST,没错,无论是用AVL树、伸展树或者红黑树实现优先队列,三个标准接口(增、删、查)的效率都可以达到O(logN)O(logN),而且只需作一点优化,其中的getMin()getMin()接口效率还可以进一步提高到O(1)O(1)。但是就优先队列所要求的功能来说,BBST的功能就过于强大了。因为我们在优先队列里查找和删除都仅限于堆顶,而难以找到某个确切元素,并没有完全用上BBST的完整功能。也就是说,我们实际上是使用了一个非常高级的数据结构来实现一个功能更为简单的结构,而且BBST的开销也是比较大的,这简直杀鸡用牛刀。那有没有成本更低的实现方式呢?我们注意到对于优先队列而言,矛盾都集中在优先级最高的那个极值元素。这就意味着,我们只需要维护所有元素之间的一个偏序关系,就足以确定这个极值元素,而不必像BBST那样,始终都不折不扣地维护一个所有元素之间的全序关系。根据这一分析,我们确信一定存在某种形式上更简单,而且维护成本更低的实现方式。
4、总结一下:采用基本的向量结构不够,而采用更高级的树形结构,却有杀鸡用牛刀之嫌。我们要找一个中庸之道,为此我们需要以向量为形,以树形结构为神,形成二者之间的有机结合。就是逻辑上用树组织,但物理上用数组实现。为此,我们需要借助完全二叉树,可以认为是AVL树的一个特例,它的平衡因子处处非负,这也是二叉堆名字的来由
本文到此讲解完毕了,希望对大家有帮助。