Поддерживать кучу .
Учитывая n
элементов, вы можете превратить их в кучу за время O(n)
.Когда они представляют собой кучу, вы можете добавлять и удалять элементы во времени O(log(n))
и вы можете найти самый маленький элемент во времени O(1)
.
Для реализации одного все, что вам нужно, - это массив.Корневой узел - 0
, а узлы ниже i
'- в 2*i+1
и 2*i + 2
.Условием кучи является то, что каждый узел меньше, чем узлы над ним.Самый маленький - это всегда корень.Чтобы добавить элемент, просто поместите его в массив и дайте ему «упасть» до его естественного уровня.Чтобы удалить элемент, удалите корневой элемент, удалите последний элемент из массива, поместите его в корень и дайте ему «всплыть» в нужном месте.(В фазе «всплывающего вверх» вы меняете его местами с меньшим из двух дочерних узлов, пока у него, наконец, не останутся меньшие дочерние узлы.) Чтобы эффективно создать массив, вы начинаете с медианного элемента, и каждый элемент пузырявверх».Эта операция выглядит как O(n log(n))
, но тщательный анализ показывает, что это всего лишь O(n)
.