Кратчайшие пути в графах (12 февраля 2021)
- Дерево игры (остаток с прошлой лекции)
- Игра на 0-1 дереве. O(1.7n)
- AND-OR дерево
- minimax. Бинпоиск+
- minimax. αβ-отсечение
- [2 минут] Классификация и определение задач: SSSP, APSP, орграф
- [20 минут] Невзвешенный граф
- [5 минут] bfs алгоритм без очереди (Ad − вершины до которых расстояние ровно d)
- [5 минут] bfs с очередью q = A0 + A1 + A2 + ...
- [5 минут] восстановление пути, сравнение с dfs, ацикличный граф кратчайших путей (вдруг нам нужно несколько кратчайших путей?)
- APSP: матрица расстояний за O(VE)
- [skipped] [в практику] матрица расстояний за O(V3/w)
- [15 минут] 1-k и 0-k BFS (модификации bfs для взвешенного графа)
- 1 ребро → k рёбер: Что делать если веса 1..k? Раскатерим! O(k(V+E))
- 1-k-bfs: VK+1 очередь, k+1 очередь (время работы: внешний цикл за VK, рёбра за E)
- 0-k-bfs: то же, но можем "класть в себя"
- 0-1-bfs: берём bfs c 1 очередью, заменяем очередь на дек. Корректность следует из изоморфности 0-k-bfs-у для k=1 (дек = 2 очереди).
- [skipped] [в практику] k-2k-bfs, 1-2-bfs (вещественные), 0-1-bfs (вещественные)
- [10 минут] Дейкстра
- Алгоритм. Корректность: у вынутой вершины оптимально расстояние (от противного).
- Оценка времени V*ExtractMin + E*DecreaseKey (V2, ElogV)
- [skipped] [в практику и дз] Дейкстра за E + VlogV, ElogE/V+1V, EloglogC
- Дейкстра и отрицательные веса: в принципе работает если много раз вынимать одну и ту же вершину из кучи. На практике покажем, что экспоненту.
- Задача про города на плоскости. Двусторонняя Дейкстра (картинка с двумя кругами). Описание алгоритма A* (оценка пути снизу).
− Перерыв −
- [15 минут] Алгоритм A*
- Алгоритм: d[v] → d[v]+f[v] (природа f − оценка длины пути снизу)
- Корректность и время работы
- Lm о неравенстве треугольника: вытащим каждую вершину ≤ 1 раза
- (нер-во треугольника) + (f[v] ≥ 0) + (f[t] = 0) ⇒ переберём подмножество вершин Дейкстры.
- Иллюстрация "существует почти прямой путь".
- [10 минут] Что вообще бывает для SSSP?
- SSSP: Невзвешенный граф: bfs, O(E), 1950.
- SSSP: Граф без отрицательных рёбер: Дейкстра за O(n2), O(mlogn), O(m + nlogn), O(m + nlogC), O(m + nsqrt(logC))
- SSSP: На самом деле еще умеют для неорграфов искать путь за O(n + m), и для орграфов за O(m + nloglogmin(n,C))
- SSSP: Граф с отрицательными весами рёбер: 58' Ford,Bellman − O(EV), 93' Goldberg − O(EV1/2logN)
- [skipped] [ушло в практику] SSSP. Отрицательные рёбра, отрицательные циклы, алгоритма для минимального простого пути не существует
- [15 минут] Алгоритм Флойда
- Пишем 3 цикла
- Доказываем корректность подсчёта расстояния (следует из динамики)
- Восстанавливаем путь двумя способами next[a,b] и middle[a,b] (доказательство того, что если нет отрицательных циклов: не циклится, путь простой)
- Lm: отрицательный цикл через i ⇔ d[i][i] < 0
- Восстанавливаем отрицательный цикл (без док-ва, но объяснить интуицию, почему работает)
- [skipped] [ушло в практику] Транзитивное замыкание за O(V3/w)
- Дополнительные главы
- Извлечение корня по модулю за logn
- Перебор с отсечением по ответу (по типу A*)
- beam-search и применения