
- •С одержание
- •Введение
- •1. Основные понятия и определения теории графов
- •П онятие графа
- •1.2. Графическое представление графов
- •1.3. Виды графов
- •1 .4. Элементы графов
- •1.5. Представление графов с помощью матриц
- •1.5.1. Матрицы инцидентности и списки рёбер
- •1 .5.2. Матрицы смежности
- •2. Потоки в сетях
- •2 .1. Понятие сети
- •2.2. Задача о максимальном потоке
- •2 .3. Алгоритм размещения пометок для задачи о максимальном потоке
- •2.4. Алгоритм Форда-Фалкерсона
- •2.5. Графы со многими источниками и стоками
- •2 .6. Задача о многополюсном максимальном потоке
- •П рактическая часть
- •З аключение
- •С писок использованной литературы
2.5. Графы со многими источниками и стоками
Алгоритм Форда-Фалкерсона
примененный и для определения величины
максимального потока между множеством
вершин – источников и множеством вершин
– стоков. Разобьем множество вершин на
множество источников V+
= {v
V: Q(v)
> 0}, которые образуют поток, множество
стоков V-
= {v
V:
Q(v)
< 0}, которые
используют поток и множество промежуточных
вершин V0
= {v
V:
Q(v)
= 0}, которые
сохраняют поток
.
Преобразуем поток φ
в поток, который имеет только один
источник и только один сток, увеличив
количество вершин в сети. Для этого
добавим две новые вершины – “фиктивный”
источник vs
и “фиктивный” сток vt.
Соединим вершину vs
со всеми действительными источниками.
Этим дугам припишем поток, который
образован соответствующим источником.
А из каждого действительного стока
направим дугу в “фиктивный” сток vt.
Этим дугам припишем поток, который
используется соответствующим стоком.
При этом пропускные способности
добавленных дуг считаем бесконечными.
В результате получаем сеть с одним
источником и одним стоком. Применяя к
ней алгоритм Форда-Фалкерсона, находим
максимальный поток, который максимальный
и для исходной сети.
П роиллюстирируем на примере преобразования сети с несколькими источниками и несколькими стоками до сети с одним источником и одним стоком.
Рис. 2.5.1 Сеть с двумя стоками
На рис. 2.5.1 изображена сеть с двумя источниками v1 и v3 и тремя стоками v7, v8, v9 Q (v1) = 5, Q (v3) = 3, Q (v7) = 3, Q (v8) = 4, Q (v9) = 1, Q (v2) = Q (v4) = Q (v5) = Q (v6) = 0
Преобразуем эту сеть в сеть с одним источником и одним стоком.
На рис. 2.5.2 изображена сеть уже с одним источником vs и одним стоком vt.
Рис. 2.5.2 Преобразованная сеть
2 .6. Задача о многополюсном максимальном потоке
Рассмотрим задачу нахождения максимального потока для всех пар узлов в неориентированной сети. Эту задачу можно рассматривать как обобщение задачи с одним источником и одним стоком, которую можно решить, применяя алгоритм Форда-Фалкерсона для каждой пары вершин. Однако более эффективным является алгоритм, предложенный Р. Гомори и Т. Ху.
Алгоритм Гомори-Ху
1. Выберем некоторые две вершины графа. Обозначим одну из них через vs, а другую через vt.
2. Применим алгоритм Форда-Фалкерсона и найдём максимальный поток из источника vs в сток vt. При этом множество помеченных вершин и множество непомеченных вершин образуют две стороны минимального разреза Vs и Vt.
3. Выберем две вершины графа vi и vj Vs.
4. Заменим дуги из минимального разреза (Vs, Vt) одной дугой, а вершины бока разреза, в котором не лежат вершины vi , vj, (например, Vt), – одной вершиной. Пропускную способность в таким образом определённой дуге примем равной пропускной способности разреза (Vs, Vt).
5. Положим: vi
= vs,
vj
= vt
и вернемся ко второму шагу. После того,
как будет выбрана n
- 1 пара вершин, мы определим все
величин максимального потока для
исходной сети. Основная идея алгоритма
лежит в итеративном построении
максимального остовного дерева, ветви
которого соответствуют разрезам, а
пропускные возможности ветвей равны
пропускным способностям этих разрезов.
Если бы мы применили алгоритм
Форда-Фалкерсона к каждой паре вершин,
то нам бы пришлось его применить
раз. В алгоритме же Гомори-Ху максимальный
поток между парой вершин определяется
с помощью алгоритма расстановки пометок
только n
- 1 раз. Проиллюстрируем на примере
алгоритм Гомори-Ху.
Рассмотрим сеть, изображённую на рис. 2.6.1
Рис. 2.6.1 Сеть с пропускными возможностями
Ч исла, приписанные дугам, отвечают их пропускным способностям, отвечают их пропускным способностям. Нужно для каждой пары узлов сети определить величину максимального потока между ними. Эта задача решается при n – 1= 6 – 1 = 5 итераций алгоритма Гомори-Ху. Если алгоритм Форда-Фалкерсона расстановки пометок применялся бы к каждой паре узлов, то нужно было бы решить пятнадцать задач о максимальном потоке.
Реализуем алгоритм Гомори-Ху на данной сети.
1. Выберем вершины s = v1 и t = v2. Минимальную пропускную способность относительно источника s = v1 и стока t = v2 имеет разрез со сторонами Vs = {v1, v3, v4, v5, v6} и Vt = {v2}. По теореме 1 величина максимального потока между вершинами v1 и v2 равна пропускной способности разреза (Vs, Vt): w12 = w21 = c(Vs, Vt) = 2 + 3 = 5. Объединим вершины с Vs в одну вершину и соединим её с вершиной v2 веткой с пропускной способностью 5 (рис. 2.6.2).
Рис. 2.6.2 Первый шаг алгоритма
2. Выберем вершины s = v1 и t = v3. Минимальную пропускную способность относительно источника s = v1 и стока t = v3 имеет разрез со сторонами Vs = {v1} и Vt = {v2, v3, v4, v5, v6}. По теореме 1 величина максимального потока между вершинами v1 и v3 равна пропускной способности разреза (Vs, Vt): w13 = w31 = c(Vs, Vt) = 2 + 4 + 2 = 8. Объединим вершины v3, v4, v5, v6 в одну вершину и соединим её с вершиной v1 веткой с пропускной способностью 8 (рис. 2.6.3).
Рис 2.6.3 Второй шаг
3. Выберем вершины s = v4 и t = v3. Минимальную пропускную способность относительно источника s = v4 и стока t = v3 имеет разрез со сторонами Vs = {v4} и Vt = {v1, v2, v3, v5, v6}. По теореме 1 величина максимального потока между вершинами v4 и v3 равна пропускной способности разреза (Vs, Vt): w43 = w34 = c(Vs, Vt) = 2 + 5 + 4 = 11. Объединим вершины v3, v5, v6 в одну вершину и соединим её с вершиной v4 веткой с пропускной способностью 11 (рис. 2.6.4).
Рис. 2.6.4 Третий шаг
4. Выберем вершины s = v5 и t = v3. Минимальную пропускную способность относительно источника s = v5 и стока t = v3 имеет разрез со сторонами Vs = {v5} и Vt = {v1, v2, v3, v4, v6}. Величина максимального потока между вершинами v5 и v3 равна пропускной способности разреза (Vs, Vt): w53 = w35 = c(Vs, Vt) = 5 + 4 = 9. Объединим вершины v3, v6 в одну вершину и соединим её с вершиной v5 веткой с пропускной способностью 9 (рис. 2.6.5).
Рис. 2.6.5. Четвёртый шаг
5. Выберем вершины s = v6 и t = v3. Минимальную пропускную способность относительно источника s = v6 и стока t = v3 имеет разрез со сторонами Vs = {v6} и Vt = {v1, v2, v3, v4, v5}.
Рис. 2.6.6 Остаточное дерево разрезов
Величина максимального потока между вершинами v6 и v3 равна пропускной способности разреза (Vs, Vt): w63 = w36 = c(Vs, Vt) = 5 + 6 + 4 = 15. Объединим вершину v3 с вершиной v6 веткой с пропускной способностью 15 (рис. 2.6.6).
П о дереву перерезов, изображённого на рис. 2.6.6, легко найти остальные величины максимальных потоков. Например, v16 = v61 = 8, поскольку в цепи дерева разрезов, которая соединяет вершины v1 и v2, минимальная пропускная способность веток равна 8. Запишем величины максимальных потоков в виде матрицы:
.
Здесь на пересечение i-строки и j-столбца стоит величина максимального потока между вершинами vi и vj.