Я пытаюсь понять это уже пару дней. У меня есть задача для школы, которая гласит следующее:
Пусть 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
Любые предложения относительно того, как это можно решить?