Россия, Пошатово |
Представление множеств. Деревья. Сбалансированные деревья.
14.2. Сбалансированные деревья
Дерево называется сбалансированным (или АВЛ-деревом в честь изобретателей этого метода Г.М. Адельсона-Вельского и E.М. Ландиса), если для любой его вершины высоты левого и правого поддеревьев этой вершины отличаются не более чем на . (В частности, когда одного из сыновей нет, другой - если он есть - обязан быть листом.)
14.2.1. Найти минимальное и максимальное возможное количество вершин в сбалансированном дереве высоты .
Решение. Максимальное число вершин равно . Если - минимальное число вершин, то, как легко видеть, , откуда ( - -ое число Фибоначчи, , , ).
14.2.2. Доказать, что сбалансированное дерево с вершинами имеет высоту не больше для некоторой константы , не зависящей от .
Решение. Индукцией по легко доказать, что , где - больший корень квадратного уравнения , то есть . Остается воспользоваться предыдущей задачей.
Вращения
Мы хотим восстанавливать сбалансированность дерева после включения и удаления элементов. Для этого необходимы какие-то преобразования дерева, не меняющие множества пометок на его вершинах и не нарушающие упорядоченности, но способствующие лучшей сбалансированности. Опишем несколько таких преобразований.
Пусть вершина имеет правого сына . Обозначим через левое поддерево вершины , через и - левое и правое поддеревья вершины . Упорядоченность дерева требует, чтобы (точнее следовало бы сказать "любая пометка на меньше пометки на ", "пометка на меньше любой пометки на " и т.д., но мы позволим себе этого не делать). Точно того же требует упорядоченность дерева с корнем , его левым сыном , в котором и - левое и правое поддеревья , - правое поддерево . Поэтому первое дерево можно преобразовать во второе, не нарушая упорядоченности. Такое преобразование назовем малым правым вращением (правым - поскольку существует симметричное, левое, малым - поскольку есть и большое, которое мы сейчас опишем).
Пусть - правый сын , - левый сын , - левое поддерево , и - левое и правое поддеревья , - правое поддерево . Тогда .
Такой же порядок соответствует дереву с корнем , имеющим левого сына и правого сына , для которого и - поддеревья вершины , а и - поддеревья вершины . Соответствующее преобразование будем называть большим правым вращением. (Аналогично определяется симметричное ему большое левое вращение.)
14.2.3. Дано дерево, сбалансированное всюду, кроме корня, в котором разница высот равна (т.е. левое и правое поддеревья корня сбалансированы и их высоты отличаются на ). Доказать, что оно может быть превращено в сбалансированное одним из четырех описанных преобразований, причем высота его останется прежней или уменьшится на .
Решение. Пусть более низким является, например, левое поддерево, и его высота равна . Тогда высота правого поддерева равна . Обозначим корень через , а его правого сына (он обязательно есть) через . Рассмотрим левое и правое поддеревья вершины . Одно из них обязательно имеет высоту , а другое может иметь высоту или (меньше быть не может, так как поддеревья сбалансированы). Если высота левого поддерева равна , а правого - , то потребуется большое правое вращение; в остальных случаях помогает малое. Вот как выглядят три случая балансировки дерева: