SlideShare a Scribd company logo
1 of 22
Download to read offline
Лекция 9:
Декартовы деревья
(Treaps)
Курносов Михаил Георгиевич
к.т.н. доцент Кафедры вычислительных систем
Сибирский государственный университет
телекоммуникаций и информатики
http://www.mkurnosov.net
Двоичные деревья поиска (Binary Search Trees)
1. Операции над BST имеют трудоемкость
пропорциональную высоте дерева: O(h)
2. В среднем случае высота h бинарного
дерева поиска O(logn)

1
Value1

NULL

3. В худшем случае элементы добавляются
по возрастанию (убыванию) ключей –
дерево вырождается в список длины n
bstree_add(1,
bstree_add(2,
bstree_add(3,
bstree_add(4,

value1)
value2)
value3)
value4)

В худшем случае бинарное дерево поиска
имеет высоту O(n)

2
Value2

NULL

3
Value3

NULL

4
Value4

2
Декартово дерево (Treap)
 Декартово дерево (Treap) – это структура данных для
реализации словаря, объединяющая в себе бинарное дерево
поиска и бинарную кучу
 Происхождение названия: treap = tree + heap
 Русскоязычный аналог: дуча = дерево + куча,
дерамида = дерево + пирамида
 Авторы: Сидель Раймунд (Seidel Raimund) и Цецилия
Арагон (Aragon Cecilia), 1989
 Aragon Cecilia R., Seidel Raimund. Randomized Search Trees //
Proc. 30th Symp. Foundations of Computer Science (IEEE Computer
Society Press), 1989, pp. 540-545
 Seidel Raimund, Aragon Cecilia R. Randomized Search Trees //
Algorithmica. – 1996. – 16 (4/5). – pp. 464–497

3
Декартово дерево (Treap)
 Каждый узел декартова дерева (treap) содержит:
 пару (x, y)
x – ключ бинарного дерева поиска,
y – приоритет бинарной кучи
 указатель left на левое поддерево
 указатель right на правое поддерево


Предполагается, что все x и y различны
1) Свойства
дерева поиска:
xL < x0 < xR

2) Свойства
бинарной кучи:
y0 < yL
y0 < yR

(x0, y0)

(xL, yL)

(xR, yR)

4
Пример декартова дерева
K
3

Z
4

C
5

B
10

D
14

Пример декартова дерева:
ключи дерева поиска – буквы алфавита,
приоритет кучи (min-heap) – числа

5
Операции декартова дерева
Операция

Средний случай
(average case)

Худший случай
(worst case)

Lookup(x)

𝑂(log 𝑛)

amortized𝑂(log 𝑛)

Insert(x,value)

𝑂(log 𝑛)

amortized𝑂(log 𝑛)

Delete(x)

𝑂(log 𝑛)

amortized𝑂(log 𝑛)

Split(x)

𝑂(log 𝑛)

𝑂(𝑛)

Merge(T1, T2)

𝑂(log 𝑛)

𝑂(𝑛)

 Сложность по памяти𝑂(𝑛)

6
Поиск элемента в декартовом дереве
function TreapLookup(treap, x)
while treap != NULL do
if x == treap.x then
return treap;
else if x < treap.x then
treap = treap.left
else
treap = treap.right
end if
end while
return NULL;
end function

TLookup = O(log(logu))

TLookup = O(h) = O(n)

 При поиске элемента приоритет y игнорируется, учитываются только
ключи x – как в обычном бинарном дереве поиска
 В худшем случае спуск по дереву осуществляется до листа –
выполняется порядка O(h) сравнений

7
Разбиение декартова дерева (Split)
 Операция Split(T, x) разбивает декартово дерево на два
дерева T1 и T2
 В дереве T1 находятся узлы с ключами node.x ≤ x
 В дереве T2 находятся узлы с ключами node.x > x
K
3

Split(T, E)

Z
4

C
5

T1
B
10

T2

D
14

8
Разбиение декартова дерева (Split)
 Случай 1: ключ разбиения x > ключа корня (root.x)
 Левое поддерево T1 совпадает с левым поддеревом
корня T

 Для нахождения правого поддерева T1 необходимо разбить
правое поддерево T по ключу x на T1R и T2R и взять T1R
 Дерево T2 совпадает с деревом T2R

T

T1

(root.x)

Split(T, x)

T2

x > root.x
T1R
L

R

L

T2R
9
Разбиение декартова дерева (Split)
 Случай 2 (симметричный): ключ разбиения x < ключа корня
 Правое поддерево T2 совпадает с правым поддеревом
корня T

 Для нахождения левого поддерева T2 необходимо разбить
левое поддерево T по ключу x на T1L и T2L и взять T2L
 Дерево T1 совпадает с деревом T1L

T

T2

(root.x)

Split(T, x)
x < root.x

T1
T2L

L

R

T1L

R

10
Разбиение декартова дерева (Split)
function TreapSplit(treap, x, &treap1, &treap2)
TLookup = O(log(logu))
if treap = NULL then
treap1 = treap2 = NULL
else if x > treap.x then
TreapSplit(treap.right, x, treap.right, treap2)
treap1 = treap
else
TreapSplit(treap.left, x, treap1, treap.left)
treap2 = treap
end if
TSplit = O(h) = O(n)
end function

 В худшем случае требуется спуск по дереву до листа –
выполняется порядка O(h) разбиений
11
Слияние декартовых деревьев (Merge)
 Операция Merge(T1, T2) сливает два декартовых дерева T1 и T2
в новое дерево T (причем все ключи x дерева T2 должны быть
больше ключей x дерева T1)
 Случай 1: Приоритет y корня T1 > приоритета y корня T2
 Корень дерева T1 становится корнем T
 Левое поддерево T1 становится левым поддеревом T
 Правое поддерево T – это объединение правого поддерева T1
и дерева T2

T1

T2

T

(T1.root.y)

(T2.root.y)

(T1.root.y)
Merge(T1, T2, T)

L

R

L

R

T1.root.y
>
T2.root.y

T1L

T1R

T2
Слияние декартовых деревьев (Merge)
 Операция Merge(T1, T2) сливает два декартовых дерева T1 и T2
в новое дерево T (причем все ключи x дерева T2 должны быть
больше ключей x дерева T1)
 Случай 2 (симметричный): Приоритет y корня T1 < приоритета y
корня T2
 Корень дерева T2 становится корнем T
 Правое поддерево T2 становится правым поддеревом T
 Левое поддерево T – это объединение T1 и левого поддерева T2

T1

T2

T

(T1.root.y)

(T2.root.y)

(T2.root.y)
Merge(T1, T2, T)

L

R

L

R

T1.root.y
<
T2.root.y

T1

T2L

T2R
Слияние декартовых деревьев (Merge)
function TreapMerge(treap1, treap2, &treap)
TLookup = O(log(logu))
if treap1 = NULL OR treap2 = NULL then
treap = treap1
if treap1 = NULL then
treap = treap2
else if treap1.y > treap2.y then
TreapMerge(treap1.right, treap2, treap1.right)
treap = treap1
else
TreapMerge(treap2.left, treap1, treap2.left)
treap = treap2
end if
TMerge = O(h) = O(n)
end function

 В худшем случае требуется спуск по дерево до листа –
выполняется порядка O(h) разбиений

14
Добавление элемента в декартово дерево
 Операция Insert(T, x, y, value) добавляет в декартово дерево
узел node с ключом x, приоритетом y и значением value
 Узел node – это декартово дерево из одного элемента

 Можно слить дерево T и дерево node, но по требованию
операции Merge, все ключи дерева node должны быть больше
ключей T
 В дереве T некоторые ключи могут быть как больше x,
так и меньше x

T

node
∀𝑥 𝑇 ∈ 𝑇:

L

R

?

𝒙 𝑻 < 𝒏𝒐𝒅𝒆. 𝒙

x, y,
value

15
Добавление элемента в декартово дерево
 Версия 1. Преобразуем деревья для удовлетворения
требований операции Merge
 Разобьём дерево T по ключу node.x на два поддерева T1 и T2,
таким образом в дереве T1 будут узлы с x ≤ node.x, а в дереве
T2 с ключами x > node.x
 Сливаем дерево T1 и дерево node в дерево T1
 Сливаем новое дерево T1 и дерево T2 в дерево T1
function TreapInsert(treap, node)
TreapSplit(treap, node.x, t1, t2)
TreapMerge(t1, node, t1)
TreapMerge(t1, t2, t1)
return t1
end function

// O(h)
// O(h)
// O(h)

TInsert = O(h) = O(n)

16
Добавление элемента в декартово дерево
 Версия 2 – без использования операции слияния (Merge)
 Спускаемся по дереву поиска (по ключу node.x),
останавливаемся на узле z, в котором приоритет z.y меньше
приоритета node.y
 Разбиваем дерево z по ключу node.x: в поддереве T1 узлы z
с ключами ≤ node.x, в T2 – с ключами > node.x
 Делаем T1 и T2 левым и правым поддеревьями узла node
 Дерево node ставим на место узла z

T
z

y

T
Split(z, node.x)

z

T1

x

T2

17
Удаление элемента из декартова дерева
 Версия 1 – с использованием операции Split
 Находим в дереве T узел node с ключом x
 Разбиваем дерево T по ключу x на деревья T1 и T2: Split(T, x)

 Отделяем от дерева T1 узел с ключом x, для этого разбиваем
T1 по ключу x – ε на поддеревья T1 и T3 (содержит ключ x):
Split(T1, x – ε)
 Сливаем деревья T1 и T2: Merge(T1, T2)
function TreapDelete(treap, x)
node = TreapLookup(treap, x)
TreapSplit(treap, x, t1, t2)
TreapSplit(t1, x - eps, t1, t3)
TreapMerge(t1, t2, t1)
return t1
end function

//
//
//
//

O(h)
O(h)
O(h)
O(h)

TDeletet = O(h) = O(n)

18
Удаление элемента из декартова дерева
 Версия 2 – без использования операции Split
 Находим в дереве T узел node с ключом x
 Сливаем левое и правое поддеревья дерева node:
Merge(node.left, node.right)
 Результат слияния поддеревьев ставим на место узла node

19
Высота декартова дерева
 В худшем случае высота декартова дерева O(n)
 Например, при вставке ключей: (1, 1), (2, 2), …, (n, n)
1, 1
Value1

2, 2

NULL

Value2

 Как избежать
такой ситуации?

3, 3

NULL

 Мы можем
задавать приоритеты
для регулирования высоты дерева

Value3

NULL

4, 4
Value4

20
Псевдослучайные приоритеты
Утверждение. В декартовом дереве из n узлов, приоритет y
которых является случайной величиной c равномерным
распределением, средняя глубина вершины равна O(logn)
Доказательство
 Разобрать самостоятельно:
http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B5%D0%BA%D0%B0%D1
%80%D1%82%D0%BE%D0%B2%D0%BE_%D0%B4%D0%B5%D1%80%D0%B5%D0%
B2%D0%BE

□
 Таким образом в декартовом дереве с псевдослучайными
приоритетами время выполнение операций Split, Merge, Insert,
Delete равно O(logn)
21
Задания
 Разобрать доказательство утверждения о высоте декартова
дерева со случайными приоритетами
 Изучить способы построения декартова дерева при условии,
что все добавляемые элементы известны заранее (offline):
(x1, y1), …., (xn, yn)
 Алгоритм со сложностью O(n2)
 Алгоритм с линейной сложностью O(n)
1. http://ru.wikipedia.org/wiki/%D0%94%D0%B5%D0%BA%D0%B0%D1%80%D1%82%D0%B
E%D0%B2%D0%BE_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE

22

More Related Content

What's hot

71 презентація початкової школи
71 презентація початкової школи71 презентація початкової школи
71 презентація початкової школиolga_ruo
 
Презентація біографії А.Ґавальди
Презентація біографії А.ҐавальдиПрезентація біографії А.Ґавальди
Презентація біографії А.ҐавальдиAdriana Himinets
 
рекомендовані теми робіт ман іноз.
рекомендовані теми  робіт ман  іноз.рекомендовані теми  робіт ман  іноз.
рекомендовані теми робіт ман іноз.rmk-resh
 
інноваційні технології навчання на уроках інформатики
інноваційні технології навчання на уроках інформатикиінноваційні технології навчання на уроках інформатики
інноваційні технології навчання на уроках інформатикиStAlKeRoV
 
Php Best Practices
Php Best PracticesPhp Best Practices
Php Best PracticesAnsar Ahmed
 
використання стилів у текстових документах
використання стилів у текстових документахвикористання стилів у текстових документах
використання стилів у текстових документах������ �����
 
Байбара Т.Н. Методика навчання природознавства
Байбара Т.Н. Методика навчання природознавстваБайбара Т.Н. Методика навчання природознавства
Байбара Т.Н. Методика навчання природознавстваoleg379
 
як працювати над методичною проблемою школи
як працювати над методичною проблемою школияк працювати над методичною проблемою школи
як працювати над методичною проблемою школиqwerty1979
 
Презентація досвіду Жук Наталя
Презентація досвіду Жук НаталяПрезентація досвіду Жук Наталя
Презентація досвіду Жук НаталяOlena Yelnikoff
 
Модуль2. Тема 3. Методи, прийоми та засоби виховання
Модуль2. Тема 3. Методи, прийоми та засоби вихованняМодуль2. Тема 3. Методи, прийоми та засоби виховання
Модуль2. Тема 3. Методи, прийоми та засоби вихованняstecenko_nm
 
презентація сервіси розміщення відео та аудіо
презентація   сервіси розміщення відео та аудіопрезентація   сервіси розміщення відео та аудіо
презентація сервіси розміщення відео та аудіоСергій Каляфіцький
 
презентація алгоритми з розгалуженням
презентація   алгоритми з розгалуженнямпрезентація   алгоритми з розгалуженням
презентація алгоритми з розгалуженнямСергій Каляфіцький
 
Педагогічне дослідження. Структура. Методи
Педагогічне дослідження. Структура. МетодиПедагогічне дослідження. Структура. Методи
Педагогічне дослідження. Структура. МетодиMarina Radchenko
 
Павло Полуботок
Павло ПолуботокПавло Полуботок
Павло Полуботокzelenuk31if
 
Використання інтерактивних технологій на уроках світової літератури
Використання інтерактивних технологій на уроках світової літературиВикористання інтерактивних технологій на уроках світової літератури
Використання інтерактивних технологій на уроках світової літературиОльга Ксьонз
 
Розвиток ключових компетентностей учнів у сучасній школі
Розвиток ключових компетентностей учнів у сучасній школіРозвиток ключових компетентностей учнів у сучасній школі
Розвиток ключових компетентностей учнів у сучасній школіyulya cheholka
 

What's hot (20)

71 презентація початкової школи
71 презентація початкової школи71 презентація початкової школи
71 презентація початкової школи
 
Презентація біографії А.Ґавальди
Презентація біографії А.ҐавальдиПрезентація біографії А.Ґавальди
Презентація біографії А.Ґавальди
 
рекомендовані теми робіт ман іноз.
рекомендовані теми  робіт ман  іноз.рекомендовані теми  робіт ман  іноз.
рекомендовані теми робіт ман іноз.
 
інноваційні технології навчання на уроках інформатики
інноваційні технології навчання на уроках інформатикиінноваційні технології навчання на уроках інформатики
інноваційні технології навчання на уроках інформатики
 
Php Best Practices
Php Best PracticesPhp Best Practices
Php Best Practices
 
використання стилів у текстових документах
використання стилів у текстових документахвикористання стилів у текстових документах
використання стилів у текстових документах
 
Байбара Т.Н. Методика навчання природознавства
Байбара Т.Н. Методика навчання природознавстваБайбара Т.Н. Методика навчання природознавства
Байбара Т.Н. Методика навчання природознавства
 
як працювати над методичною проблемою школи
як працювати над методичною проблемою школияк працювати над методичною проблемою школи
як працювати над методичною проблемою школи
 
Презентація досвіду Жук Наталя
Презентація досвіду Жук НаталяПрезентація досвіду Жук Наталя
Презентація досвіду Жук Наталя
 
Модуль2. Тема 3. Методи, прийоми та засоби виховання
Модуль2. Тема 3. Методи, прийоми та засоби вихованняМодуль2. Тема 3. Методи, прийоми та засоби виховання
Модуль2. Тема 3. Методи, прийоми та засоби виховання
 
презентація сервіси розміщення відео та аудіо
презентація   сервіси розміщення відео та аудіопрезентація   сервіси розміщення відео та аудіо
презентація сервіси розміщення відео та аудіо
 
Урок 23. Події. Обробники подій
Урок 23. Події. Обробники подійУрок 23. Події. Обробники подій
Урок 23. Події. Обробники подій
 
презентація алгоритми з розгалуженням
презентація   алгоритми з розгалуженнямпрезентація   алгоритми з розгалуженням
презентація алгоритми з розгалуженням
 
Типова освітня програма (Шиян Р.Б.)
Типова освітня програма (Шиян Р.Б.)Типова освітня програма (Шиян Р.Б.)
Типова освітня програма (Шиян Р.Б.)
 
Педагогічне дослідження. Структура. Методи
Педагогічне дослідження. Структура. МетодиПедагогічне дослідження. Структура. Методи
Педагогічне дослідження. Структура. Методи
 
Павло Полуботок
Павло ПолуботокПавло Полуботок
Павло Полуботок
 
Використання інтерактивних технологій на уроках світової літератури
Використання інтерактивних технологій на уроках світової літературиВикористання інтерактивних технологій на уроках світової літератури
Використання інтерактивних технологій на уроках світової літератури
 
Урок-діалог у системі інтерактивного навчання
Урок-діалог у системі інтерактивного навчанняУрок-діалог у системі інтерактивного навчання
Урок-діалог у системі інтерактивного навчання
 
Розвиток ключових компетентностей учнів у сучасній школі
Розвиток ключових компетентностей учнів у сучасній школіРозвиток ключових компетентностей учнів у сучасній школі
Розвиток ключових компетентностей учнів у сучасній школі
 
урок 19 практична робота №1
урок 19 практична робота №1урок 19 практична робота №1
урок 19 практична робота №1
 

Similar to Лекция 9: Декартовы деревья (Treaps, дучи, дерамиды)

Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Mikhail Kurnosov
 
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Mikhail Kurnosov
 
Лекция №6. Деревья. Предмет "Структуры и алгоритмы обработки данных"
Лекция №6. Деревья. Предмет "Структуры и алгоритмы обработки данных"Лекция №6. Деревья. Предмет "Структуры и алгоритмы обработки данных"
Лекция №6. Деревья. Предмет "Структуры и алгоритмы обработки данных"Nikolay Grebenshikov
 
Лекция 2: АВЛ-деревья (AVL trees)
Лекция 2: АВЛ-деревья (AVL trees)Лекция 2: АВЛ-деревья (AVL trees)
Лекция 2: АВЛ-деревья (AVL trees)Mikhail Kurnosov
 
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Mikhail Kurnosov
 
Алгоритмы и структуры данных осень 2013 лекция 6
Алгоритмы и структуры данных осень 2013 лекция 6Алгоритмы и структуры данных осень 2013 лекция 6
Алгоритмы и структуры данных осень 2013 лекция 6Technopark
 
Лекция 4: Префиксные деревья (Tries, prefix trees)
Лекция 4: Префиксные деревья (Tries, prefix trees)Лекция 4: Префиксные деревья (Tries, prefix trees)
Лекция 4: Префиксные деревья (Tries, prefix trees)Mikhail Kurnosov
 
Лекция 11. Деревья отрезков (Interval trees)
Лекция 11. Деревья отрезков (Interval trees)Лекция 11. Деревья отрезков (Interval trees)
Лекция 11. Деревья отрезков (Interval trees)Mikhail Kurnosov
 
Левосторонняя куча
Левосторонняя кучаЛевосторонняя куча
Левосторонняя кучаBaLiK
 
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Mikhail Kurnosov
 
Лекция №7. Поиск. Деревья поиска. Предмет "Структуры и алгоритмы обработки да...
Лекция №7. Поиск. Деревья поиска. Предмет "Структуры и алгоритмы обработки да...Лекция №7. Поиск. Деревья поиска. Предмет "Структуры и алгоритмы обработки да...
Лекция №7. Поиск. Деревья поиска. Предмет "Структуры и алгоритмы обработки да...Nikolay Grebenshikov
 
Алгоритмы и структуры данных осень 2013 лекция 5
Алгоритмы и структуры данных осень 2013 лекция 5Алгоритмы и структуры данных осень 2013 лекция 5
Алгоритмы и структуры данных осень 2013 лекция 5Technopark
 
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"Nikolay Grebenshikov
 
Лекция 5: B-деревья (B-trees, k-way merge sort)
Лекция 5: B-деревья (B-trees, k-way merge sort)Лекция 5: B-деревья (B-trees, k-way merge sort)
Лекция 5: B-деревья (B-trees, k-way merge sort)Mikhail Kurnosov
 
Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Mikhail Kurnosov
 
Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)Mikhail Kurnosov
 
презентация с авторским шаблоном и заметками дз 28.03.12
презентация с авторским шаблоном и заметками дз 28.03.12презентация с авторским шаблоном и заметками дз 28.03.12
презентация с авторским шаблоном и заметками дз 28.03.12galinalevna
 
Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...
Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...
Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...Nikolay Grebenshikov
 
презентация с авторским шаблоном и заметками Levinaga
презентация с авторским шаблоном и заметками Levinagaпрезентация с авторским шаблоном и заметками Levinaga
презентация с авторским шаблоном и заметками LevinagaGalnalevina
 
презентация с авторским шаблоном и заметками Levinaga
презентация с авторским шаблоном и заметками Levinagaпрезентация с авторским шаблоном и заметками Levinaga
презентация с авторским шаблоном и заметками Levinagalevinaga
 

Similar to Лекция 9: Декартовы деревья (Treaps, дучи, дерамиды) (20)

Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
 
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
 
Лекция №6. Деревья. Предмет "Структуры и алгоритмы обработки данных"
Лекция №6. Деревья. Предмет "Структуры и алгоритмы обработки данных"Лекция №6. Деревья. Предмет "Структуры и алгоритмы обработки данных"
Лекция №6. Деревья. Предмет "Структуры и алгоритмы обработки данных"
 
Лекция 2: АВЛ-деревья (AVL trees)
Лекция 2: АВЛ-деревья (AVL trees)Лекция 2: АВЛ-деревья (AVL trees)
Лекция 2: АВЛ-деревья (AVL trees)
 
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
 
Алгоритмы и структуры данных осень 2013 лекция 6
Алгоритмы и структуры данных осень 2013 лекция 6Алгоритмы и структуры данных осень 2013 лекция 6
Алгоритмы и структуры данных осень 2013 лекция 6
 
Лекция 4: Префиксные деревья (Tries, prefix trees)
Лекция 4: Префиксные деревья (Tries, prefix trees)Лекция 4: Префиксные деревья (Tries, prefix trees)
Лекция 4: Префиксные деревья (Tries, prefix trees)
 
Лекция 11. Деревья отрезков (Interval trees)
Лекция 11. Деревья отрезков (Interval trees)Лекция 11. Деревья отрезков (Interval trees)
Лекция 11. Деревья отрезков (Interval trees)
 
Левосторонняя куча
Левосторонняя кучаЛевосторонняя куча
Левосторонняя куча
 
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
 
Лекция №7. Поиск. Деревья поиска. Предмет "Структуры и алгоритмы обработки да...
Лекция №7. Поиск. Деревья поиска. Предмет "Структуры и алгоритмы обработки да...Лекция №7. Поиск. Деревья поиска. Предмет "Структуры и алгоритмы обработки да...
Лекция №7. Поиск. Деревья поиска. Предмет "Структуры и алгоритмы обработки да...
 
Алгоритмы и структуры данных осень 2013 лекция 5
Алгоритмы и структуры данных осень 2013 лекция 5Алгоритмы и структуры данных осень 2013 лекция 5
Алгоритмы и структуры данных осень 2013 лекция 5
 
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"
 
Лекция 5: B-деревья (B-trees, k-way merge sort)
Лекция 5: B-деревья (B-trees, k-way merge sort)Лекция 5: B-деревья (B-trees, k-way merge sort)
Лекция 5: B-деревья (B-trees, k-way merge sort)
 
Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)
 
Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)
 
презентация с авторским шаблоном и заметками дз 28.03.12
презентация с авторским шаблоном и заметками дз 28.03.12презентация с авторским шаблоном и заметками дз 28.03.12
презентация с авторским шаблоном и заметками дз 28.03.12
 
Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...
Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...
Лекция №11. Работа с внешней памятью (файлами). Предмет "Структуры и алгоритм...
 
презентация с авторским шаблоном и заметками Levinaga
презентация с авторским шаблоном и заметками Levinagaпрезентация с авторским шаблоном и заметками Levinaga
презентация с авторским шаблоном и заметками Levinaga
 
презентация с авторским шаблоном и заметками Levinaga
презентация с авторским шаблоном и заметками Levinagaпрезентация с авторским шаблоном и заметками Levinaga
презентация с авторским шаблоном и заметками Levinaga
 

More from Mikhail Kurnosov

Векторизация кода (семинар 2)
Векторизация кода (семинар 2)Векторизация кода (семинар 2)
Векторизация кода (семинар 2)Mikhail Kurnosov
 
Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Mikhail Kurnosov
 
Векторизация кода (семинар 1)
Векторизация кода (семинар 1)Векторизация кода (семинар 1)
Векторизация кода (семинар 1)Mikhail Kurnosov
 
Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Mikhail Kurnosov
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...Mikhail Kurnosov
 
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Mikhail Kurnosov
 
Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)Mikhail Kurnosov
 
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)Mikhail Kurnosov
 
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...Mikhail Kurnosov
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Mikhail Kurnosov
 
Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)Mikhail Kurnosov
 
Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)Mikhail Kurnosov
 
Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовMikhail Kurnosov
 
Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Mikhail Kurnosov
 
Лекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимостиЛекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимостиMikhail Kurnosov
 
Семинар 10. Параллельное программирование на MPI (часть 3)
Семинар 10. Параллельное программирование на MPI (часть 3)Семинар 10. Параллельное программирование на MPI (часть 3)
Семинар 10. Параллельное программирование на MPI (часть 3)Mikhail Kurnosov
 
Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)Mikhail Kurnosov
 
Лекция 9. Поиск кратчайшего пути в графе
Лекция 9. Поиск кратчайшего пути в графеЛекция 9. Поиск кратчайшего пути в графе
Лекция 9. Поиск кратчайшего пути в графеMikhail Kurnosov
 
Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)Mikhail Kurnosov
 

More from Mikhail Kurnosov (20)

Векторизация кода (семинар 2)
Векторизация кода (семинар 2)Векторизация кода (семинар 2)
Векторизация кода (семинар 2)
 
Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Векторизация кода (семинар 3)
Векторизация кода (семинар 3)
 
Векторизация кода (семинар 1)
Векторизация кода (семинар 1)Векторизация кода (семинар 1)
Векторизация кода (семинар 1)
 
Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
 
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
 
Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)
 
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
 
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
 
Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)
 
Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)
 
Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмов
 
Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)
 
Лекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимостиЛекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимости
 
Семинар 10. Параллельное программирование на MPI (часть 3)
Семинар 10. Параллельное программирование на MPI (часть 3)Семинар 10. Параллельное программирование на MPI (часть 3)
Семинар 10. Параллельное программирование на MPI (часть 3)
 
Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)
 
Лекция 9. Поиск кратчайшего пути в графе
Лекция 9. Поиск кратчайшего пути в графеЛекция 9. Поиск кратчайшего пути в графе
Лекция 9. Поиск кратчайшего пути в графе
 
Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)
 

Лекция 9: Декартовы деревья (Treaps, дучи, дерамиды)

  • 1. Лекция 9: Декартовы деревья (Treaps) Курносов Михаил Георгиевич к.т.н. доцент Кафедры вычислительных систем Сибирский государственный университет телекоммуникаций и информатики http://www.mkurnosov.net
  • 2. Двоичные деревья поиска (Binary Search Trees) 1. Операции над BST имеют трудоемкость пропорциональную высоте дерева: O(h) 2. В среднем случае высота h бинарного дерева поиска O(logn) 1 Value1 NULL 3. В худшем случае элементы добавляются по возрастанию (убыванию) ключей – дерево вырождается в список длины n bstree_add(1, bstree_add(2, bstree_add(3, bstree_add(4, value1) value2) value3) value4) В худшем случае бинарное дерево поиска имеет высоту O(n) 2 Value2 NULL 3 Value3 NULL 4 Value4 2
  • 3. Декартово дерево (Treap)  Декартово дерево (Treap) – это структура данных для реализации словаря, объединяющая в себе бинарное дерево поиска и бинарную кучу  Происхождение названия: treap = tree + heap  Русскоязычный аналог: дуча = дерево + куча, дерамида = дерево + пирамида  Авторы: Сидель Раймунд (Seidel Raimund) и Цецилия Арагон (Aragon Cecilia), 1989  Aragon Cecilia R., Seidel Raimund. Randomized Search Trees // Proc. 30th Symp. Foundations of Computer Science (IEEE Computer Society Press), 1989, pp. 540-545  Seidel Raimund, Aragon Cecilia R. Randomized Search Trees // Algorithmica. – 1996. – 16 (4/5). – pp. 464–497 3
  • 4. Декартово дерево (Treap)  Каждый узел декартова дерева (treap) содержит:  пару (x, y) x – ключ бинарного дерева поиска, y – приоритет бинарной кучи  указатель left на левое поддерево  указатель right на правое поддерево  Предполагается, что все x и y различны 1) Свойства дерева поиска: xL < x0 < xR 2) Свойства бинарной кучи: y0 < yL y0 < yR (x0, y0) (xL, yL) (xR, yR) 4
  • 5. Пример декартова дерева K 3 Z 4 C 5 B 10 D 14 Пример декартова дерева: ключи дерева поиска – буквы алфавита, приоритет кучи (min-heap) – числа 5
  • 6. Операции декартова дерева Операция Средний случай (average case) Худший случай (worst case) Lookup(x) 𝑂(log 𝑛) amortized𝑂(log 𝑛) Insert(x,value) 𝑂(log 𝑛) amortized𝑂(log 𝑛) Delete(x) 𝑂(log 𝑛) amortized𝑂(log 𝑛) Split(x) 𝑂(log 𝑛) 𝑂(𝑛) Merge(T1, T2) 𝑂(log 𝑛) 𝑂(𝑛)  Сложность по памяти𝑂(𝑛) 6
  • 7. Поиск элемента в декартовом дереве function TreapLookup(treap, x) while treap != NULL do if x == treap.x then return treap; else if x < treap.x then treap = treap.left else treap = treap.right end if end while return NULL; end function TLookup = O(log(logu)) TLookup = O(h) = O(n)  При поиске элемента приоритет y игнорируется, учитываются только ключи x – как в обычном бинарном дереве поиска  В худшем случае спуск по дереву осуществляется до листа – выполняется порядка O(h) сравнений 7
  • 8. Разбиение декартова дерева (Split)  Операция Split(T, x) разбивает декартово дерево на два дерева T1 и T2  В дереве T1 находятся узлы с ключами node.x ≤ x  В дереве T2 находятся узлы с ключами node.x > x K 3 Split(T, E) Z 4 C 5 T1 B 10 T2 D 14 8
  • 9. Разбиение декартова дерева (Split)  Случай 1: ключ разбиения x > ключа корня (root.x)  Левое поддерево T1 совпадает с левым поддеревом корня T  Для нахождения правого поддерева T1 необходимо разбить правое поддерево T по ключу x на T1R и T2R и взять T1R  Дерево T2 совпадает с деревом T2R T T1 (root.x) Split(T, x) T2 x > root.x T1R L R L T2R 9
  • 10. Разбиение декартова дерева (Split)  Случай 2 (симметричный): ключ разбиения x < ключа корня  Правое поддерево T2 совпадает с правым поддеревом корня T  Для нахождения левого поддерева T2 необходимо разбить левое поддерево T по ключу x на T1L и T2L и взять T2L  Дерево T1 совпадает с деревом T1L T T2 (root.x) Split(T, x) x < root.x T1 T2L L R T1L R 10
  • 11. Разбиение декартова дерева (Split) function TreapSplit(treap, x, &treap1, &treap2) TLookup = O(log(logu)) if treap = NULL then treap1 = treap2 = NULL else if x > treap.x then TreapSplit(treap.right, x, treap.right, treap2) treap1 = treap else TreapSplit(treap.left, x, treap1, treap.left) treap2 = treap end if TSplit = O(h) = O(n) end function  В худшем случае требуется спуск по дереву до листа – выполняется порядка O(h) разбиений 11
  • 12. Слияние декартовых деревьев (Merge)  Операция Merge(T1, T2) сливает два декартовых дерева T1 и T2 в новое дерево T (причем все ключи x дерева T2 должны быть больше ключей x дерева T1)  Случай 1: Приоритет y корня T1 > приоритета y корня T2  Корень дерева T1 становится корнем T  Левое поддерево T1 становится левым поддеревом T  Правое поддерево T – это объединение правого поддерева T1 и дерева T2 T1 T2 T (T1.root.y) (T2.root.y) (T1.root.y) Merge(T1, T2, T) L R L R T1.root.y > T2.root.y T1L T1R T2
  • 13. Слияние декартовых деревьев (Merge)  Операция Merge(T1, T2) сливает два декартовых дерева T1 и T2 в новое дерево T (причем все ключи x дерева T2 должны быть больше ключей x дерева T1)  Случай 2 (симметричный): Приоритет y корня T1 < приоритета y корня T2  Корень дерева T2 становится корнем T  Правое поддерево T2 становится правым поддеревом T  Левое поддерево T – это объединение T1 и левого поддерева T2 T1 T2 T (T1.root.y) (T2.root.y) (T2.root.y) Merge(T1, T2, T) L R L R T1.root.y < T2.root.y T1 T2L T2R
  • 14. Слияние декартовых деревьев (Merge) function TreapMerge(treap1, treap2, &treap) TLookup = O(log(logu)) if treap1 = NULL OR treap2 = NULL then treap = treap1 if treap1 = NULL then treap = treap2 else if treap1.y > treap2.y then TreapMerge(treap1.right, treap2, treap1.right) treap = treap1 else TreapMerge(treap2.left, treap1, treap2.left) treap = treap2 end if TMerge = O(h) = O(n) end function  В худшем случае требуется спуск по дерево до листа – выполняется порядка O(h) разбиений 14
  • 15. Добавление элемента в декартово дерево  Операция Insert(T, x, y, value) добавляет в декартово дерево узел node с ключом x, приоритетом y и значением value  Узел node – это декартово дерево из одного элемента  Можно слить дерево T и дерево node, но по требованию операции Merge, все ключи дерева node должны быть больше ключей T  В дереве T некоторые ключи могут быть как больше x, так и меньше x T node ∀𝑥 𝑇 ∈ 𝑇: L R ? 𝒙 𝑻 < 𝒏𝒐𝒅𝒆. 𝒙 x, y, value 15
  • 16. Добавление элемента в декартово дерево  Версия 1. Преобразуем деревья для удовлетворения требований операции Merge  Разобьём дерево T по ключу node.x на два поддерева T1 и T2, таким образом в дереве T1 будут узлы с x ≤ node.x, а в дереве T2 с ключами x > node.x  Сливаем дерево T1 и дерево node в дерево T1  Сливаем новое дерево T1 и дерево T2 в дерево T1 function TreapInsert(treap, node) TreapSplit(treap, node.x, t1, t2) TreapMerge(t1, node, t1) TreapMerge(t1, t2, t1) return t1 end function // O(h) // O(h) // O(h) TInsert = O(h) = O(n) 16
  • 17. Добавление элемента в декартово дерево  Версия 2 – без использования операции слияния (Merge)  Спускаемся по дереву поиска (по ключу node.x), останавливаемся на узле z, в котором приоритет z.y меньше приоритета node.y  Разбиваем дерево z по ключу node.x: в поддереве T1 узлы z с ключами ≤ node.x, в T2 – с ключами > node.x  Делаем T1 и T2 левым и правым поддеревьями узла node  Дерево node ставим на место узла z T z y T Split(z, node.x) z T1 x T2 17
  • 18. Удаление элемента из декартова дерева  Версия 1 – с использованием операции Split  Находим в дереве T узел node с ключом x  Разбиваем дерево T по ключу x на деревья T1 и T2: Split(T, x)  Отделяем от дерева T1 узел с ключом x, для этого разбиваем T1 по ключу x – ε на поддеревья T1 и T3 (содержит ключ x): Split(T1, x – ε)  Сливаем деревья T1 и T2: Merge(T1, T2) function TreapDelete(treap, x) node = TreapLookup(treap, x) TreapSplit(treap, x, t1, t2) TreapSplit(t1, x - eps, t1, t3) TreapMerge(t1, t2, t1) return t1 end function // // // // O(h) O(h) O(h) O(h) TDeletet = O(h) = O(n) 18
  • 19. Удаление элемента из декартова дерева  Версия 2 – без использования операции Split  Находим в дереве T узел node с ключом x  Сливаем левое и правое поддеревья дерева node: Merge(node.left, node.right)  Результат слияния поддеревьев ставим на место узла node 19
  • 20. Высота декартова дерева  В худшем случае высота декартова дерева O(n)  Например, при вставке ключей: (1, 1), (2, 2), …, (n, n) 1, 1 Value1 2, 2 NULL Value2  Как избежать такой ситуации? 3, 3 NULL  Мы можем задавать приоритеты для регулирования высоты дерева Value3 NULL 4, 4 Value4 20
  • 21. Псевдослучайные приоритеты Утверждение. В декартовом дереве из n узлов, приоритет y которых является случайной величиной c равномерным распределением, средняя глубина вершины равна O(logn) Доказательство  Разобрать самостоятельно: http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B5%D0%BA%D0%B0%D1 %80%D1%82%D0%BE%D0%B2%D0%BE_%D0%B4%D0%B5%D1%80%D0%B5%D0% B2%D0%BE □  Таким образом в декартовом дереве с псевдослучайными приоритетами время выполнение операций Split, Merge, Insert, Delete равно O(logn) 21
  • 22. Задания  Разобрать доказательство утверждения о высоте декартова дерева со случайными приоритетами  Изучить способы построения декартова дерева при условии, что все добавляемые элементы известны заранее (offline): (x1, y1), …., (xn, yn)  Алгоритм со сложностью O(n2)  Алгоритм с линейной сложностью O(n) 1. http://ru.wikipedia.org/wiki/%D0%94%D0%B5%D0%BA%D0%B0%D1%80%D1%82%D0%B E%D0%B2%D0%BE_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE 22