Кратчайшие пути в графах (26 февраля 2018)
- [20 минут] Невзвешенный граф
- [15 минут] bfs (алгоритм без очереди, алгоритм с очередью, восстановление пути и сравнение с dfs, граф кратчайших путей, куда идут рёбра, код!)
- [5 минут] матрица расстояний за O(VE)
- [в практику] матрица расстояний за O(V3/w)
- [15 минут] Модификации bfs для взвешенного графа
- Форд-Беллман с очередью как аналог bfs (позже докажем, что он за O(VE) работает)
- 1-k-bfs: (1 ребро → k рёбер) и (k+1 очередь)
- 0-1-bfs: (очередь → дек)
- [в практику] k-2k-bfs, 1-2-bfs (вещественные), 0-1-bfs (вещественные)
- [10 минут] Дейкстра
- Дейкстра за V*ExtractMin + E*DecreaseKey (V2, ElogV)
- [в практику] Дейкстра за E + VlogV, ElogE/V+1V, EloglogC
- Двусторонняя. Описание алгоритма A*
− Перерыв −
- [15 минут] Алгоритм A*
- Доказательство корректности. Необходимое условие.
- Оценка времени работы, иллюстрация "существует почти прямой путь".
- [10 минут] Классификация задач поиска пути
- Невзвешенный граф: bfs, O(E), 1950.
- Граф без отрицательных рёбер: Дейкстра за O(n2), O(mlogn), O(m + nlogn), O(m + nlogC), O(m + nsqrtlogC)
- На самом деле еще умеют для неорграфов искать путь за O(n + m), и для орграфов за O(m + nloglogmin(n,C))
- [практика] Отрицательные рёбра, отрицательные циклы, алгоритма для минимального простого пути не существует
- Граф с отрицательными весами рёбер: 58' Ford,Bellman − O(EV), 93' Goldberg − O(EV1/2logN)
- [15 минут] Алгоритм Флойда
- Пишем 3 цикла (проверять ли бесконечность)
- Доказываем корректность подсчёта расстояния (динамика)
- Восстанавливаем путь (доказательство того, что если нет отрицательных циклов: не циклится, путь простой)
- Восстанавливаем отрицательный цикл (без док-ва, объяснить, почему)
- Транзитивное замыкание за O(V3/w)
− Перерыв −
- Если осталось время
- Доказательства 1.5n для 3-SAT (вернее 2k/(k+1) для k-SAT)
- Дополнительные главы
- Извлечение корня по модулю за logn
- Перебор с отсечением по ответу (по типу A*)