Содержание
- 2. Splay-дерево является двоичным деревом поиска. Это дерево принадлежит классу «саморегулирующихся деревьев», которые поддерживают необходимый баланс ветвления
- 3. ФПМИ БГУ Splay-дерево было придумано Робертом Тарьяном и Даниелем Слейтером в 1983 году.
- 4. ФПМИ БГУ Splay-дерево позволяет находить быстрее те данные, которые использовались недавно. Для того, чтобы доступ к
- 5. ФПМИ БГУ Move to Root Cовершает повороты вокруг ребра (v, parent(v)), пока v не окажется корнем
- 6. ФПМИ БГУ Splay Также совершает повороты, но чередует различные виды поворотов, благодаря чему достигается логарифмическая амортизированная
- 7. ФПМИ БГУ При последовательном использовании операций "Move to Root" требуется 6 поворотов, в то время как
- 8. ФПМИ БГУ Операции со Splay-деревом
- 9. ФПМИ БГУ Splay Делится на несколько случаев: Zig (LL поворот, Правый разворот, Малое правое вращение) Zag
- 10. ФПМИ БГУ Zig (LL поворот, Правый разворот) p v c b a v p c b
- 11. ФПМИ БГУ Zag (RR поворот, Левый разворот) v p c b a p v c b
- 12. ФПМИ БГУ Zig-zig (Левый-левый случай, два разворота вправо) p v c b a v p b
- 13. ФПМИ БГУ Zag-zag (Правый-правый случай, два разворота влево) p g c b a g p b
- 14. ФПМИ БГУ Zig-zag (LR поворот, Большое правое вращение) g p a d v c b g
- 15. ФПМИ БГУ Zag-zig (RL-поворот, Большое левое вращение) v g b a p d c g p
- 16. ФПМИ БГУ Данная операция занимает O(h) времени, где h — глубина вершины v.
- 17. ФПМИ БГУ Search Эта операция выполняется как для обычного бинарного дерева поиска, только после нее запускается
- 18. ФПМИ БГУ Split Процедура Split получает на вход ключ и делит дерево на два. В одном
- 19. ФПМИ БГУ Insert Чтобы вставить очередной ключ, достаточно вызвать Split по нему, а затем создать новую
- 20. ФПМИ БГУ Merge У нас есть два дерева, причём подразумевается, что все элементы первого дерева меньше
- 21. ФПМИ БГУ Remove Для того, чтобы удалить вершину, поднимем ее вверх, а потом выполним операцию Merge
- 22. ФПМИ БГУ Remove(продолжение) Для того, чтобы удалить вершину, поднимем ее вверх, а потом выполним операцию Merge
- 23. ФПМИ БГУ Чтобы Splay-дерево поддерживало повторяющиеся ключи, можно поступить двумя способами. Нужно либо каждому ключу сопоставить
- 24. ФПМИ БГУ Заметим, что процедуры удаления, вставки, слияния и разделения деревьев работают за O(1) + время
- 25. ФПМИ БГУ Амортизационный анализ Splay-дерева проводится с помощью метода потенциалов. Потенциалом рассматриваемого дерева назовём сумму рангов
- 26. ФПМИ БГУ Доказательство Рассмотрим идею доказательства. Если , утверждение очевидно. В противном случае рассмотрим, как меняется
- 27. ФПМИ БГУ r v c b a v' r' c b a Zig(может выполняться только в
- 28. ФПМИ БГУ Zig-zig Ранги меняются только у вершин v, p и g Фактическое время выполнения поворота
- 29. ФПМИ БГУ Взглянув на диаграмму, заметим, что Тогда: Что и требовалось доказать.
- 30. ФПМИ БГУ Zig-zag Ранги меняются только у вершин v, p и g Фактическое время выполнения поворота
- 31. ФПМИ БГУ Таким образом мы разобрали все три случая и получили верхнюю оценку на амортизированное время
- 32. ФПМИ БГУ Пусть — число раз, которое был запрошен элемент . Тогда выполнение запросов поиска на
- 33. ФПМИ БГУ Пусть — это число запросов, которое мы уже совершили с момента последнего запроса к
- 34. ФПМИ БГУ Исследование производительности и области применения Splay-деревьев оказалась темой для десятка статей. Часть таких исследований
- 35. ФПМИ БГУ Splay-деревья стали наиболее широко используемой базовой структурой данных, изобретенной за последние 30 лет, потому
- 36. ФПМИ БГУ Главный недостаток заключается в том, что высота дерева всё-таки может быть линейной. Например, если
- 37. ФПМИ БГУ Код реализации Splay-дерева можно найти по ссылке: https://github.com/magziim/DSA/blob/main/splay_tree.py
- 39. Скачать презентацию