Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Поток минимальной стоимости и труднорешаемые задачи. Учебно-методическое пособие
.pdf
1.4. Задача о потоке минимальной стоимости 41
∗
По найденному контуру во вспомогательной сети G
одно-
значно строится нужный цикл в исходной сети G.
Оценки сложности:
3
Клейн (1967): O(Mn
), где M — суммарная стоимость ре-
бер.
8
Гольдберг, Тарьян (1987): O(n
log n), если на каждом шаге
выбирается цикл со средней стоимостью.
Экспериментально установлено, что количество операций
5,5
растет как функция n
. Конечно, экспериментальный факт
нельзя считать математическим доказательством.
1.4.2. Двойственный алгоритм
Итак, в задаче о потоке минимальной стоимости два параметра: величина потока и его стоимость. Прямой алгоритм
действует так: сразу строится поток заданной величины, затем,
не меняя величины потока, минимизируется его стоимость.
Двойственный алгоритм действует наоборот: сразу строится
оптимальный по стоимости поток, а затем он, не меняя оптимальности, доводится до заданной величины.
Определение. Пусть f — какой-либо поток в сети G и ве-
личина его равна h. Назовем поток fh-оптимальным,если
он имеет наименьшую стоимость среди всех потоков величины h. Например, поток, тождественно равный 0, является
0-оптимальным.
Теорема 1.9. Поток f величины p является p-оптимальным
тогда и только тогда, когда в сети G не существует f -корректирующего цикла отрицательной стоимости.
Kлючевой для построения алгоритма является следующая
теорема.
Теорема 1.10. Пусть f — поток величины h и p — f-допол-
няющая цепь минимальной стоимости среди всех f-дополня-
∗
ющих (s,t)-цепей; поток f
∗
f
(e)=f(e)+sgnp(e)h(p).
получен из f по формуле

42 Глава 1. Потоки в сетях
∗
Тогда f
— (h + h(p))-оптимальный.
Оставим здесь эту теорему без доказательства.
∗
Напомним, что для величины потока f
выполняется ра-
венство
∗
= f + h(p),
f
т. е. величина нового потока f возрастает, не теряя оптимальности. Это обстоятельство позволяет сформулировать следующий алгоритм
Algorithm 7: Двойственный алгоритм решения задачи о построении потока минимальной стоимости
1 Построить новую сеть, в которую добавлена одна
вершина s
∗
и одно новое ребро (s∗,s), пропускной
способностью k;
2 Нулевой поток объявить текущим;
3 Для текущего потока f искать f-дополняющую
(s, t)-цепь p минимальной стоимости;
4 if такая цепь p построена then
5 увеличить f по формулам
∀e ∈ Ef
6 перейти на шаг 3
7 else
8 СТОП.
9 end
10 if f = k then
11 поток f является решением
12 else
13 решения не существует
14 end
∗
(e)=f(e)+sgnp(e)h(p);
Как искать f-дополняющую (s, t)-цепь минимальной стоимости?
Метод. Алгоритм Форда — Беллмана в подходяще построенной сети.

1.4. Задача о потоке минимальной стоимости 43
Построим сеть.
Пусть f — текущий поток в сети G. Построим вспомога-
∗
тельную сеть G
=(V∗,E∗,c∗). Положим V∗= V .ВE∗добав-
ляем только те ребра, которые могут входить в исходной сети
в f-дополняющую (s, t)-цепь, а именно: пусть ребро e из E,
тогда
∗
• если f (e) <c(e), то добавляем e в E
как прямое и полага-
ем
∗
(e)=r(e);
c
• если c(e) <f(e), то ребро e добавляем в E
∗
как обратное,
т. е. у ребра e меняем ориентацию, и полагаем
∗
(e)=−r(e);
c
• если выполняются оба условия, т. е. 0 <f(e) <c(e),тодо-
∗
бавляем в E
оба ребра как прямое и обратное, со стои-
мостью как в случаях 1) и 2).
Внимательный читатель должен заметить, что строится
та же самая сеть, что и в прямом алгоритме.
Но ведь алгоритм Форда — Беллмана работает, только если
в сети нет контуров отрицательной длины!
Здесь на выручку приходит сформулированная выше теорема, которую мы дали без доказательства.
Итак, контуров отрицательной длины нет, значит можно
считать «расстояния» от вершины s до всех остальных, правда,
нас интересует только «расстояние» до вершины t.
Пример
Возьмем известную вам транспортную задачу (см. рис. 1.14).
Напомним формулировку. Дано:
• 2 поставщика, предложение задается вектором (3,4);
• 2 потребителя, спрос задается вектором (2,5);
• матрица стоимостей
C
=
i,j
12
310
.

44 Глава 1. Потоки в сетях
Требуется развезти весь товар с учетом спроса и предложения,
минимизировав суммарную стоимость.
Для удобства будем нуме-
ровать построенные потоки.
Применим двойственный
алгоритм.
Итак, f
на всех реб-
0
рах равен нулю. Он, конечно,
0-оптимальный. Построим ос-
Рис. 1.14. Сеть для
транспортной
задачи
таточную сеть.
Прямо по построению эта
сеть не отличается от исходной. На рис 1.14 изображена
исходная сеть и числа на ребрах означают пропускные способности.
Внимательный читатель, конечно, заметил, что пропускные
способности мы определили немного не так, а именно: мы положили, что все ребра, исходящие от поставщика, имеют пропускную способность не +∞, а предложение именно этого поставщика. Никакой ошибки здесь нет, вес соответствующего ребра
можно положить равным предложению поставщика, спросу потребителя или, чтобы не мучиться, равным +∞.
Поскольку остаточная
сеть для нулевого потока
не отличается от исходной,
то легко находится ПУТЬ
от s до t, имеющий наименьшую стоимость. Конечно, это путь, проходящий через вершины s, 1, 3,t. Итак,
Рис. 1.15. Остаточная сеть
для потока f
1
Нарисуем остаточную сеть для потока f
поток на этих ребрах равен 2,
на остальных — 0. Обозначим
этот поток через f
, числа возле ребер
1
.
1
означают «длину» соответствующего ребра (см. рис. 1.15).

1.5. Задачи 45
Обращаем внимание читателя, что веса ребер проставлены в соответствии с определением, данным выше. Кратчайший
путь от s до t, обозначим его p, проходит через вершины s, 1, 4,t
и «длина» его равна 2. Отсюда находим h(p). Имеем h(p)=1.
Новый поток f
f
(s, 1) = 3,f2(1, 3) = f2(3,t)=2,f2(1, 4) = f2(4,t)=1,
2
описывается равенствами
2
на оставшихся ребрах — 0.
Остается построить потоки f
и f4. Надеемся, что с этой
3
задачей вы справитесь самостоятельно.
Двойственный алгоритм приписывают Басакеру и Гоуэну
(1961). Имеющаяся на сегодня оценка сложности — экспонента от n.
Но этот алгоритм хорошо работает!
1.5. Задачи
КРАТЧАЙШАЯ f -ДОПОЛНЯЮЩАЯ (s, t)-ЦЕПЬ.
Пусть сеть G =(V, E, c), в которой пропускные способности
ребер равны 1, задана матрицей смежностей:
Здесь вершина 1 — источ-
1 2 3 4 5 6
1 − 1 0 1 1 0
2 0 − 1 1 0 0
3 0 0 − 0 0 1
4 0 0 0 − 0 1
5 0 0 0 1 − 0
6 0 0 0 0 0 −
ник сети s, а узел 6 — сток.
Поток f на дугах (1, 2), (2, 4),
(4, 6) равен 1.
Найдите кратчайшую
по числу ребер f -дополняющую (s, t)-цепь и новый поток, который получится после увеличения вдоль найденной цепи.

46 Глава 1. Потоки в сетях
АЛГОРИТМ ФОРДА — ФАЛКЕРСОНА. Разрабо-
тайте реализацию алгоритма Форда — Фалкерсона для построения максимального потока в сети.
УВЕЛИЧЕНИЕ ПОТОКА. Рассмотрим следующий ал-
горитм построения максимального потока в заданной сети G.
Algorithm 8: Алгоритм построения максимального
потока
1 Начальный поток считать нулевым: f(e):=0для всех
e из G;
2 Построить вспомогательную сеть Γ на том же
множестве вершин, включив в нее все ребра,
удовлетворяющие условию f(e) <c(e). Положить
h =min
3 В сети Γ искать (s,t)-путь;
4 if путь найден then
5 для всех ребер пути положить f(e):=f(e)+h и
{c(e) − f(e)};
e∈Γ
вернуться на шаг 2
6 else
7 СТОП, f — максимальный поток.
8 end
Приведите пример, когда такой алгоритм не построит мак-
симальный поток.

1.5. Задачи 47
МИНИМАЛЬНЫЙ РАЗРЕЗ
A. Предложите алгоритм построения минимального разреза
в сети.
B. Предложите алгоритм, который в заданной сети находит
все ребра, такие, что увеличение пропускной способности
любого из них приводит к увеличению величины максимального потока, либо выдает сообщение, что таких ребер
нет.
C. Предложите алгоритм, который в заданной сети находит
наименьшее по количеству ребер множество, такое, что
увеличение пропускной способности у всех ребер этого
множества приводит к увеличению максимального потока в сети.
ЛАБИРИНТ. Лабиринт задается матрицей смежности
N × N,гдеC(i, j)=1, если узел i связан с узлом j посред-
ством дороги. Часть узлов назначается входами, часть — выходами. Входы и выходы задаются последовательностями узлов X(1),...,X(p) и Y (1),...,Y(k) соответственно. Требует-
ся найти максимальное число людей, которых можно провести
от входов до выходов таким образом, чтобы:
a) их пути не пересекались по дорогам, но могли пересекать-
ся по узлам;
b) их пути не пересекались по узлам.
Предложите математическую модель решения этой задачи как
задачи оптимизации на графе.
ПЛАНИРОВАНИЕ ЗАГРУЗКИ ОДНОПРОЦЕС-
СОРНОЙ СИСТЕМЫ. Имеется N заданий. Для каждо-
го задания k известно время его выполнения t(k) и крайнее
время завершения d(k). Допустимым расписанием исполнения
заданий является такая перестановка заданий, что при исполнении заданий в данном порядке каждое задание заканчивается до крайнего времени его завершения.

48 Глава 1. Потоки в сетях
Требуется разработать эффективный алгоритм, который
либо определит нужный порядок выполнения заданий, либо
определит, что выполнить все задания невозможно.
НЕФТЕПРОВОДЫ. Олигарх Вован, как и большинство
других олигархов, занимается транспортировкой нефти из Западной Кукуляндии в Восточную Кукуляндию. В его владении находится огромная нефтедобывающая станция в Западной Кукуляндии, не меньшего размера нефтеперерабатывающая станция в Восточной Кукуляндии, а также система нефтепроводов, по которым нефть перегоняется из одной страны
в другую. На столе у Вована лежит карта нефтепроводов. Хотелось бы знать, какое количество условных единиц нефти может транспортировать данная система.
Каждый нефтепровод соединяет некоторую пару станций.
На карте все станции пронумерованы, при этом добывающая
станция имеет номер 1, перерабатывающая — номер N , а транзитные — номера от 2 до N − 1. Каждый нефтепровод может
транспортировать ограниченное количество нефти, зато в любом направлении. Вован не знает, что Земля круглая, поэтому
каждая станция на его карте имеет плоские координаты (x
и yi— координаты i-й станции). Нефтепроводы являются отрезками прямых. На карте пара нефтепроводов может пересекаться только по общей станции-вершине. Известно, что среди
всех станций добывающая станция имеет наименьшую координату x, а перерабатывающая — наибольшую координату x.
i
КИТАЙСКИЙ ХОККЕЙ. Китайский чемпионат
по футболу, за которым внимательно следили Серёга с Денисом, завершился. К сожалению, команды «Katraps» и «Kolomotiv», за которые болели друзья, разделили в чемпионате последнее место. С досады Серёга предложил Денису переквалифицироваться в хоккейных болельщиков.
В китайском чемпионате по хоккею участвует n команд.
Во время сезона каждая команда должна сыграть с каждой

1.5. Задачи 49
ровно один матч. Если победитель матча определяется в основное время, то он получает 3 очка, а проигравшая команда — 0 очков. Если же основное время матча заканчивается
вничью, то назначается овертайм. Команда, одержавшая победу в овертайме, получает 2 очка, а проигравшая команда —
1 очко. Ничьих в хоккее не бывает.
Денис хочет определиться, за какую хоккейную команду
стоит болеть. С этой целью он нашел в Интернете таблицу,
в которой для каждой из n команд указано, сколько очков она
набрала по результатам прошлого хоккейного сезона. Серёга
подозревает, что в этой таблице содержится ошибка, поскольку
никакой круговой хоккейный чемпионат не может завершиться с такими результатами. Прав ли он?
ПОМОЖЕМ МЧС. Министерству по чрезвычайным ситуациям понадобилось срочно перебросить большую партию
грузов из пункта А в пункт Б по железным дорогам. Из пункта
А в пункт Б ведут несколько различных веток, при этом на путях имеются узловые станции T (1),...,T(n). Число товарных
поездов, которые могут пройти по ветке от станции T (i) к станции T(j) за один день, ограничено и задается таблицей c(i, j)
(значения c(i,j) и c(j, i) могут различаться). Кроме того, для
каждой узловой станции T (i) задано K(i) — максимально возможное число поездов, которое может пройти через нее за один
день.
Как найти максимально возможное число поездов, которые
за один день смогут пройти от пункта А до пункта Б?
ТРАНССИБ. Основным маршрутом Транссибирской железнодорожной магистрали принято считать маршрут следования фирменного поезда «Россия» Москва — Владивосток, пролегающий через Нижний Новгород, Киров, Пермь и Екатеринбург. Поезд доезжает от Москвы до Екатеринбурга за 25 часов
41 минуту. Поезд «Урал» следует по южной ветке Транссиба

50 Глава 1. Потоки в сетях
через Казань и преодолевает свой путь за 25 часов 25 минут.
Быстрее доехать на поезде из Москвы в Екатеринбург нельзя.
Рис. 1.16. Схема к задаче «Транссиб»
На рис. 1.16 приведена схема железных дорог между Москвой (M) и Екатеринбургом (Y). На ней видно, что на пути следования поездов «Россия» (верхняя линия на схеме) и «Урал»
(нижняя линия) лежат крупные реки: Волга, Вятка и Кама.
Первый поезд пересекает их, соответственно, в Нижнем Новгороде (1), в Котельниче (2) и в Перми (3). Второй поезд делает
это, соответственно, в 35 километрах к западу от Казани (4),
в Вятских Полянах (5) и в Сарапуле (6). На схеме также изображены прямые ветки, соединяющие некоторые из этих городов. Кроме пассажирских поездов, по этим железным дорогам
проходят товарные поезда, которые могут следовать по четырем маршрутам:
1) Москва – Нижний Новгород – Котельнич – Сарапул –
Екатеринбург;
2) Москва – Казань – Вятские Поляны – Сарапул – Екатеринбург;
3) Москва – Казань – Котельнич – Пермь – Екатеринбург;
4) Москва – Нижний Новгород – Вятские Поляны –
Пермь – Екатеринбург.
Министр путей сообщения хочет организовать движение товарных поездов таким образом, чтобы грузопоток из Москвы
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
