Деревья поиска (10 апреля 2018)
- BST
- Определение, хранение, find, add, симметричный обход, next, del.
- Обработка равных ключей (сделать разными, хранить в вершине count/list, ≤ и >)
- Добавляем возможности списка (прошивка, предыдущий и следующий за O(1))
- Добавляем возможности хеш-таблицы (find и del за O(1)). Удаление через ленивость.
- Пишем код next. Итератор в set.
- Пишем 3 версии добавления (обычная, персистентная, указатели).
- [skipped] [практика] Прямой обход
- AVL
- Определение, ограничение на высоту, малые и большие вращения (single/double)
- Перебалансировка после add, доказательство леммы "не более одного вращения на add"
− Перерыв −
- Дерево по неявному ключу
- Поддержка размеров поддеревьев. Новые запросы: getIndex(x), getValue(i), insert(i, x).
- Неявный ключ, массив с операциями insert(i, x), erase(i), get(i), set(i, x) за O(logn).
- Другие деревья
- B-tree, 2-3-tree
- B*-tree, B+-tree, оценка h×log(k) = log(n) для B-tree (find, insert, erase)
- 2-3-4-tree, RB-tree, AA-tree
- Применение B-tree (диск) и RB-tree (set)
- [skipped] [практика] Операции на отрезке в дереве по неявному ключу со split и merge
- [skipped] [практика] Sum, Min, +=, =, reverse
- [skipped] [практика] rotate(a, a+k, a+n) за O(logn)