Я пытался понять это уже пару дней. У меня есть школьная задача, в которой говорится следующее:
Пусть A будет минимальной кучей. Операция HEAP-MODIFY (A, i, k) изменяет ключ в узле i на новое значение k, тогда переупорядочивает элементы в минимальной куче. Дайте реализацию HEAPMODIFY, который выполняется за время O (lgn) для n-элементной минимальной кучи.
Поскольку мы должны разработать алгоритм, работающий за время 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
Какие-либо предложения относительно того, как с этим можно справиться?