Опубликован: 08.04.2009 | Доступ: свободный | Студентов: 485 / 0 | Длительность: 17:26:00
Специальности: Программист
Лекция 14:

Представление множеств. Деревья. Сбалансированные деревья.

14.1. Представление множеств с помощью деревьев

Полное двоичное дерево. T-деревья

Нарисуем точку. Из нее проведем две стрелки (влево вверх ивправо вверх) в две другие точки. Из каждой из этих точек проведем по две стрелки итак далее. Полученную картинку (в n -ом слое будет 2^{n - 1} точек) называют полным двоичным деревом. Нижнюю точку называют корнем. У каждой вершины есть два сына (две вершины, в которые идут стрелки) - левый и правый. У всякой вершины, кроме корня, есть единственный отец.

Пусть выбрано некоторое конечное множество вершин полного двоичного дерева, содержащее вместе с каждой вершиной и всех ее предков. Пусть на каждой вершине этого множества написано значение фиксированного типа T (то есть задано отображение множества вершин в множество значений типа T ). То, что получится, будем называть T -деревом. Множество всех T -деревьев обозначим Tree(T).

Рекурсивное определение. Всякое непустое T -дерево разбивается на три части: корень (несущий пометку из T ), левое и правое поддеревья (которые могут быть пустыми). Это разбиение устанавливает взаимно однозначное соответствие между множеством непустых T -деревьев и произведением T \times Tree (T) \times Tree (T). Обозначив через empty пустое дерево, можно написать

Tree(T) =\{empty\}+T\times Tree(T)\times Tree
(T).

Поддеревья. Высота

Фиксируем некоторое T -дерево. Для каждой его вершины x определено ее левое поддерево (левый сын вершины x и все его потомки), правое поддерево (правый сын вершины x и все его потомки) и поддерево с корнем в x (вершина x и все ее потомки).


Левое и правое поддеревья вершины x могут быть пустыми, а поддерево с корнем в x всегда непусто (содержит по крайней мере x ). Высотой поддерева будем считать максимальную длину цепи y_1\ldots y_n его вершин, в которой y_{i+1} - сын y_i для всех i. ( Высота дерева из одного корня равна единице, высота пустого дерева - нулю.)

Упорядоченные T-деревья

Пусть на множестве значений типа T фиксирован порядок. Назовем T -дерево упорядоченное дерево, если выполнено такое свойство: для любой вершины x все пометки в ее левом поддереве меньше пометки в x, а все пометки в ее правом поддереве больше пометки в x.


14.1.1. Доказать, что в упорядоченном дереве все пометки различны.

Указание. Индукция по высоте дерева.

Представление множеств с помощью деревьев

Каждое дерево будем считать представлением множества всех пометок на его вершинах. При этом одно и то же множество может иметь различные представления.

Благодаря упорядоченности каждый элемент может легко "найти свое место" в дереве: придя в какую-то вершину и сравнив себя с тем, кто там находится, элемент решает, идти ему налево или направо.

\setlength{\unitlength}{1.2em}
\begin{picture}(8,7)
\put(4,2){\vector(0,1){1.5}}
\put(3,1){\makebox(2,1){y}}
\put(4,4){\makebox(0,0){x}}
\put(3.5,4.5){\vector(-1,1){1.5}}
\put(4.5,4.5){\vector(1,1){1.5}}
\put(1,6){\makebox(2,1){y<x}}
\put(5,6){\makebox(2,1){y>x}}
\end{picture}
Начав с корня и двигаясь по этому правилу, он либо обнаружит, что такой элемент уже есть, либо найдет место, в котором он должен быть.

Всюду далее мы предполагаем, что на значениях типа T задан порядок, и рассматриваем только упорядоченные деревья.