Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Поток минимальной стоимости и труднорешаемые задачи. Учебно-методическое пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
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» и «Kolomo­tiv», за которые болели друзья, разделили в чемпионате по­следнее место. С досады Серёга предложил Денису переквали­фицироваться в хоккейных болельщиков.
В китайском чемпионате по хоккею участвует 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) Москва – Нижний Новгород – Вятские Поляны – Пермь – Екатеринбург.
Министр путей сообщения хочет организовать движение то­варных поездов таким образом, чтобы грузопоток из Москвы
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]