Кружок обучения мастерству программирования при СПбГУ
Лекции группы A0 - Лекция 01 - про потоки
Краткий план лекции на тему "Потоки"
Алгоритмы поиска потока
[L,R] потоки
MinCost потоки и потоки минимального среднего веса
Паросочетания + задачи
Минимальное по весу контролирующее множество + задачи
Полный план лекции
Note:
Звездочкой отмечены темы, на которые на лекции времени не хватило.
Алгоритмы поиска потока
Эдмондс-Карп O(VE^2) + док-во (насыщение ребер, расстояния не убывают) + пример с макс временем работы
Масштабирование O(E^2logMax) + док-во (мин разрез, декомпозиция потока) + пример
Алгоритм Диница O(V^2E) + док-во + пример
Малхотра-Кумара-Махешвари O(V^3)
Масштабирование + пуск максимума по пути = O(E^2)
Диница + Масштабирование = O(VElogMax)
Поток получается целочисленным
[L,R] потоки
MaxFlow = Flow + MaxFlow
Flow = задача про избытки-недостатки + бесконечное ребро (t,s)
Сведение задачи про избытки и недостатки к MaxFlow
Решение всего MaxFlow сразу бинпоиском от Ural SU Fusion
Решение задачи про округление матрицы, как пример к [L,R] потокам
MinCost потоки и потоки минимального среднего веса
MinCost = (+w,-w) + FordBelman
Если есть отрицательные циклы, можно и нужно их найти (тот же FordBelman)
Решение задачи про [L,R] потоки с помощью MinCost : (L,-inf) + (R-L,0)
Поток минимального среднего веса = BinSearch + MinCost c отрицательными циклами.
* Проблема неориентированных ребер
* Док-во корректности
* Применение потенциалов Джонсона и Дейкстры
Паросочетания + задачи
Поиск паросочетания = последовательный поиск дополняющих чередующихся цепочек
Контролирующее множество (К.М.) и независимое множество (Н.М.) за O(E) по готовому паросочетанию
Поиск паросочетания с помощью потока за O(Flow)
MaxFlow --> MinCut --> К.М = A- and B+ ; Н.М. = A+ and B-
Алгоритм Хопкрофта-Карпа = Диница для паросочетаний за O(E*sqrt(V)), док-во через симм разность
Задачка о замощении доминошками доски с дырками (клетчатая доска = двудольный граф)
Задачка о замощении доски с дырками вертикальными и горизонтальными полосками (К.М. на графе строк и столбцов).
Минимальное по весу контролирующее множество + задачи
MinCut = MinCostCut : Sum{C[i]} ~ Sum{w[i]} ~ Sum{w[i]*c[i]}
MinCostCut --> Min К.М. и Max Н.М.
Решение задачи про инструменты. Замена минуса на плюс.
Решение задачи про матан. Бесконечные ребра не идут в MinCut.