Потоки. Начало. (5 апреля 2016)
- Введение
- Определение потока: 3 аксиомы
(поток не задерживается, обратно столько же течёт, fe ≤ ce)
- Определения: разрез и рёбра разреза, величина потока, величина разреза, циркуляция.
- Определения: дополняющий путь, остаточная сеть (Gf)
- Физический смысл: k непересекающихся путей − поток величины k.
- Обратные рёбра в картинках. Нам дан ориентированный граф с пропускными способностями.
Рисуем граф, рисуем обратные рёбра. Рисуем поток размера 1, смотрим. Рисуем поток размера 2, смотрим.
- Основные теоремы и алгоритмы
- Lm #1: |f| = F(S,T) ≤ C(S,T)
- Lm #2: max|f| ≤ min C
- Теорема Форда-Фалкерсона: max|flow| = min|cut| AND поток максимален ⇔ нет дополняющего пути. Док-во: пусть нет пути, предъявили разрез равный потоку.
- Алгоритм Форда-Фалкерсона − фигачим +min(c-f) по доп.пути, пока можем. Для целочисленных пропускных способностей работает.
- Время ФФ: O(|f|E). Есть тесты: пропускные способности большие, работает экспоненту от V. На практике, если толкать max по пути, можно считать, что полином.
- Код ФФ. Пишем dfs, толкающий +1 на обратном ходе рекурсии.
- Оптимизируем ФФ: (1) максимум по пути, (2) random_shuffle рёбер. Обе только на словах, без кода.
- Следствие: в графе с целочисленнными пропускными способностями существует целочисленный максимальный поток
- Алгоритм-следствие: по максимальному поток поиск минимального разреза за O(E)
- Существование максимального потока. Для вещественных весов ещё не доказали, следует из леммы Цорна или алгоритм Эдмондса Карпа.
- Алгоритм Эдмондса-Карпа без-док-ва: ФФ + bfs + толкать max по пути. O(E2V) для любых пропускных способностей.
- Th. Любой макс поток можно получить из другого макс потока добавлением циркуляции в остаточной сети (f2 - f1 − поток в Gf1)
- Применение потоков
- Декомпозиция потока на пути и циркуляцию: алгоритмы декомпозиции за O(|f|×E), O(E2), O(VE).
- Задача про поиск k рёберно не пересекающихся путей в орграфе за O(kE)
- Задача про поиск k вершинно не пересекающихся путей в орграфе за O(kE) (вершинный поток, раздвоение вершин)
- Поток в неориентированном графе. Два способа представления неориентированных рёбер. Задачи про k вершинно и рёбрно непересекающихся путях в неорграфе.
- Несколько истоков и стоков (объединим их в один исток/сток).
- Поиск максимального паросочетания через поток за O(VE) (т.к. |f| ≤ V/2).
- Связь разреза и контролирующего множества для двудольного графа.