Rake-Compress деревья
Задача, которая решается с помощью динамических деревьев (англ. dynamic tree), формулируется следующим образом. Необходимо поддерживать лес деревьев и выполнять на нем следующие операции:
- добавить ребро . Вершина должна быть корнем некоторого дерева. Вершины и должны находиться в разных деревьях,
 - удалить ребро . Ребро должно присутствовать в графе,
 - некоторый запрос относительно структуры дерева.
 
Примером последней операции может быть запрос "достижима ли вершина из ?", "сколько ребер на кратчайшем пути из в ?" или "какова сумма номеров вершин, которые находятся в поддереве вершины ?". Можно легко реализовать структуру данных, которая будет выполнять данные операции за время , где — количество вершин в графе. Динамические деревья нужны для того, чтобы обрабатывать запросы более эффективно. В частности, все предложенные операции возможно выполнять за время .
Описание
Rake-Compress Tree — структура данных, которая хранит лес деревьев и поддерживает следующие операции:
- — все листья дерева сжимаются к своим родителям,
 - — выбирается и объединяется некоторое множество несмежных друг с другом вершин, имеющих ровно одного сына.
 
Входными данными для алгоритма Rake-Compress является лес корневых деревьев. К нему поочередно применяются операции  и  до тех пор, пока существует хотя бы одна живая вершина.
Во время каждой из этих операций выбирается некоторое множество попарно несмежных вершин, которое сжимается к своим родителям. После каждой операции лес сохраняется в специальном виде, что в дальнейшем дает возможность отвечать на запросы о структуре леса.
Современная реализация Rake-Compress деревьев была предложена Р. А. Тарьяном и Р. Ф. Вернеком.
Рассмотрим, как изменяется количество вершин в дереве после применения к нему операций и . Разобьём все вершины дерева на три группы: входящая степень которых равна нулю, одному и больше одного. Обозначим их количество за и соответственно.
| Лемма (1): | 
.  | 
| Доказательство: | 
| 
 Докажем по индукции по высоте дерева.  | 
| Лемма (2): | 
После применения операций  и  к лесу, математическое ожидание количества вершин в нём не превосходит  от их исходного числа.  | 
| Доказательство: | 
| 
 Математическое ожидание количества удаленных вершин  (так как все листья будут удалены после операции , а каждая вершина, у которой ровно один сын, будет удалена с вероятностью  после операции ). Из предыдущей леммы получаем:  | 
| Теорема: | 
Математическое ожидание количества операций  и , которые будут выполнены до полного сжатия дерева, равно , где  — общее количество вершин.  | 
| Доказательство: | 
| Из леммы 2 известно, что после каждой итерации применения операций и число вершин в среднем уменьшается в константное число раз. Значит, количество итераций в среднем ограничено . | 
Построение
Для того, чтобы отвечать на запросы относительно структуры леса необходимо сохранить информацию о том, как происходил процесс сжатия леса. Для этого будем хранить таблицу, в каждой строке которой записана информация о структуре леса после выполнения операций. Каждая клетка таблицы будет хранить информацию о вершине после выполнения операций  и . Из информации будем сохранять родителя вершины, множество детей и метку, сжата ли вершина.
Пример таблицы для следующей последовательности операций:
| Шаг | Операция | ||||
|---|---|---|---|---|---|
| 4 |  Родитель: — Дети:  | 
— | — | — | |
| 3 |  Родитель: — Дети:  | 
— |  Родитель:  Дети:  | 
— | |
| 2 |  Родитель: — Дети:  | 
 Родитель:  Дети:  | 
 Родитель:  Дети:  | 
— | |
| 1 |  Родитель: — Дети:  | 
 Родитель:  Дети:  | 
 Родитель:  Дети:  | 
 Родитель:  Дети:  | 
Возможность параллельного построения
Операции и можно выполнять параллельно для всех вершин. Если предположить, что множество детей можно пересчитывать за , то Rake-Compress дерево можно построить за в модели PRAM в случае наличия процессоров.
Пример выполнения операций
Применения
- Задача MST online: дан граф из вершин, в который добавляются новые рёбра. Необходимо поддерживать минимальный остовный лес для данного графа,
 - Задача о максимальном потоке: в помощью динамических деревьев можно улучшить ассимптотику алгоритма Диница с до .
 
См. также
Источники информации
- Wikipedia — Parallel Tree Contraction
 - Б. Ю. Минаев — Реализация динамических Rake-Compress деревьев в случае отсутствия ограничения на степени вершин
 - G. L. Miller, J. H. Reif — Parallel Tree Contraction
 - R. Werneck — Design and Analysis of Data Structures for Dynamic Trees