使用链表实现二叉堆

0 java algorithm heap binary-tree

可能的重复:
二进制最小堆的链表实现(操作遇到问题......)

问候,

我无法找出一种算法来为我提供二叉堆的链表实现中树节点的位置。我已经使用数组实现了堆,现在我想尝试使用链表;如果我使用数组来表示堆,有没有办法找到其数组索引为 i 的树节点?

Ant*_*ima 5

重点是什么?链表实现会比基于数组的实现更慢或更复杂。如果你用一个简单的链表替换数组并且不添加其他结构,你的插入时间将是 O(n) 而不是 O(log n),然后你也可以在相同的 O(n) 中维护一个排序列表)复杂性。

  • 二进制堆并不总是更好。您可以使用无序链表实现堆。对于大小为 n 的列表,插入和删除时间复杂度为 O(1) 。对于删除和插入来说,二叉堆的复杂度都是“O(n log n)”。如果您只需要进行少量(即恒定)的删除,则链表将是最佳选择。实际应用中的一个很好的例子是在 Dijkstra 算法中使用堆,您需要“|E|”插入和“|V|”删除。在这种情况下,如果有稠密图,链表肯定更好,但二叉堆更适合稀疏图。 (2认同)