私はこれを数日間理解しようとしています。私は次のように言う学校の問題を抱えています:
Aを最小ヒープとします。操作HEAP-MODIFY(A、i、k)は、ノードiのキーを新しい値kに変更してから、最小ヒープ内の要素を再配置します。n要素の最小ヒープに対してO(lgn)時間で実行される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
これにどのように取り組むことができるかについての提案はありますか?