Опубликован: 08.04.2009 | Уровень: для всех | Доступ: платный
Лекция 14:

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

14.2. Сбалансированные деревья

Дерево называется сбалансированным (или АВЛ-деревом в честь изобретателей этого метода Г.М. Адельсона-Вельского и E.М. Ландиса), если для любой его вершины высоты левого и правого поддеревьев этой вершины отличаются не более чем на 1. (В частности, когда одного из сыновей нет, другой - если он есть - обязан быть листом.)

14.2.1. Найти минимальное и максимальное возможное количество вершин в сбалансированном дереве высоты n.

Решение. Максимальное число вершин равно 2^n-1. Если m_n - минимальное число вершин, то, как легко видеть, m_{n + 2} = 1 + m_n + m_{n+1}, откуда m_n =\Phi_{n+2} - 1 ( \Phi_n - n -ое число Фибоначчи, \Phi_1=1, \Phi_2=1, \Phi_{n+2} = \Phi_n +\Phi_{n+1} ).

14.2.2. Доказать, что сбалансированное дерево с n вершинами имеет высоту не больше C \log n для некоторой константы C, не зависящей от n.

Решение. Индукцией по n легко доказать, что \Phi_{n+2}\ge a^n, где a - больший корень квадратного уравнения a^2=1+a, то есть a = (\sqrt{5} + 1)/2. Остается воспользоваться предыдущей задачей.

Вращения

Мы хотим восстанавливать сбалансированность дерева после включения и удаления элементов. Для этого необходимы какие-то преобразования дерева, не меняющие множества пометок на его вершинах и не нарушающие упорядоченности, но способствующие лучшей сбалансированности. Опишем несколько таких преобразований.


Пусть вершина a имеет правого сына b. Обозначим через P левое поддерево вершины a, через Q и R - левое и правое поддеревья вершины b. Упорядоченность дерева требует, чтобы P < a < Q <  b  <  R (точнее следовало бы сказать "любая пометка на P меньше пометки на a ", "пометка на a меньше любой пометки на Q " и т.д., но мы позволим себе этого не делать). Точно того же требует упорядоченность дерева с корнем b, его левым сыном a, в котором P и Q - левое и правое поддеревья a, R - правое поддерево b. Поэтому первое дерево можно преобразовать во второе, не нарушая упорядоченности. Такое преобразование назовем малым правым вращением (правым - поскольку существует симметричное, левое, малым - поскольку есть и большое, которое мы сейчас опишем).

Пусть b - правый сын a, c - левый сын b, P - левое поддерево a, Q и R - левое и правое поддеревья c, S - правое поддерево b. Тогда P < a < Q < c < R < b < S.


Такой же порядок соответствует дереву с корнем c, имеющим левого сына a и правого сына b, для которого P и Q - поддеревья вершины a, а R и S - поддеревья вершины b. Соответствующее преобразование будем называть большим правым вращением. (Аналогично определяется симметричное ему большое левое вращение.)

14.2.3. Дано дерево, сбалансированное всюду, кроме корня, в котором разница высот равна 2 (т.е. левое и правое поддеревья корня сбалансированы и их высоты отличаются на 2 ). Доказать, что оно может быть превращено в сбалансированное одним из четырех описанных преобразований, причем высота его останется прежней или уменьшится на 1.

Решение. Пусть более низким является, например, левое поддерево, и его высота равна k. Тогда высота правого поддерева равна k+2. Обозначим корень через a, а его правого сына (он обязательно есть) через b. Рассмотрим левое и правое поддеревья вершины b. Одно из них обязательно имеет высоту k+1, а другое может иметь высоту k или k+1 (меньше k быть не может, так как поддеревья сбалансированы). Если высота левого поддерева равна k+1, а правого - k, то потребуется большое правое вращение; в остальных случаях помогает малое. Вот как выглядят три случая балансировки дерева:


Татьяна Новикова
Татьяна Новикова
Россия, Пошатово
Artem Bardakov
Artem Bardakov
Россия