- •Элементарные алгоритмы для работы с графами
- •Работа алгоритма[править | править вики-текст]
- •Неформальное описание[править | править вики-текст]
- •Формальное описание[править | править вики-текст]
- •Алгоритм поиска в глубину[править | править вики-текст]
- •Нерекурсивные варианты[править | править вики-текст]
- •Общая идея
- •[Править]Пошаговое представление
- •[Править]Реализация
- •[Править]Время работы
- •[Править]Цвета вершин
- •Топологическая сортировка и сильно связные компоненты
- •↑ Пример ориентированного неотсортированного графа, к которому применима топологическая сортировка
- •Пример работы алгоритма[править | править вики-текст]
- •Алгоритмы[править | править вики-текст]
- •Минимальные остовные деревья (мst)
- •Введение
- •Постановка задачи
- •Кратчайшие пути
- •Давайте придумаем что-нибудь простое
- •А если я педант?
- •Задача о максимальном потоке
- •[Править]Определение потока
- •[Править]Пример
- •Увеличивающие пути. Теорема Бержа
- •Алгоритм Эдмондса. Сжатие цветков
- •Эффективная реализация
- •Оптимизация: предварительное построение паросочетания
- •Случай двудольного графа
- •Дальнейшая оптимизация
- •[Править]Реализация
- •[Править]Оценка производительности
- •[Править]Пример несходящегося алгоритма
- •[Править]Оценка быстродействия
- •[Править]Литература
- •Максимальные паросочетания[править | править вики-текст]
- •Описание алгоритма Необходимые определения
- •Теорема Бержа
- •Алгоритм Куна
- •Время работы
- •Реализация
- •Улучшенная реализация
- •[Править]Постановка задачи
- •[Править]Решение
- •[Править]Псевдокод
- •Префиксы и суффиксы строки
- •Прямые переходы
- •[Править]Суффиксные ссылки
- •Основные определения и описание структуры[править | править вики-текст]
- •Свойства суффиксных деревьев[править | править вики-текст]
- •Требования суффиксного дерева к памяти[править | править вики-текст]
- •[Править]Недостатки
- •Метод хеширования
- •[Править]Алгоритм
- •[Править]Псевдокод
- •[Править]Время работы
- •[Править]Надёжность
- •Автоматные модели в программировании
- •[Править]Переходы между состояниями [править]Прямые переходы
- •[Править]Суффиксные ссылки
- •[Править]Псевдокод
- •[Править]Пример использования
- •[Править]Псевдокод
- •[Править]Пример
- •[Править]Время работы
- •[Править]Эффективный алгоритм
- •[Править]Псевдокод
- •[Править]Время работы
- •[Править]Построение префикс-функции по z-функции [править]Постановка задачи
- •[Править]Описание алгоритма
- •Приближенные алгоритмы решения np-трудных задач
[Править]Оценка быстродействия
Лемма: |
Если
в сети |
Доказательство: |
|
Предположим
противное, пусть существует вершина
,
что после какого-то увеличения потока
длина кратчайшего пути из
в
уменьшилась.
Обозначим потоки до и после увеличения
соответственно за
и По
выбору
и
из предыдущего утверждения получаем,
что Предположим Пусть |
|
Опираясь на предшествующую лемму, докажем следующую теорему, которая ограничивает сверху число итераций цикла while в алгоритме Эдмондса-Карпа.
Теорема: |
Пусть
для некоторой сети
с
источником
и
стоком
выполняется
алгоритм Эдмондса-Карпа, тогда общее
число итераций цикла while составляет |
Доказательство: |
|
Рассмотрим
множество ребер
остаточной
сети
,
принадлежащих увеличивающему пути
,
таких что Рассмотрим
две вершины
и
принадлежащие
,
соединенные некоторым ребром из
.
Увеличение производится вдоль
кратчайших путей, поэтому если
ребро
становиться
критическим в первый раз, верно, что Итак
в промежуток времени между тем, когда
ребро
становится
критическим в первый раз, до момента,
когда оно становится критическим в
следующий раз, расстояние
от
до
увеличивается
минимум на Так как каждый увеличивающий путь содержит по крайней мере одно критическое ребро, следовательно число кратчайших путей составляет . На каждой итерации цикла while рассматривается ровно один увеличивающий путь, а поскольку в случае отсутствия такого пути выполнение цикла прерывается, то число итераций цикла whileтакже составляет . |
|
Если
увеличивающий путь находить поиском в
ширину, то каждую итерацию цикла while можно
выполнить за время
.
Инициализация в процедуре Edmonds_Karpпроизводится
за
,
следовательно время работы алгоритма
алгоритма Эдмондса-Карпа составляет
.
Заметим также, что сущетсвует
сеть "грибок" на
которой нижняя граница времени работы
алгоритмы Эдмондса-Карпа также
составляет
.
