Поддерживает ли двоичная куча операцию уменьшения ключа?

В соответствии с http://en.wikipedia.org/wiki/Heap_%28data_structure%29#Comparison_of_theoretic_bounds_for_variants для выполнения операции уменьшения нажмите Θ (logn) (что соответствует O (logn)). Однако, похоже, нет сайта, который включает реализацию кучи двоичных файлов с операцией уменьшения ключа.

Учитывая, следовательно, отсутствие реализаций в сети, можно ли выполнить операцию уменьшения ключа в двоичной куче?

Ответ 1

Я понял это:

  • Чтобы выполнить клавишу уменьшения в O (logn), мы должны заранее знать местоположение соответствующего элемента. Хэш-карта и хорошая хеш-функция могут гарантировать O (1) амортизированное время. После каждой модификации мы должны обновить хэш-карту, которая принимает O (logn).
  • После определения местоположения нашего элемента мы перемещаем наш элемент вверх, если он имеет больший приоритет, чем его родительский (аналогично вставке) или вниз, если он имеет более низкий приоритет, чем один из его дочерних элементов (в аналогично удалению) и обновить местоположения модифицированных элементов на карте хэша.