
- •2. Алгоритмы построения деревьев
- •2.1. Неориентированные покрывающие деревья
- •2.2.Алгоритм построения максимального ориентированного леса
- •3. Алгоритмы поиска путей
- •3.1. Алгоритм поиска кратчайшего пути
- •3.2. Алгоритмы поиска всех кратчайших путей.
- •3.3. Алгоритмы поиска k кратчайших путей
- •4. Потоковые алгоритмы
- •4.1. Определения
- •4.2. Алгоритм поиска увеличивающей цепи
- •4.4. Алгоритм поиска потока минимальной стоимости
- •4.5. Алгоритм поиска максимального динамического потока
- •5. Паросочетания и покрытия
- •5.1. Понятия и определения
- •5.2. Алгоритм решения задачи о паросочетании максимальной мощности
- •5.3. Алгоритм выбора паросочетания максимального веса
- •6. Задача почтальона
- •6.1. Введение
- •6.4. Задача почтальона для смешанного графа
- •7. Сетевые графики. Метод критического пути
- •Контрольные вопросы
- •I. Организационно-методический раздел
- •4. Перечень контрольных вопросов и заданий для самостоятельной работы
- •4. Примерный перечень вопросов к экзамену и зачёту
- •III. Распределение часов курса по темам и видам работ
4.4. Алгоритм поиска потока минимальной стоимости
Рассмотрим задачу организации пересылки с минимальными затратами заданного количества v единиц потока из источника в сток в графе с заданными на дугах пропускными способностями и стоимостями прохождения одной единицы потока. Алгоритм решения этой задачи, принадлежащий Форду и Фалкерсону, является обобщением алгоритма поиска максимального потока.
Если количество единиц потока, которое может проходить по дуге (x,y), ограничено, то говорят, что дуга (x,y) имеет ограниченную пропускную способность, обозначается она с(х,у).
Пусть a(x,y) стоимость прохождения одной единицы потока по дуге (x,y), предположим, что a(x,y) – целочисленная величина. Задача пересылки с минимальными затратами v единиц потока из источника в сток может быть представлена как задача линейного программирования следующим образом:
Процедура алгоритма поиска потока минимальной стоимости
Шаг 1. Принять значение f(x,y) в каждой дуге (x,y) равным нулю. Положить p(x)=0 для всех вершин х (p(x) – вершинные числа).
Шаг 2. Сформировать множество I, включив в него дуги (х,у), для которых p(y) – p(x) = a(x,y) и f(x,y) < c(x,y). Сформировать множество R, включив в него дуги (х,у), для которых p(y) – p(x) = a(x,y) и f(x,y) > 0. Сформировать множество N, включив в него дуги, не вошедшие ни в I, ни в R. Изменения потока будут допускаться только в дугах, принадлежащих I и R.
Шаг 3. Применить алгоритм поиска максимального потока на множествах I и R (см. разд. 4.3). Выполнение этого алгоритма завершается, если:
а) Из источника s в t уже передано v единиц. Тогда закончить процедуру: полученный поток есть решение задачи.
б) Найден максимальный поток. Проверить, не является ли этот поток максимальным для исходного графа. Делается это следующим образом: в результате последнего построения увеличивающей цепи вершина t не была окрашена. Множество дуг, одна концевая вершина которых окрашена, а другая нет, является разрезом. Суммарная пропускная способность дуг, начальные вершины которых окрашены, а конечные нет, является пропускной способностью образовавшегося разреза. Если суммарный поток в дугах разреза совпадает с его пропускной способностью – разрез является насыщенным, т.е. поток в графе максимален. В этом случае закончить процедуру: найден максимальный поток из s в t, меньший v, и способ его передачи с минимальными затратами. Если найденный поток не является максимальным для исходного графа, перейти к шагу 4.
Шаг 4. В результате последнего построения увеличивающей цепи часть вершин графа оказалась неокрашенной. Для каждой такой вершины величину p(x) увеличиваем на 1. На шаг 2.
Поиск потока минимальной стоимости
4.5. Алгоритм поиска максимального динамического потока
Пусть дуга сети, кроме пропускной способности, характеризуется временем прохождения единицы потока по этой дуге. При этом будем рассматривать такие потоки, в которых каждая единица проходит из источника в сток за время, не превышающее заданное.
Пусть a(x,y) – количество временных интервалов, необходимых для прохождения единицы потока по дуге (x,y); с(x,y,Т) – максимальное число единиц потока, которое может входить в дугу (x,y) в момент времени Т, где Т=0,1,…. (Время дискретно, Т – номер соответствующего временного интервала). Динамическим потоком в графе G из вершины s в вершину t называется любой поток из s в t, который удовлетворяет ограничениям на пропускные способности дуг в каждый рассматриваемый момент времени, т.е. в любой рассматриваемый момент времени Т в каждую дугу (x,y) входит не более чем с(x,y,Т) единиц потока. В динамическом потоке отдельные его единицы могут отправляться из источника в моменты времени 0,1,2,…. Максимальным динамическим потоком из вершины s в вершину t за период в р интервалов времени является такой динамический поток из s в t, для которого в сток t за период времени р проходит максимально возможное количество единиц потока.
Обозначим через Gp развернутый во времени вариант исходного графа G=(X,A) для периода в р интервалов времени. Множество вершин графа Gp определяется как Xp={xi : x X, i = 0,1,…,p}. Множество дуг графа Gp определяется как
Ap={(xi,yj): (x,y) A, i = 0,1,…,p – a(x,y), j = i + a(x,y)}. Положим c(xi,yj) = (x,y,i).
Заметим, что множество вершин Хр графа Gp формируется из вершин множества Х, каждая из которых продублирована р раз, для каждого момента времени в рассматриваемом периоде. В графе Gp вершины xi и yj соединяются дугой (xi,yj), если в исходном графе G время прохождения единицы потока по дуге (x,y) равно (j – i).
Например, единица потока, выходящая из вершины х в момент времени 3 и затрачивающая при прохождении по дуге (x,y) 9 интервалов времени, может быть представлена в графе Gp единицей потока, проходящей по дуге (x3, y12).
Пример. На рис. 4.10 приведён развернутый во времени вариант графа, изображённого на рис. 4.9. Время прохождения единицы потока по дуге – число рядом с дугой. Пропускные способности всех дуг равны 1.
Рис. 4.9.
Рис. 4.10.
Очевидно, что любой динамический поток из s в t в исходном графе G эквивалентен потоку из группы источников в группу стоков в графе Gp. Справедливо и обратное утверждение. Отсюда следует, что для решения задачи поиска максимального динамического потока из вершины s в вершину t за период в р интервалов времени необходимо построить развернутый во времени вариант Gp исходного графа G=(X,A) для периода в р интервалов времени и, применив алгоритм поиска максимального потока, найти на Gp максимальный поток из группы источников в группу стоков. Заметим, что при таком решении задачи пропускная способность любой дуги в разные моменты времени может быть различной.
(x,y) A, существует алгоритм поиска максимального динамического потока Форда и Фалкерсона, который в качестве подалгоритма использует алгоритм поиска потока минимальной стоимости.
Пусть F0, F1, F2, …, Fp – результирующая последовательность потоков, формируемая алгоритмом поиска потока минимальной стоимости. Каждый поток Fi может быть представлен определенным набором путей fi1, fi2, …, firi, ведущих из s в t, по которым пересылаются определенные единицы потока, составляющие общий поток Fi. Обозначим через nij количество единиц потока, которое должно было бы проходить по пути fij в потоке Fi. Таким образом, поток Fp определяется путями fp1, fp2, …, fprp, по которым протекает соответственно np1, np2,…, nprp единиц потока. Данная декомпозиция потока Fp является побочным результатом выполнения алгоритма поиска потока минимальной стоимости.
Процедура алгоритма поиска максимального динамического потока
Шаг 1. Считая стоимость дуги (x,y) равной времени a(x,y) прохождения по этой дуге, применить к исходному графу алгоритм поиска потока минимальной стоимости (см разд. 4.4). Выполнение алгоритма продолжать до формирования потока Fp.
Шаг 2. Для j=1,2,…,rp отправлять по каждому пути fpj npj единиц потока в каждый из моментов времени 0, 1, 2, … , (p–a(fpj)).
Обоснование алгоритма поиска максимального динамического потока
Для обоснования алгоритма необходимо доказать следующие утверждения:
а) алгоритм формирует некоторый динамический поток;
б) формируемый поток является максимальным динамическим потоком за период в
p единиц времени;
в) алгоритм завершается за конечное число шагов.
Доказательство утверждения “а”. Поток Fp распределен по путям ведущим из s в t. При этом поток, входящий в любую вершину, за исключением источника и стока, равен потоку, выходящему из этой вершины. Отдельные единицы потока отправляются из источника только в том случае, если они могут за время p достичь стока. Для потока Fp количество единиц, протекающих по дуге (x,y), не превышает величину пропускной способности c(x,y), поэтому совокупность потоков вдоль путей fp1, fp2, …, fprp, также не может передавать через дугу (x,y) поток, превышающий её пропускную способность. Но тогда и динамический поток, порождаемый алгоритмом, не может ни в один из моментов времени превышать пропускную способность какой-либо из дуг. Итак, поскольку, во-первых, все единицы потока достигают стока к моменту T=p; во-вторых, при их перемещении по исходной сети ни в одной дуге не превышается пропускная способность; в-третьих, ни в одной из вершин не происходит накопления потока, рассматриваемый алгоритм строит динамический поток для периода p интервалов времени.
Доказательство утверждения “б”. Чтобы показать максимальность формируемого алгоритмом потока, рассмотрим эквивалентный ему стационарный поток в растянутом по времени варианте Gp исходного графа. При этом докажем, что соответствующий стационарный поток насыщает дуги некоторого разреза, отделяющего в Gp источники от стоков. Пусть p(x) – вершинное число для вершины х исходного графа перед началом выполнения (р+1)-й итерации алгоритма поиска потока минимальной стоимости. Заметим, что в этот момент p(s)=0, а p(t)=p+1. Пусть C = {xi: xi Xp, p(x) ≤ i}. Так как p(s)=0, все вершины-источники s0, s1, …, sp являются элементами С, а т.к. p(t)=p+1, ни одна из вершин-стоков t0, t1, …, tp элементом С не является. Множество всех дуг, одна концевая вершина которых принадлежит С, а другая нет, образует разрез К, который отделяет в графе Gp источники от стоков. Пусть дуга (xi,yj) принадлежит разрезу К, т.е. xi C, а yj C. Тогда, в силу определения К, имеем
a(x,y) = j – i < p(y) – p(x).
Отсюда, с учетом
вида условий дополняющей нежесткости,
для задачи о потоке минимальной стоимости
вытекает, что f(x,y) = c(x,y).
Следовательно, потоки вдоль путей,
участвующих в создании потока Fp,
должны насыщать дугу (x,y).
Но по каждому из указанных путей общее
время прохождения потока не превышает
величины р.
Более того, каждый из этих путей таков,
что проходящие по нему единицы потока
могут достичь вершины xi
в момент времени T=i
и попасть после этого в сток к моменту
времени T=p.
Таким образом, дуга (xi,yj)
в графе Gp
является насыщенной. Аналогичным образом
можно показать, что при xi
C
и yj
C
дуга (xi,yj)
не содержит потока. Итак, каждая дуга
разреза К
в графе Gp,
ведущая из ”области источника” в
“область стока”, является насыщенной,
а каждая дуга того же разреза, ведущая
из “области стока” в “область источника”,
является пустой. Следовательно, разрез
К
является насыщенным и формируемому
алгоритмом потоку соответствует
максимальный поток в графе Gp.
Таким образом, формируемый в алгоритме
поток является максимальным динамическим
потоком за период в р
интервалов времени.
Доказательство утверждения “в”. Выполнение алгоритма поиска потока минимальной стоимости завершается за конечное число шагов. Следовательно, и алгоритм поиска максимального динамического потока также должен завершиться за конечное число шагов, т.к. он включает алгоритм поиска потока минимальной стоимости и построение повторяющегося конечное число раз потока вдоль конечного числа путей, ведущих из s в t.