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

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

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
1.2. Построение максимального потока 21
Рис. 1.7. Количество итераций увеличения потока
минимум на 1, и, значит, максимальный поток точно будет по­строен после не более чем
c(s, v) итераций.
vV
Отсюда следует, что если все пропускные способности суть
рациональные числа, то максимальный поток тоже будет по­строен, поскольку справедливо следующее утверждение.
Утверждение. Если f — поток, то αf — тоже поток для любого α :0α 1.
Справедливость этого утверждения легко следует из опре-
деления потока.
Только в 1972 г. алгоритм Форда — Фалкерсона был обос-
нован.
Теорема 1.4 (Эдмондс — Карп, 1972). Если на каждой ите­рации алгоритма Форда — Фалкерсона выбирать кратчайшую по числу ребер f -дополняющую (s, t)-цепь p, то построение
максимального потока потребует не более чем
m(n+2)
ите-
2
раций.
Мы не будем здесь приводить достаточно сложное и длин-
ное доказательство, желающие могут посмотреть его в [1].
Итак, для поиска f-дополняющей (s, t)-цепи p есть только
один метод, а именно — поиск в ширину. Поиск в глубину не го­дится, так как он не обеспечивает минимальности количества ребер в найденном пути.
22 Глава 1. Потоки в сетях
Будем считать, что перед входом в очередную итерацию
увеличения текущего потока выполняются равенства h(v)=+∞ для всех v V .
Число h(v) играет двойную роль: если h(v)=+∞, то это
будет означать, что вершина v еще не помечена, а если h(v) — число, то это означает, что вершина v помечена и до нее суще­ствует цепь p из s такая, что h(p)=h(v).
Опишем правила поиска. Их три:
• с чего начать (начало);
• как двигаться (движение);
• чем закончить (окончание).
Начало. Вершина s. Считаем, что s помечена, положим,
что h(s)=+∞.
Движение. Пусть v помечена, а w не помечена, и вершины
v и w соединены ребром. Надо различать, по какому именно
ребру — прямому или обратному, помечаем эту вершину w.
По прямому ребру. Помечаем w из v, если f(v, w) <c(v, w),
присвоив метку h(w)=min
По обратному ребру. Если значение f (w,v) > 0, полагаем
{h(v),c(v, w) − f (v, w)}.
h(w)=min{h(v),f(w, v )}.
Тот факт, что w помечена из v, обозначим через
ПРЕД[w]=v. Если помечивание произошло по прямому реб- ру (v, w), то запишем, что СПСБ[w]=1, а если по обратному (т. е. (w, v)) — то СПСБ[w]=1.
Окончание. Как только вершина t получит числовую мет-
ку, т.е. h(t) < +, что говорит о том, что f -дополняющая (s, t)-цепь p найдена, она легко восстанавливается с помощью массива ПРЕД и h(p)=h
Либо ни одной новой вершины пометить нельзя, что озна-
чает, что f-дополняющей (s, t)-цепи не существует.
После сделанных уточнений не сложно прописать реализа-
цию алгоритма Форда — Фалкерсона.
(t).
1.3. Некоторые другие задачи о потоках в сетях 23
Теорема 1.5. Алгоритм Форда — Фалкерсона имеет слож-
2
ность O(m
n).
Всего итераций по теореме Эдмондса — Карпа будет по-
рядка mn, сложность одной итерации (а это поиск в ширину) — O(m + n), но чтобы избежать вырожденных случаев, считаем, что m n 1 (для дерева m = n 1). Отсюда получаем слож­ность алгоритма.
В заключение отметим, что сегодня известны алгоритмы
3
построения максимального потока со сложностью O(n
). Один
из таких алгоритмов изложен в [2].
1.3. Некоторые другие задачи о потоках в сетях
1.3.1. Поток в сети со многими источниками
и стоками
Задана сеть G =(V, E,c), в которой выделены два подмно- жества множества вершин: S = {s вершины, из которых ребра только выходят, T = {t стоки, т. е. вершины, в которые ребра только входят; функция пропускных способностей — неотрицательна.
Потоком в сети G называется функция на ребрах, удовле- творяющая условию ограничения по пропускной способности ребра и сохраняющая поток на всех вершинах, кроме источни­ков и стоков.
Величиной потока называется число
,...,sk} — источники, т.е.
1
,...,tl}
1
k
f(si+).
i=1
Задача. В заданной сети со многими источниками и стока­ми найти максимальный поток.
Метод. Сведение к стандартной задаче в подходяще постро­енной сети.
24 Глава 1. Потоки в сетях
Построим новую сеть G
= V ∪{s∗}∪{t∗},
V
= E ∪{(s∗,si):si∈ S}∪{(tj,t∗):tj∈ T },
E
=(V∗,E∗,c∗),где
т. е. добавим в сеть две новых вершины: новый источник и но­вый сток, и соединим новый источник с каждым старым, а из каждого старого стока проведем ребро в новый сток.
Осталось определить функцию c
. На всех старых ребрах
(т. е. входящих в E) оставим старое значение функции c, по-
∗(s
ложим c в сети G
,si)=c∗(tj,t∗)=+∞. Тогда максимальный поток
=(V∗,E∗,c∗) однозначно определит поток в сети
со многими источниками и стоками.
1.3.2. Поток в мультиграфе
Напомним, что граф называется мультиграфом, если неко- торые вершины соединены более чем одним ребром, неориен­тированным или ориентированным — зависит от типа рассмат­риваемого графа.
Пусть G =(V,E, c) — мультисеть. Понятие потока в сети не зависит от того, сколько ребер ведут из данной вершины.
Задача. В заданной мультисети найти максимальный по­ток.
Метод. Сведение к стандартной задаче в подходяще постро­енной сети.
Достаточно просто для каждой пары вершин, в которой вершины v и w соединены более чем одним ребром, постро­ить новую сеть, в которой каждая такая пара соединена одним ребром пропускной способностью, равной сумме всех пропуск­ных способностей ребер, ведущих из v в w .
Тогда максимальный поток в новой сети однозначно опре­делит максимальный поток в исходной сети.
1.3. Некоторые другие задачи о потоках в сетях 25
1.3.3. Поток в сети с ограничениями
на пропускную способность вершин и ребер
Задана сеть с двумя функциями G =(V, E, c, d);гдеc — пропускная способность ребер, a d — пропускная способность вершин. Допустимым потоком в такой сети называется функ­ция f : E R, являющаяся потоком (т.е. выполняются усло­вия 1) и 2) потока) и удовлетворяющая еще одному условию:
3) для любой вершины v (v = s, t) поток, проходящий че­рез эту вершину, не превосходит d(v),т.е.f(v) d(v), для v ∈{s, t} : f(v)=f(s+) = f (t).
Задача. В заданной сети с ограничениями на пропускные спо­собности вершин и ребер найти максимальный допустимый поток.
Метод. Сведение к стандартной задаче в подходяще постро­енной сети.
Каждую вершину v, кроме s и t, разобьем на две: v− и v+. Будем считать, что ребра, входящие в вершину v, входят в v, а выходящие из вершины v — выходят из v+. Между vи v+ проведем одно дополнительное ребро из vв v способностью d(v).
Изобразим сказанное на рис. 1.8.
+ пропускной
a
b
Рис. 1.8. Сеть для задачи о потоке с ограничением на
пропускную способность вершин: a — было; b — стало
Легко видеть, что максимальный поток в новой сети
=(V∗,E∗,c∗) однозначно определяет максимальный допу-
G
стимый поток в исходной сети.
26 Глава 1. Потоки в сетях
1.3.4. Поток заданной величины
Задача. Для заданных сети G =(V, E,c) и числа k найти поток в сети G величины k.
Поскольку эта задача является промежуточной для более важной задачи, которую сформулируем позже, то здесь приве­дем три возможных решения поставленной задачи.
Решение 1
Метод. Сведение к стандартной задаче в подходяще постро-
енной сети.
Добавим в заданную сеть G одну новую вершину s
ребро (s
G
,s) пропускной способностью k. Новую сеть обозначим
.
Algorithm 2: Построение потока заданной величины
1 В сети G 2 if f 3 ответ «нет»; 4 else 5 взять в качестве f сужение f 6 /* т. е. игнорировать f 7 end 8 Вывести f.
построить максимальный поток f∗;
<kthen
∗(s
,s) */
на G;
и новое
Ясно, что величина потока f в точности равна k.
1.3. Некоторые другие задачи о потоках в сетях 27
Решение 2
Algorithm 3: Построение потока заданной величины
1 В исходной сети G построить максимальный поток f ; 2 if f 3 ответ «нет»; 4 else 5 для каждого ребра e положить
6 end 7 Вывести f
<kthen
(e)=(k/f) · f (e).
f
.
Легко видеть корректность приведенного алгоритма в силу утверждения, сформулированного ранее.
Однако этот метод имеет существенный недостаток, а имен­но: если веса всех ребер суть целые числа, то максимальный поток f, построенный алгоритмом Форда — Фалкерсона, так­же на каждом ребре представляет собой целое число, однако
при переходе к потоку f
целочисленность может потеряться.
Решение 3
Метод. В стандартном алгоритме Форда — Фалкерсона от-
слеживать величину, на которую увеличивается текущий по­ток. Детали в приводимом ниже алгоритме.
28 Глава 1. Потоки в сетях
Algorithm 4: Построение потока заданной величины
1 Начать с нулевого потока, т. е. положить f(e)=0для
каждого ребра e;
2 Искать f -дополняющую (s, t)-цепь p; 3 if такая цепь p построена then 4 if h(p)+f <kthen
5 f(e):=f (e)+sgn
6 else
7 f(e):=f (e)+sgn 8 СТОП. Вывести f
9 end
10 else 11 СТОП. Вывести ответ «нет». 12 end
(e) · h(p) и перейти на шаг 2;
p
(e)(k −f);
p
В комментариях нуждается только шаг 7. Действительно, перед той итерацией, когда величина нового пока превзойдет заданное число k, величина текущего потока строго меньше k, поэтому число f +h(p) <k, в частности, k −f > 0, значит увеличивать текущий поток на это число можно. Далее, вели­чина нового потока увеличится на число k−f  и в результате станет в точности равна k.
1.3.5. Поток в сети с ограничениями снизу
Задана сеть G =(V, E,c, d);гдеc — пропускная способ- ность ребер (ограничивающая поток сверху), d — ограничение снизу потока на каждом ребре. Обе функции неотрицательны: 0 d(e) c(e) для каждого ребра e.
Поток f называется допустимым, если на каждом ребре e выполняются условия 0 d(e) f (e) c(e).
Задача. В заданной сети с ограничениями на пропускные спо­собности сверху и снизу найти допустимый поток (не обяза­тельно максимальный).
1.3. Некоторые другие задачи о потоках в сетях 29
Метод. Сведение к стандартной задаче в подходяще постро­енной сети.
Опишем построение новой сети G
=(V∗,E∗,c∗). Заметим,
что новая сеть будет мультисетью, т. е. между некоторыми вер­шинами имеется более одного ребра.
Положим V
= V ∪{s∗}∪{t∗} (т. е. добавляются новые
источник и сток). Каждое ребро e = vw E такое, что d(e) > 0 порождает два ребра:
• (v, t
• (s
) — т. е. из вершины, из которой исходит ребро e,
проводится ребро в новый сток t
,w) — т.е. проводится ребро из нового источника s
;
в вершину, в которую входит ребро e; старое ребро e оста-
ется в сети G
.
Добавляется еще одно ребро из старого стока в старый источ­ник (t, s).
Итак,
= {(v, t∗), (s∗,w):vw E, d(v, w) > 0}∪E ∪{(t, s)}.
E
Пропускные способности ребер определим следующим об­разом:
c
(v, w)=c(v, w) d(v, w), ∀(v, w) V : d(v, w) > 0;
(v, t∗)=c(w, s∗)=d(v, w), (v, w) ∈ V : d(v, w) > 0;
c
(t, s)=+∞.
c
На рис. 1.9 проставлены пропускные способности добавляе­мых ребер, при этом d
и cw—от(v, w).
а d
w
и cu— значения, взятые от ребра (v, u);
u
Теорема 1.6. Допустимый поток в сети G существует то- гда и только тогда, когда величина максимального потока
в сети G
равна
vw∈E
d(v, w).
30 Глава 1. Потоки в сетях
a
b
Рис. 1.9. Сеть для задачи о допустимом потоке:
a — исходная сеть G; b — новая сеть G
Пусть f∗— максимальный поток в G∗, величина которого равна
d(v, w).
vwE
Отметим, что все ребра, выходящие из s
дящие в t
, забиты полностью. Для каждого ребра vw из G
, и все ребра, вхо-
положим
f(v, w)=f
(v, w)+d(v, w).
Покажем, что f — допустимый поток в G. Проверим оба условия потока.
Ограничение по пропускной способности.Пустьe произ- вольно из E, тогда:
f(v, w)=f
(v, w)+d(v, w) c∗(v, w)+d(v, w)
 (c(v, w) d(v, w)) + d(v, w)=c(v, w)
и f (v,w) d(v, w), так как f
— поток в G∗.
Сохранение потока в вершинах. Пусть v — произвольная вершина и v = s, t. Тогда для любого ребра, исходящего из v и ведущего в w, произошло просто переключение величины по-
тока с ребра (w, t
) на ребро (v, w). Значит, поток, выходящий
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]