
- •Элементы комбинаторного анализа
- •1.1. Начальные понятия теории множеств
- •Свойства операций над множествами
- •Булева алгебра
- •2.1. Логика высказываний
- •2.2. Понятие булевой функции
- •Примеры булевых функций
- •2.3. Реализация булевых функций формулами
- •2.4. Двойственные функции
- •2.5. Разложение булевых функций по переменным
- •2.6. Полнота системы булевых функций
- •2.7. Полином Жегалкина
- •2.8. Классы функций, сохраняющих 0 и 1
- •2.9. Класс самодвойственных функций
- •2.10. Класс монотонных функций
- •2.11. Класс линейных функций
- •2.12. Критерий полноты (теорема Поста)
- •3.1. Начальные понятия теории графов
- •3.2. Маршруты, цепи и циклы в графе
- •3.3. Связность, компоненты связности графа
- •3.4. Цикломатическое число графа
- •3.5. Матрицы, ассоциированные с графом
- •3.6. Деревья и леса
- •3.7. Кодирование деревьев
- •3.8. Эйлеровы графы
- •3.9. Раскраска графа
- •3.10. Планарные графы
- •3.11. Ориентированные графы
- •3.12. Задача о кратчайшем пути
- •3.13. Задача о максимальном потоке
3.13. Задача о максимальном потоке
В этом параграфе будут рассматриваться
сети
,
имеющие единственную вершину
с нулевой полустепенью захода и
единственную вершину
с нулевой полустепенью исхода. Вершину
будем называть источником, а вершину
- стоком сети
.
Вес
дуги
будем
называть пропускной способностью
этой дуги.
Для удобства изложения введем следующие
обозначения. Через
обозначим множество дуг, для которых
вершина
является началом, а через
обозначим множество дуг, для которых
вершина
является концом.
Определение. Потоком
в сети
называется функция
,
удовлетворяющая условиям:
1.
;
2.
для всех вершин
,
,
,
где
и
Значение
можно интерпретировать как поток,
втекающий в вершину
,
а значение
- как поток, вытекающий из вершины
.
Тогда второе условие можно переформулировать
так: поток, втекающий в любую вершину,
за исключением источника и стока, должен
быть равен вытекающему из этой вершины
потоку.
У
словие
1) называется условием ограничения по
пропускной способности, а условие 2) –
условием сохранения потока в вершинах.
Пример 1.
На рисунке дан пример сети и потока
в ней. Пропускная способность дуги
указана около соответствующей дуги,
там же через запятую указано значение
.
Определение. Положим
.
Число
называется величиной
потока.
Определение. Поток
называется максимальным,
если для любого потока
справедливо неравенство
.
Задача о максимальном потоке состоит в следующем: в заданной сети найти поток максимальной величины.
Задача о максимальном потоке имеет одну особенность, отличающую ее от рассмотренных нами ранее задач дискретной оптимизации. В предшествующих задачах искомый объект существовал очевидным образом и в принципе мог быть найден полным перебором. Например, можно было перебрать все остовы и выбрать среди них минимальный или перебрать все пути между заданными вершинами и выбрать среди них кратчайший. В задаче о максимальном потоке полный перебор принципиально невозможен и существование максимального потока не является очевидным. Тем не менее, справедлива следующая теорема, которую мы приведем без доказательства.
Теорема. В каждой сети существует максимальный поток.
Определение. Цепью
из вершины
в вершину
на сети
называется последовательность
попарно различных вершин и дуг
,
(здесь
),
в которой любые два соседних элемента
инцидентны.
Если при этом дуга
выходит из вершины
и заходит в вершину
,
то она называется прямой дугой цепи.
Если же дуга
выходит из вершины
и заходит в вершину
,
то она называется обратной дугой
цепи.
Пусть - поток в сети и - цепь из в . Для каждой дуги цепи положим
и
.
Определение. Цепь
из
в
называется
-
дополняющей,
если
.
Пример 2.
В сети, изображенной на рисунке 1,
цепь, включающая последовательно вершины
,
является
-
дополняющей для потока, рассмотренного
в примере 1.
Одним из алгоритмов, позволяющих построить максимальный поток, является алгоритм Форда-Фалкерсона.
Алгоритм Форда –Фалкерсона. 0-ой
шаг. Положим
для всех дуг
.
-ый
шаг. Пусть
к началу шага по цепи течет поток
.
Для текущего потока
ищется
-дополняющая
-цепь.
Если такой цепи нет, то максимальный поток найден: это .
В противном случае, если такая
-дополняющая
-цепь
имеется, ей дается имя
и по следующему правилу строится поток
:
Величина этого потока определяется равенством
.
Замечание. Возникает существенный
вопрос: закончится ли работа алгоритма
за конечное число шагов? Оказывается,
гарантии этому нет. Гарантировать
построение максимального потока можно
в случае, если на каждом шаге производить
увеличение потока вдоль кратчайших по
числу дуг
-дополняющих
цепей.
Пример 3. Построим максимальный поток для сети из примера 1.
Ш
аг
0.
;
поток
указан на рис. 1;
.
Шаг 1.
,
,
поток
указан на рис. 2;
.
Ш
аг
2.
,
,
поток
указан на рис. 3;
.
Ш
аг
3.
,
,
поток
указан на рис. 4;
.
Шаг 4.
,
,
поток
указан на рис. 5;
.
Для цепи, изображенной на рисунке 5 ,
-дополняющих
цепей из
в
нет. Следовательно, поток
является максимальным потоком.