Upgrade to Pro — share decks privately, control downloads, hide ads and more …

№ 6. Деревья, бинарные деревья поиска, splay-деревья

ОПК
March 29, 2021

№ 6. Деревья, бинарные деревья поиска, splay-деревья

1. Структура данных дерево.
2. Представление деревьев в Python.
3. Двоичные деревья.
4. Обходы двоичных деревьев, связь обходов с древовидным представлением арифметических выражений.
5. Преобразование произвольного дерева в двоичное.
6. Интерфейс и применение деревьев поиска.
7. Высота дерева поиска.
8. Удаление элемента.
9. Оптимальные деревья поиска.
10. Выворачивание (splay trees).

ОПК

March 29, 2021
Tweet

More Decks by ОПК

Other Decks in Programming

Transcript

  1. ЗНАКОМЫЕ СТРУКТУРЫ ДАННЫХ Операции в массивах и связных списках :

    • Вставка: O(N) и O(1) . • Удаление: O(N) и O(1) . • Доступ по индексу: O(1) и O(N) . • Поиск по значению: O(N) и O(N).
  2. СТРУКТУРА ДАННЫХ: ДЕРЕВО • Состоит из элементов (узлов) . •

    Имеет корень (узел без родителя) . • Все остальные узлы, кроме корня (узлы с одним родителем), распределены по непересекающимся подмножествам — поддеревьям.
  3. ДРЕВОВЕДЕНИЕ • Корень (root) (2) . • Листья (leaf) (3,

    6, 5, 7) . • Родитель (parent) (2 для 4, 5, 7; 4 для 3; 5 для 6, 5) и потомки (children) . • Сестринские узлы (siblings) (4, 5 и 7; 6 и 5). 2 4 3 5 7 6 5
  4. ИНТЕРФЕЙС ДЕРЕВА • Вставка узла . • Удаление узла .

    • Обход дерева (посещение всех узлов) . • Переходы (от потомка к родителю, от сестринского узла к другому сестринскому и т.д.)
  5. ДВОИЧНОЕ (БИНАРНОЕ) ДЕРЕВО • У каждого узла максимум два потомка:

    левый и правый . • Может быть так, что правый потомок присутствует, а левый — нет . • Допустимо пустое двоичное дерево.
  6. РЕАЛИЗАЦИЯ 
 ДВОИЧНЫХ ДЕРЕВЬЕВ Популярность двоичных деревьев 
 связана с

    удобством представления 
 и работы с ними class TreeNode: # parent: Optional[TreeNode] # left: Optional[TreeNode] # right: Optional[TreeNode] # data: Any
  7. ОБХОДЫ ДВОИЧНОГО ДЕРЕВА • Сверху вниз: P, L, R .

    • Слева направо: L, P, R . • Снизу вверх: L, R, P. P L R
  8. ОБХОДЫ ДЕРЕВА ВЫРАЖЕНИЯ Сверху вниз (PLR) + × 4 3

    − × 2 7 5 Слева направо (LPR) 4 × 3 + 2 × 7 − 5 Снизу вверх (LRP) 4 3 × 2 7 × 5 − + + × − 4 3 × 2 7 5 (префиксный) (инфиксный) (постфиксный)
  9. ДЕРЕВО ПОИСКА • BST (Binary Search Tree) . • Каждому

    узлу n сопоставлен ключ k(n) . • k(x) < k(n) для x из левого поддерева n . • k(y) > k(n) для y из правого поддерева n . • Тривиальный алгоритм поиска. 44 13 8 1 9 14 16 97 81 Рис. 10. Пример дерева поиска На рис. 10 приведен пример дерева поиска. Ра
  10. ИНТЕРФЕЙС ДЕРЕВА ПОИСКА • Поиск элемента по ключ у •

    Вставка элемента по ключ у • Удаление элемента по ключ у • Перечисление всех ключей 14 9 8 1 13 44 16 81 97 Рис. 11. Дерево поиска, эквивалентное дереву на рис 97 Поиск и вставка за O(h(N))!
  11. ВЫСОТА ДЕРЕВА ПОИСКА • Бинарное дерево высоты h содержит максимум

    2h–1 узлов . • Значит высота h(N) ≥ log(N) . • При добавлении случайных элементов h(N) ~ 2,99 log(N). 
 Средняя глубина узла ~ 1,39 log(N) . • Но в худшем случае…
  12. НЕ ВСЕ ДЕРЕВЬЯ ОДИНАКОВО ПОЛЕЗНЫ 14 9 8 1 13

    44 16 81 97 Рис. 11. Дерево поиска, эквивалентное дереву на 44 13 8 1 9 14 16 97 81 Рис. 10. Пример дерева поиска 0 приведен пример дерева поиска. Рассмотрим, как оиск. Допустим, требуется определить, присутству- в дереве. Поиск начинается с корня; 9 < 44, следо- 1 97 Рис. 11. Дерево поиска, эквивалентное дереву на рис. 10 97 81 44 16 14 13 9 8 1
  13. ПРИМЕНЕНИЯ ДЕРЕВА ПОИСКА • АТД Множество (set ) • АТД

    Мультимножество (multiset ) • АТД Ассоциативный массив 
 (отображение, map, словарь, dictionary)
  14. УДАЛЕНИЕ ЭЛЕМЕНТА • Если лист (нет потомков), то просто удаляе

    м • Если потомок один, он заменит удаляемый узе л • Если два потомка, то нужно найти либо самый правый узел левого поддерева, либо самый левый узел правого поддерева и поставить на место удаляемого узла
  15. УДАЛЕНИЕ ЭЛЕМЕНТА • Представленный алгоритм удаления приводит к тому, что

    высота дерева растет и становится ~ N½ . • Даже если случайным образом выбирать, с какой стороны брать новый элемент . • Есть ли способы гарантированно выполнять поиск и вставку за O(log(N))?
  16. РЕШЕНИЯ ПРОБЛЕМЫ «КРИВЫХ» ДЕРЕВЬЕВ • Восстановление оптимальности : • «Выворачивание»

    (splay trees), • АВЛ-деревья , • Красно-черные деревья. 1 97 Рис. 11. Дерево поиска, эквивалентное дереву на ри 97 81 44 16 14 13 9 8 1
  17. SPLAY TREES • Обычное дерево поиска, но после каждого поиска

    найденный элемент помещается в вершину . • При удалении предок удаленного элемента помещается в вершину . • Помещение в вершину происходит пошагово («всплытие») . • «Средняя» сложность операций – O(log(N)).
  18. ПОВОРОТ «ЗИГ» x c a b p p a b

    c x Зиг Последний шаг, если элемент X изначально 
 на четном уровне.
  19. ПРИМЕР «ВСПЛЫТИЯ» 2 1 4 3 5 0 7 6

    Зиг-Заг 2 1 4 3 6 0 7 5 6 7 4 5 2 3 1 0 Зиг-Зиг