СНМ и Остовные деревья (12 марта 2018)
- [30 минут] DSU (СНМ)
- Постановка задачи (join, get)
- Пример использования (для каждой пары вершин [a,b] найти путь: max вес на пути минимален)
- Решение списками: join суммарно за O(nlogn), get за O(1)
- Решение деревьями
- join за O(1), get за длину пути
- Эвристика "меньшее к большему". Варианты с ранками и размерами. Доказательство O(logn) для get.
- Эвристика сжатия путей. Доказательство O(logn) для этой эвристики (смотрим на количество тяжёлых рёбер).
- [20 минут] DSU: крутые оценки
- [15 минут] O(mlog*n)
- [5 минут] O(m + nlog*n)
− Перерыв −
- [35 минут] MST (минимальные остовы)
- [10 минут] Основы доказательства: лемма о тяжёлом ребре (лемма о разрезе)
- [5 минут] Краскал = sort + DSU. Разрез: компоненты концов ребра.
- [5 минут] Прим = Дейкстра с функцией "max входящий вес" (с доказательством). Разрез: дерево и оставшаяся часть графа.
- [10 минут] Борувка = итеративное сжатие графа. Добавляем рёбра по одному в правильном порядке.
− Перерыв −
- [15 минут] Алгоритм Йена'71 поиска k-го объектра
- k-й путь за O(Vk*Dijkstra)
- k-й остов за O(Ek*MST)
- [30 минут] DSU: обратная функция Аккермана
- Доказываем log*(log*n) + 2, log*(log*(log*n)) + 3...
- Получаем "сколько раз нужно взять log*x, чтобы число итераций было больше результата"
- Вводим функцию Аккермана и обратные ей. Показываем основные свойства.
- Доказываем функцию Аккермана.