Опубликован: 26.09.2006 | Доступ: свободный | Студентов: 1811 / 503 | Оценка: 4.25 / 4.12 | Длительность: 17:09:00
ISBN: 978-5-9556-0066-6
Специальности: Программист, Математик
Лекция 5:

Объединяемые приоритетные очереди

< Лекция 4 || Лекция 5: 123456 || Лекция 6 >

Операция УМЕНЬШИТЬ_КЛЮЧ. Ключ узла x, находящегося в дереве в позиции \rm pos, уменьшается на положительное число \Dl. Это действие может нарушить кучеобразный порядок лишь таким образом, что уменьшенный ключ узла x будет меньше ключа его родителя. Уменьшение ключа может быть проведено в несколько этапов.

От исходной кучи h отрывается подкуча h_2 с корнем в узле x. Оставшаяся куча h не обязательно будет левосторонней. Затем ключ узла x уменьшается на заданное число \Dl. Куча h_2 при этом все еще остается левосторонней.

В куче h восстанавливается свойство левизны, как — показано далее. Фактически свойству левизны могут не удовлетворять только узлы, находящиеся на пути от p ( p — родитель узла x ) до корня h. Длина этого пути в худшем случае линейно зависит от n. Но на самом деле нам нужно проверить только первые не более чем \lfloor \log (n + 1)\rfloor узлов на этом пути. Наконец, куча h сливается с h_2 за время O(\log n). Таким образом, время выполнения данной операцииO(\log n).

Рассмотрим пример. Пусть в куче, изображенной на рис. 5.14, необходимо уменьшить ключ узла x от 9 до 0.


Рис. 5.14.

Делается это следующим образом. От исходной кучи h отрывается подкуча h_2 с корнем в удаляемом узле x. Теперь куча h не является левосторонней, так как в узле p нарушено свойство левизны (рис. 5.15).


Рис. 5.15.

Ключ узла x уменьшается до 0, куча h_2 при этом все еще остается левосторонней (рис. 5.16).


Рис. 5.16.

Следуем от узла p до корня дерева h, для каждого узла этого пути восстанавливаем свойство левизны и ранг. Сначала проверяем узел p: его детей надо поменять местами (а фактически — только одного-единственного правого сына сделать левым). После этого вычисляется новый ранг узла p: он равен рангу правого сына плюс 1, то есть 1 (так как правого сына нет). Получилось дерево, изображенное на рис. 5.17.


Рис. 5.17.

Следующий узел — это родитель узла p с ключом 2. Его потомков тоже необходимо поменять местами (так как ранг левого сына меньше ранга правого). После этого ранг узла с ключом 2 вычисляется как ранг правого сына плюс 1, то есть 2. Получается куча, представленная на рис. 5.18.


Рис. 5.18.
< Лекция 4 || Лекция 5: 123456 || Лекция 6 >
Антон Сиротинкин
Антон Сиротинкин

на стр 6, лекции 3, Очевидно "Ck <= модуль(Gk(е))*b(k+1)" (1) - , подскажите что значит "модуль" и почему это очевидно...