Изменение кучи за время O (lgn)

Я пытался понять это уже пару дней. У меня есть школьная задача, в которой говорится следующее:

Пусть 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

Какие-либо предложения относительно того, как с этим можно справиться?

6
задан Bill the Lizard 15 December 2012 в 16:34
поделиться