在O(1)时间内使用父指针删除Heap?

时间:2011-05-08 00:20:38

标签: computer-science heap big-o

所以这是问题所在: 假设最小堆使用父指针,使得每个节点包含指向其父节点的指针,并且根节点具有空指针。给定一个指向节点的指针,该节点不是树的根,包含堆中的最大密钥,删除的复杂性是多少?

答案是O(1),但这对我没有意义。因为堆总是平衡的,所以不能用相邻节点替换已删除的节点,你必须缩放树的长度O(log N)以找到树中最后输入的节点,对吗?为什么不回答这个问题O(log N)?

例如:

以1,100,2,3,4,5的顺序插入一个堆,其中1为根节点,100和2为子节点,3和4为子节点100和5为子节点2。

删除100将需要将其替换为5,需要O(log N)时间才能访问,对吗?

1 个答案:

答案 0 :(得分:3)

您正在寻找的概念是“摊销的常数时间” - 即平均值为O(1) - 即使有时会出现单个操作需要更长时间的情况,例如上面的例子。请查看this问题以获得扩展说明。