2014-10-31 2 views
1

Как бы «heapify» минимальная куча на основе массива в java после вызова функции min min (это просто берет элемент в индексе 1 и удаляет его, а затем заменяет его последним элементом в массиве). Я смущен относительно того, как я собирался поместить массив в минимальную кучу снова после того, как произошло удаление min.Как «heapify» массив на основе min heap после удаления min?

Индекс 0 всегда остается пустым в массиве минимумов кучи. Родительский индекс - i/2, правый - 2i + 1, а левый - 2i.

Любая помощь будет очень признательна, спасибо, ребята!

ответ

1

Возьмите последний элемент и скопируйте его в первую позицию. Уменьшите кучу на единицу и вызовите heapify() на первый элемент. Куча должна отремонтировать себя. Это имеет сложность O (log n)

Min-Heapify-Down (Array A, int i): 
    left ← 2i 
    right ← 2i + 1 
    smallest ← i 

    if left ≤ heap_length[A] and A[left] < A[smallest] then: 
     smallest ← left 
    if right ≤ heap_length[A] and A[right] < A[smallest] then: 
     smallest ← right 

    if smallest ≠ i then: 
     swap A[i] ↔ A[smallest] 
     Min-Heapify-Down(A, smallest) 
+0

Что будет выглядеть код heapify для этого? – Vimzy

+0

Это тот же самый heapify(), который вы используете при создании кучи. – isklenar

+0

Дело в том, что heapify, который я использовал при построении кучи, использует родительский элемент в качестве компаратора, так что бы я сравнил новый элемент index 1, поскольку у него нет родителя. Вот что меня смущает. – Vimzy

Смежные вопросы