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