Как заставить ключ уменьшения в биномиальной куче работать во время логарифма

Интерфейс, предоставляемый книгой "Введение в алгоритм" уменьшения ключа в биномиальной куче: BINOMIAL-HEAP-DECREASE-KEY (H,x,k), где H - указатель на первый корень дерева, x - это "индекс" узла, ключ которого должен быть уменьшен до k. И сложность времени O(logn)

Однако мы обычно используем связанный список для реализации биномиальной кучи, где нет прямого доступа к x без выполнения поиска, что в общем случае равно O(n).

Одним из способов решения этой проблемы является сохранение указателя для каждого узла в биномиальной куче, который затем обеспечивает прямой доступ к каждому узлу в O(1), но тогда сложность пространства равна O(n).

Кто-нибудь знает лучшие решения для этого? Спасибо!

Предыдущее обсуждение можно найти здесь.

1 ответ

Если мы храним кучу в массиве, мы можем легко это сделать.

Если корневой элемент имеет индекс i, левый дочерний элемент находится в 2i, а правый дочерний элемент в 2i+1.

В массиве мы храним элементы из индекса 1.

Если мы храним элементы кучи, как это, мы можем непосредственно уменьшить элемент по индексу x и heapify от x.

Таким образом, мы используем o(logn) время. Для уменьшения это постоянно.

Другие вопросы по тегам