Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

8.3. Кучи 339

Высота кучи

Позвольте h обозначить высоту T. Другой способ определить последний узел T является этим

это - узел на уровне h, таким образом, что все другие узлы уровня h налево от него. Настаивая, что у T быть полным также есть важное последствие как показано в Суждении 8.5. Суждение 8.5: у кучи T хранящий n записи есть высота

h =⌊log n.

Оправдание: От факта, что T полон, мы знаем, что есть 2i узлы

на уровне у меня за£ £0 ih- 1, и уровне h есть по крайней мере 1 узел. Таким образом, число

узлы T, по крайней мере,

(1 + 2 + 4 + + 2h-1) + 1 = (2 ч- 1) + 1

=2h.

У уровня h есть самое большее 2 узла ч, и таким образом число узлов T самое большее

(1 + 2 + 4 + + 2h-1) + 2 ч = 2h+1 - 1.

Так как число узлов равно номеру n записей, мы получаем

÷n

и

n2£ h+1 - 1.

Таким образом, беря логарифмы обеих сторон этих двух неравенств, мы видим это

h£ регистрируют n

и

регистрация (n + 1)-1£ h.

Так как h - целое число, эти два неравенства выше подразумевают это

h =⌊log n.

У суждения 8.5 есть важное последствие. Это подразумевает, что, если мы можем выполнить операции по обновлению на куче, вовремя пропорциональной ее высоте, тогда те операции будут бежать в логарифмическое время. Поэтому, давайте повернемся к проблеме того, как к effi-ciently выполняют различные приоритетные функции очереди, используя кучу.

340

Глава 8. Кучи и приоритетные очереди

8.3.2 Полные двоичные деревья и их представление

Давайте обсудим больше о полных двоичных деревьях и как они представлены.

Полное двоичное дерево ADT

Как абстрактный тип данных, полное двоичное дерево T поддерживает все функции

двоичное дерево ADT (Раздел 7.3.1), плюс следующие две функции:

добавьте (e): Добавьте к T и возвратите новый внешний узел v хранящий ele-

ment e, такой, что получающееся дерево - полное двоичное дерево с последним узлом v.

удалите (): Удалите последний узел T и возвратите его элемент. При помощи только этих операций по обновлению получающееся дерево, как гарантируют, будет com-plete набор из двух предметов. Как показано в рисунке 8.4, есть по существу два случая для эффекта добавления (и удалите, подобно).

• Если нижний уровень T не полон, то добавьте, вставляет новый узел на основании

уровень T, немедленно после самого правого узла этого уровня (то есть, последнее

узел); следовательно, высота T остается тем же самым.

• Если нижний уровень полон, то добавьте, вставляет новый узел как покинутого ребенка

крайний левый узел нижнего уровня T; следовательно, высота T увеличивается одной.

w

(a) (b)

w

(c) (d)

Рисунок 8.4: Примеры операций добавляют и удаляют на полном двоичном дереве, где w обозначает, что узел, вставленный, добавляет, или удаленный удаляют. Деревья, показанные в (b) и (d), являются результатами выполнения, добавляют операции на деревьях в (a) и (c), соответственно. Аналогично, деревья, показанные в (a) и (c), являются результатами выполнения, удаляют операции на деревьях в (b) и (d), соответственно.