Изменения

Перейти к: навигация, поиск

Декартово дерево

8 байт добавлено, 09:34, 6 апреля 2011
Нет описания правки
''Эта статья про Курево''
 
'''Декартово дерево''' {{---}} это структура данных, объединяющая в себе бинарное дерево поиска и бинарную кучу (отсюда и второе её название: <tex>treap (tree+heap)</tex> и дерамида (дерево+пирамида).
== Операция add==
Операция <tex>add(T, k)</tex> добавляет в дерево <tex>T</tex> элемент <tex>k</tex>, где <tex>k.x</tex> {{- --}} ключ, а <tex>k.y</tex>{{--- }} приоритет.
===Реализация №1:===
<p>1) # Разбиваем наше дерево по ключу, который мы хотим добавить, то есть <tex>split(T, T_1, T_2, k.x)</tex>.</p><p>2) # Сливаем первое дерево с новым элементом, то есть <tex>merge(T_1, T_1, k)</tex>.</p><p>3) #Сливаем получившиеся дерево со вторым, то есть <tex>merge(T, T_1, T_2)</tex>. </p>
===Реализация №1:===
<p>1) # Разбиваем наше дерево по ключу, который мы хотим удалить, то есть <tex>split(T, T_1, T_2, x)</tex>.</p><p>2) # Теперь отделяем от второго дерева элемент <tex>x</tex>, опять таки разбивая по ключу <tex>x</tex>, то есть <tex>split(T_2, T_2, T_3, x)</tex>.</p><p>3) # Сливаем первое дерево со третьим, то есть <tex>merge(T, T_1, T_3)</tex>. </p>
===Реализация №2:===
Спускаемся по дереву (как в обычном бинарном дереве поиска по <tex>x</tex>), ища удаляемый элемент. Найдя элемент, мы просто вызываем <tex>merge</tex> его левого и правого сыновей, и возвращаемое ею значение ставим на место удаляемого элемента, то есть <tex>merge(T,T.l,T.r)</tex>.
Анонимный участник

Навигация