几天来,我一直试图弄清楚这一点。我对学校有一个问题,说明如下:
设 A 为最小堆。HEAP-MODIFY(A, i, k) 操作将节点 i 中的键更改为新值 k,然后重新排列最小堆中的元素。给出一个在 O(lgn) 时间内运行 n 元素最小堆的 HEAPMODIFY 的实现。
由于我们必须设计一个在 O(lg(n)) 时间内运行的算法,我知道我不能只遍历每个元素。我有以下解决方案,但我不确定它是否正确。
HEAP-MODIFY(A,i,k):
A[i] = K
if A[i] < A[i/2]
while A[i] < A[i/2] and i > 1
exchange A[i], A[i/2]
i=i/2
else if A[i] > A[2*i]
while A[i] > A[2*1] and i <k
exchange A[i], A[2*i]
i = 2*1
关于如何解决这个问题的任何建议?