HEAP-INCREASE-KEY复杂性

时间:2014-11-08 16:35:52

标签: data-structures heap complexity-theory time-complexity asymptotic-complexity

让A成为一个堆,而不是以常规方式存储值,只定期存储根,并将每个子存储为它与其父节点之间的差异。 HEAP-INCREASE-KEY(A,i,key)操作的复杂性是什么(操作将i的节点密钥更新为密钥)?

1 个答案:

答案 0 :(得分:1)

它可以在O(log N)时间内完成,就像在普通堆中一样。要查找要存储在节点i中的新值,您可以遍历从堆根到此节点的路径,以根据它与其父节点之间的差异来表示新的key值。之后,可以以与在普通堆中完成相同的方式执行筛选过程。执行sift-up过程中的交换时,值仅对这两个交换节点及其子节点进行更改。因此,一次交换需要O(1)次更新。这就是为什么总时间复杂度为O(log N)

这是一种实现它的简单方法:
1.让我们呼叫节点"触摸"如果它位于堆根和更新节点之间的路径上。让我们调用节点"重建"如果它与最近的"触及的距离是什么?节点最多为2 2.对于每个"重建"节点一可以通过遍历堆来计算其真值。请注意,有O(log N)"重建"任何查询的节点 3.重建所有重建的真实价值后重建"节点可以运行通常的筛选程序 4.在此过程完成之后,可以通过遍历所有“重建”的堆来计算节点与其父节点之间差异的密钥。节点。永远不会触及所有其他节点。