Data structures 增强双边堆和旋转列表

Data structures 增强双边堆和旋转列表,data-structures,heap,Data Structures,Heap,当涉及到插入和删除时,堆是有效的,但对于搜索操作,它需要O(n)比较。 为了改进搜索,我们修改了heap并创建了双亲堆(biparentalheap,beap),其中每个节点都有两个父节点。Rest的所有方面都与heap相同。在beap中搜索需要进行O(sqrt(2n))比较 有人能告诉我如何通过对beap进行一些修改来进一步减少在任意节点上搜索的时间吗 提前感谢。本文描述了1979年的“双亲堆” 这就提出了两种改进O(sqrt(2n))搜索时间的方法: 通过对每个级别进行排序,并坚持级别i的所

当涉及到插入和删除时,堆是有效的,但对于搜索操作,它需要O(n)比较。 为了改进搜索,我们修改了heap并创建了双亲堆(biparentalheap,beap),其中每个节点都有两个父节点。Rest的所有方面都与heap相同。在beap中搜索需要进行O(sqrt(2n))比较

有人能告诉我如何通过对beap进行一些修改来进一步减少在任意节点上搜索的时间吗

提前感谢。

本文描述了1979年的“双亲堆”

这就提出了两种改进O(sqrt(2n))搜索时间的方法:

  • 通过对每个级别进行排序,并坚持级别i的所有节点都小于级别i+1的所有节点。。。因此,搜索可以通过一个二进制切块来辅助,得到一个值得尊敬的O(log(n))。毫不奇怪,插入变得更加复杂,仍然是O(sqrt(N))

  • 通过增加分支因子,使功为O(立方根(N))

  • [但是,注意到问题的措辞,你已经找到了研究报告,所以我恐怕不会告诉你太多。]

    我是“堆”结构的超级粉丝,一个超级粉丝。。。但我认为理解它的局限性是明智的。堆是运行优先级队列的一种非常好的方法。堆排序是一种很好的排序,有一个保证的上界——但平均而言,不如快速排序好。还有别的事。。。有更好的数据结构


    AVL树将为您提供O(log(n))搜索、插入和删除。哪个堆比O(sqrt(2n))好。更复杂的双亲堆将执行O(log(n))搜索,但insert和delete仍然是O(sqrt(n))。如果您想要一个不需要节点指针(如堆)的结构,我相信可以通过这种方式创建AVL树

    当n=1000000(一百万)时,O(log2(n))为~20,而O(sqrt(2n))为~1414。。。很难对双亲堆感到兴奋:-(


    在我看来,这是一个有趣的想法,它的时代从未到来。(或者,正如AA Milne所说的——我们这里有“一种很好的刹车……”。)

    当你使用AVL tree时,你实际上是在窃取用户的内存来维护无聊的指针。几十年来每个人都这么做,这算不上什么犯罪,现在千兆字节的内存被偷走了,计算机的速度比以往任何时候都慢(他们交换了,哥们!),但仍然没有什么值得骄傲的。“如果你想要一个不需要节点指针(比如堆)的结构,我相信你可以用这种方式创建一个AVL树。”-你可以创建,但是你不能维护。而beap是这样做的。“对于n=1000000(一百万),O(log2(n))是~20,而O(sqrt(2n))是~1414。”-和O(n)是1000000(例如,500000个元素平均移动以插入一个排序数组),所以你最好再次对beap感到兴奋。