Сбалансированные деревья (26 апреля 2017)
- BST (перенесено на практику)
- Хранение, прямой обход
- Node*, итератор
- Другие деревья
- B-tree, 2-3-tree
- 2-3-4-tree, RB-tree, AA-tree
- B*-tree, B+-tree, оценка h×log(k) = log(n) для B-tree (find, insert, erase)
- Применение B-tree и RB-tree
− Перерыв −
- Случайные деревья
- Определения: средняя глубина вершины, глубина дерева, случайное дерево (Def1: добавляем случайную перестановку; Def2: корнем является случайный элемент)
- Lm: сумма размеров поддеревьев равна сумме глубин
- Оценка средней глубины случайного дерева 2ln(n) и такая же на глубину вершины (ссылаемся на QuickSort, в котором доказали факт про сумму размеров поддеревьев)
- Все операции в случайном дереве поиска работают за O(logn). Если исходные данные случайны, то дерево на выходе тоже случайно.
- Утверждение без док-ва: оценка максимальной глубины дерева, полученного при добавлении случайной перестановки 4ln(n)
- Декартово Дерево (treap, дерамида, дуча, курево) (1989 Aragon + Seidel)
- Определение, примеры. Наивный алгоритм построения.
- Единственность декартового дерева и оценка средней глубины.
- Операции split и merge (код split пишем, merge − нет)
- Операции insert и erase через split, merge
- [skipped] (на практику) Операция insert через 1 split и delete через 1 merge
− Перерыв −
- Дерево по неявному ключу
- Поддержка размеров поддеревьев, ответ на запрос k-й элемент
- Неявный ключ, массив с операциями insert(i, x), erase(i), get(i), set(i, x) за O(logn)
- Простейший персистентный массив и разница с персистентным деревом по неявному ключу
- RBST
- Ссылочный garbage collector
- Операции на отрезке в дереве по неявному ключу со split и merge
- Sum, Min
- +=, =
- reverse
- rotate(a, a+k, a+n) за O(logn)
- Skip-list
- Splay-tree
- RBST
- Ссылочный garbage collector