Решение задач суф. массивом и суф. деревом
- Наибольшая общая подстрока
- Найти k-ю лексикографически подстроку
- Найти подстроку S за O(|S|) в суф.дереве и O(|S|*log|Text|) в суф.массиве (с учетом предподсчета)
- Найти количество подпалиндромов строки
- Найти минимальный циклический сдвиг строки
Решение задач Ахо-Корасиком
- Для каждого слова словаря определить, сколько раз встречается это слово.
- Слова удаляются, добавляются, нужно поддерживать возможность быстро по тексту узнать, встречаются ли в нем словарные слова.
Потоки. Введение.
- 2 неперсекающихся по ребрам пути - поток. k неперсекающихся по ребрам пути - поток.
- Определение потока (f) в общем случае. 0 <= f <= c. Сумма f для каждой вершины = 0. f[e] = -f[e']
- Решение задачи о k неперсекающихся по ребрам пути. Картинка, почему "просто k раз пустить dfs" не работает.
- Непересекающиеся по вершинам пути. Раздвоение вершин.
- Разрез C(A,B) - разрез между множествами. C(s,t) - разрез между вершинами. |C(s,t)| >= |f(s,t)|.
- Теорема и алгоритм Форда-Фалкерсона. Если нет дополняющего пути, |C(s,t)| = |f(s,t)|. Алгоритм ищет и поток, и разрез за O(|f|*E)
- Нахождение паросочетания в двудольном графе с помощью потока за O(VE).
Потоки. Алгоритмы поиска.
- Пускаем каждый раз максимум по пути
- Алгоритм Эдмондса-Карпа за O(VE2) (пускаем bfs)
- Масштабирование за O(E2logMax) (пускаем не менее 2k)
- 1 + 3 = O(E2)
Разрезы
- (s,t) разрез ищется потоком
- Разрез минимальной стоимости: Summ(w[e]), Summ(w[e]*c[e]) ищутся так же. Т.е. можно для любой f(e) >= 0 минимизировать сумму по разрезу f(e).
- Глобальный разрез. Наивное построение за O(N*Flow)
MinCost Потоки.
- Задача: ищем поток размера k минимального веса. Обратное ребро имеет вес (-w).
- Формулировки прикладных задач: Задача о назначениях. Транспортная задача.
- Алгоитм поиска: База = нет отрицательных циклов, переход = добавляем инимальный путь.
- Док-во корректности: рассмотрим разность mincost потока размера (k+1) и mincost потока размера (k).
Потоки. Обобщение.
- Вершинные потоки
- Потоки с несколькими истоками, стоками
- Потоки с избытками и недостатки в вершинах, сток и исток отсутствуют
- Потоки с избытками и недостатки в вершинах, некоторые вершины могут быть стоками и истоками.
- [L,R] потоки.
- Решение за O(MinCostFlow).
- Решение за O(Flow): Ребро [L,R] заменяем на ребро [0,R-L] и избыток и недостаток в концых ребра.
Задачи на потоки
- [matching] Покрытие грида с дырками доминошками
- [flow] Футбольный турнир от Пети Митричева
- [flow] Восстановление матрицы по суммам в сторках и столбцах
- [mincost-flow] Теория расписаний: K автоматов, выполнить i-заказ = занять один из автоматов в отрезок [Li..Ri]. Каждый автомат в каждый момент времени выполняет одно задание.