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