Строки. Конец.
- Суф. массив
- Построение за O(NlogN)
- LCP[i,j] за O(N2)
- LCP[i,i+1] за O(N) (алгоритм Касаи)
- Ахо-Корасик
- Префикс-функция
- Суффиксные (префиксные) ссылки на боре
- Алгоритм Ахо-Корасика
- Док-во корректности и времени работы при построении полного автомата
- Док-во времени работы при построении только суф. ссылок
Потоки
- Вершинные потоки
- Потоки с несколькими истоками, стоками
- Потоки с избытками и недостатки в вершинах, сток и исток отсутствуют
- Потоки с избытками и недостатки в вершинах, некоторые вершины могут быть стоками и истоками.
- [L,R] потоки.
- Решение за O(MinCostFlow).
- Решение за O(Flow): Ребро [L,R] заменяем на ребро [0,R-L] и избыток и недостаток в концых ребра.
- Быстрые потоки: нужно помнить, что теоретически оптимальные алгоритмы поиска потока работают ~O(VE).
Разрезы
- (s,t) разрез ищется потоком
- Разрез минимальной стоимости: Summ(w[e]), Summ(w[e]*c[e]) ищутся так же. Т.е. можно для любой f(e) >= 0 минимизировать сумму по разрезу f(e).
- Глобальный разрез. Наивное построение за O(N*Flow)
- Глобальный разрез. Нахождение за O(N3) (алгоритм Штор-Вагнера без док-ва).
- Глобальный разрез. Вероятностный алгоритм Каргера-Штейна.
- Формулировка задачи: нет кратных ребер, нужно удалить из графа мин. число ребер так, чтобы он стал несвязным.
- Вероятностное решение за O(N4): будем N-2 раз выбирать случайное ребро и стягивать по нему 2 вершины.
- Улучшение до O(N2logN): будем ветвиться на 2 процесса в тот момент, когда вероятность ошибки = 1/2.
- Вероятностный - алгоритм, выдающий корректный ответ с вероятностью >= 1/2. Реально алгоритм работает за O(N2 * logN * logP).
- Связь задач поиска глобального разреза и кластеризации.
Паросочетания
- Двойственность цепей и антицепей. Теорема Дилворта без док-ва.
- Not read Короткое док-во теоремы Дилворта.
- Задачка про такси, сведение к паросочетанию.
- Теорема о чередующейся дополняющей цепи для произвольного графа.
- Напоминание min-max Теоремы для двудольного графа (maxM = minC)
- Теорема Татта-Берджа для произвольного графа.
- maxM <= down(V/2)
- maxM <= сумма по всем компонентам связности down(Vi/2)
- maxM <= V - (число нечетных компонент связности) = f(G)
- maxM <= |U| + f(G/U) для любого U
- Собственно теорема: maxM = min по U (|U| - f(G/U)). Пример с цветочком.
- Док-во Теоремы Татта Берджа:
- Если есть вершина, при удалении которой размер паросочетания уменьшится, выкенем ее из G, докажем теорему, а потом добавим и в G и в U.
- При удалении любой вершины размер max паросочетания не меняется. Докажем, что, если граф связен, maxM = down(V/2).
- Пусть граф связен и 2maxM + 2 = V. Найдем чередующийся путь между этими двумя вершинами.
- Паросочетание в произвольном графе (Эдмондс)
- Вероятоностные алгоритмы для нахождения паросочетания в произвольном графе.
- Матроиды.
- Построение MST: алгоритм Краскала = отсортировали ребра по весу и в таком порядке пробуем их добавлять в ответ.
- Построение базиса минимального веса: отсортировали вектора по весу и в таком порядке пробуем их добавлять в ответ.
- Паросочетание минимального по сумме весов вершин первой доли весу: отсортировали и...
- Пытаемся доказать и обобщить. Утверждение: множество остовных лесов данного графа образуют Матроид.
- Матроид = множество хороших множеств. Определение Матроида = 3 аксиомы.
- Трансверсальный и векторный матроиды.
- Алгоритмы Радо-Эдмондса: получения max по размеру, а из таких min по сумме весов хорошего множества.