20得票3回答
为什么二叉堆以数组形式比树更好?

当创建一个二叉最大堆时,为什么采用基于数组的实现更好,而不是基于树的实现(基于树的实现指每个节点也有一个指向其父节点的指针)? 在运行时间分析、内存使用和性能方面,哪种方法更好? 对于二叉最大堆,运行时间如下: - 插入:O(lg n) - 删除最小值:O(lg n) - 合并:O(n) ...

19得票2回答
MAX-HEAPIFY中的最坏情况:“当树的底层恰好填满一半时,最坏情况会发生”。

在CLRS的第三版第155页中,给出了MAX-HEAPIFY算法的实现: "the worst case occurs when the bottom level of the tree is exactly half full" 我猜原因是在这种情况下,Max-Heapify必须通...

19得票3回答
将最大堆转换为二叉搜索树

我们有一个包含 2m - 1 个不同可比较的元素的数组,索引从 1 开始。 我们可以将这个数组看作一棵完全二叉树:Node is placed at index i. Left child is placed at 2i. Right child is placed at 2i+1. 例如,...

19得票2回答
Java优先队列(堆)插入n个元素的时间复杂度是多少?

我想了解Java PriorityQueue.Add()在插入n个元素时的时间复杂度。 我知道单个元素的最坏情况插入时间是O(log(n)),但对于插入n个元素的时间复杂度不是很清楚。 我看到过各种来源(没有证明)声称构建一个包含n个元素的优先队列堆需要O(n)的时间,也看到过声称它需要O(n...

18得票5回答
具有动态项优先级的优先队列

我需要实现一个优先队列,其中队列中某项的优先级可能会更改,队列将自动调整以确保项总是按照正确的顺序被删除。我有一些关于如何实现它的想法,但我相信这是一个相当常见的数据结构,所以我希望能够使用比我聪明的人的实现作为基础。 有人可以告诉我这种类型的优先队列的名称,以便我知道要搜索什么,或者更好的...

18得票4回答
A.length和A.heap-size有什么区别?(涉及IT技术)

我有一个有关堆排序的问题。一本算法书中写道:A.heap-size<= A.length。我不明白两者之间的区别。如果一个数组表示一个堆,为什么可能存在A.heap-size小于A.length的情况?我知道A.heap-size代表堆中元素的数量,那么它为什么不完全等于数组内元素的数量呢?

17得票1回答
C++中的make_heap函数是如何实现为3N时间复杂度的?

我想知道C++中make_heap算法是如何实现的,以达到复杂度为3×N?我只知道通过插入元素来构建堆的方法,其复杂度为O(NlogN)。非常感谢!

17得票3回答
Python heapq 与 sorted 的复杂度和性能比较

我相对较新于使用Python(使用v3.x语法),并希望了解heapq和sorted的复杂性和性能方面的注意事项。 为贪心的“找到最佳作业调度”算法已经实现了基于heapq的解决方案。但是,我了解到可以使用“sorted”及operator.itemgetter()和reverse=True...

17得票4回答
我能否基于深度优先顺序而不是广度优先顺序为完全树提供类似堆的连续布局?

堆是一种经典的数据结构,将完全二叉树(或广义版本的d-ary树)放入连续的数组中,以广度优先遍历顺序存储元素。通过这种方式,树中同一层级的所有元素都按顺序相邻地存储。 我正在实现一种数据结构,它在底层是一个固定程度d的完全平衡树,并且我想将树以连续形式存储,以释放节点指针的空间。所以我想把节...

17得票2回答
插入堆中的时间复杂度

我希望主要了解在堆中插入一个新元素的时间复杂度Big O和Omega背后的原因。我知道可以在网上找到答案,但我更喜欢彻底理解而不是只是在网上找答案并盲目记忆。例如,如果我们有以下堆(以数组格式表示): [8,6,7,3,5,3,4,1,2] 如果我们决定插入一个新元素“4”,现在我们的数组看...