Декартово дерево — различия между версиями
Строка 16: | Строка 16: | ||
Наивная реализация: | Наивная реализация: | ||
− | 1) Разбиваем наше дерево по ключу, который мы хотим добавить, то есть <tex>split(T | + | <p>1) Разбиваем наше дерево по ключу, который мы хотим добавить, то есть <tex>split(T, T1, T2, k)</tex>.</p> |
− | 2) Сливаем первое дерево с новым элементом, то есть <tex>merge(T1, T1, k)</tex>. | + | <p>2) Сливаем первое дерево с новым элементом, то есть <tex>merge(T1, T1, k)</tex>.</p> |
− | 3) Сливаем получившиеся дерево со вторым. то есть <tex>merge(T, T1, T2)</tex>. | + | <p>3) Сливаем получившиеся дерево со вторым. то есть <tex>merge(T, T1, T2)</tex>. </p> |
− | |||
== Операция remove == | == Операция remove == |
Версия 00:23, 6 апреля 2011
Декартово дерево — это структура данных, объединяющая в себе бинарное дерево поиска и бинарную кучу (отсюда и второе её название:
и дерамида (дерево+пирамида).Более строго, это структура данных, которая хранит пары
в виде бинарного дерева таким образом, что она является бинарным деревом поиска по и бинарной пирамидой по . Предполагая, что все и все являются различными, получаем, что если некоторый элемент дерева содержит , то всех элементов в левом поддереве , у всех элементов в правом поддереве , а также и в левом, и в правом поддереве имеем: .Дерамиды были предложены Сиделем (Siedel) и Арагоном (Aragon) в 1996 г.
Операция split
Тут будет split
Операция merge
А тут будет merge
Операция add
Операция
добавляет в дерево элемент .Наивная реализация:
1) Разбиваем наше дерево по ключу, который мы хотим добавить, то есть
.2) Сливаем первое дерево с новым элементом, то есть
.3) Сливаем получившиеся дерево со вторым. то есть
.