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

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

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
1.1. Основные понятия и обозначения 11
означает, что
F
m
[0,c(ei)],
i=1
т. е. множество F ограничено по каждой координате.
Докажем замкнутость множества F . Пусть g =(g
,...,gm) — произвольная предельная точка
1
множества F. Докажем, что g F , т. е. точка g является неко- торым потоком в сети G.
Так как g — предельная точка, то существует последова- тельность элементов {f странстве E
.
m
} множества F , сходящаяся к g в про-
k
Отметим, что сходимость в этом пространстве означает по­координатную сходимость, т. е. для любой i-координаты после­довательность {f
} сходится к giпри k, стремящемся к беско-
ki
нечности.
Но для функций f
выполняются неравенства
k
0 f
(ei) c(ei),
k
а в неравенствах можно переходить к пределу, значит
0 g
 c(ei),
i
что доказывает выполнение первого условия потока (ограни­чение по пропускной способности ребра).
Докажем второе условие (сохранение потока в вершинах).
Пусть J, J + обозначают все индексы ребер, входящих в вершину и выходящих из произвольной вершины v, v = s, t.
Но для значений функций f
(v)=fki(v+), значит эти равенства справедливы и для
f
ki
справедливы равенства
ki
пределов, поскольку предел суммы (а выражение слева пред­ставляет сумму по множеству J−, а справа — по J+), отсюда получаем равенство g
(v)=gi(v+), т.е. для точки g выпол-
i
няются оба условия потока. Значит g F .
Итак, F — компакт, а по теореме Вейерштрасса всякая непрерывная функция имеет максимум.
12 Глава 1. Потоки в сетях
Рассмотрим функцию P (f)=f , функция P непрерыв- на как линейная функция, значит, P имеет максимум. Точка максимума и является максимальным потоком.
1.2. Построение максимального потока
Итак, максимальный поток всегда существует, но как его построить? Придется ввести некоторые определения.
Разрезом между заданными вершинами v и w в ориентиро- ванном графе обычно называют минимальное количество ре­бер, удаление которых из орграфа приводит к разрушению всех (v, w) путей. Этому понятию можно придать двойствен­ную формулировку в терминах множества вершин. В этом раз­деле нам удобно оперировать именно такой трактовкой поня­тия разреза.
Определение. Разрезом в сети G называется пара мно- жеств вершин (S, T ) такая, что:
a) s S, t T ;
b) S T = V ;
c) S T = .
Пусть (S, T ) некоторый разрез. Положим
E(S T )={e = vw : v S, w T },
E(T S)={e = vw : v T, w S},
т. е. через E(S T) обозначено множество ребер, начинаю­щихся в S и заканчивающихся в T . Аналогично и множество
(T S).
E
Пусть в сети G дан какой-то поток f . Положим
f(S T )=
Аналогично определяется число f(T S).
f(e).
eE(ST )
1.2. Построение максимального потока 13
Например, для сети, изображенной на рис. 1.1, где S = {s},
T = {1, 2,t}, имеем равенства
|E(S T )| =2,f(S → T )=1, |E(T → S)| =0,f(T → S)=0.
Лемма 1. Для любого потока f и любого разреза (S, T ) спра­ведливо равенство
f = f (S T ) f (T S).
Для произвольной вершины v ∈ S верны равенства
f(v+) f(v−)=0, если v = s;
f= f (s+), если v = s.
Просуммируем по всем v ∈ S, получим
f=(f(v+) − f(v−)) .
Пусть e = v, w E и обе вершины входят в S. Тогда f(v, w) фигурирует в сумме f (v+) как часть потока, выходящего из v, ивf(w−) как часть входящего в w потока. Тогда в правой части этого равенства все такие слагаемые взаимно уничтожа­ются, так как входят в сумму с противоположными знаками.
Оставшиеся слагаемые и дают требуемое.
Следствие 1. Для любого потока f справедливо равенство
f = f (t−).
Это следствие выражает интуитивно понятный факт. По­скольку величина потока — это то, что вытекает из источника, a потерь в вершинах не происходит, то весь поток соберется встоке.
Для доказательства достаточно рассмотреть такой разрез T = V \ t, S = V \ T . Для такого разреза f(S и f(T S)=0. Теперь достаточно просто сослаться на лем- му 1.
T)=f (t−)
14 Глава 1. Потоки в сетях
Пусть (S, T ) — разрез. Положим
c(S, T)=
eE(ST )
c(e).
Число c(S, T) называется пропускной способностью разре­за. Особо подчеркнем, что понятие пропускной способности
разреза никак не зависит от того, задан или нет поток в сети, и что обратные ребра, т.е. ребра, ведущие из T в S, не играют никакой роли.
Пример. Пусть G =(V, E, c) — сеть, изображенная на рис. 1.4, в которой функция пропускных способностей ре­бер тождественно равна 1 (c(e)=1).
Для разреза, в котором S = {s, 4}, T = {1, 2, 3,t}, получается c(S, T )=3. Для разреза, в котором S = = {s, 1, 2, 3}, T = {4,t},по- лучается c(S, T )=2.
Следствие 2. Для любого
Рис. 1.4. Сеть с единичными пропускными способностями
потока f и любого разреза (S, T) справедливы неравен­ства
ff (S T ) c(S, T ).
Разрез, имеющий минимальную пропускную способность
среди всех разрезов, называется минимальным.
Отдельно отметим, что нет нужды формулировать и до­казывать теорему существования минимального разреза, по­скольку это очевидно.
Следствие 3. Если для некоторого потока f
∗,T∗
рого разреза (S то поток f
) выполняется равенство f∗ = c(S∗,T∗),
— максимальный, а разрез (S∗,T∗) — минималь-
и для некото-
ный.
1.2. Построение максимального потока 15
Пусть f — максимальный поток, а он существует по тео- реме существования, а (S, T ) — минимальный разрез, суще­ствование которого очевидно. Тогда по следствию 2 и выбору f и (S, T ) выполняются неравенства
fc(S, T ) c(S∗,T∗),
f
поскольку крайние члены в этой цепочке совпадают, то нера­венства превращаются в равенства, что и завершает доказа­тельство.
Введем понятие цепи в ориентированном графе, т. е. мы не смотрим на ориентацию ребер. Если ориентация ребра сов­падает с ориентацией цепи, то говорим, что ребро в цепи пря- мое, в противном случае — обратное.
Пусть p — некоторая (s, t)-цепь, т. е. p имеет вид
s = v
0,e0,v1
,...,vk= t.
Положим
h(e)=
c(e) f(e), если e — прямое в цепи p; f(e), если e — обратное.
Пусть h(p)=min
eP
h(e).
Определение. (s, t)-цепь p называется f-дополняющей, если h(p) > 0.
Пример. Пусть c =1на
каждом ребре. Поток f изображен на рис. 1.5, f =1. Пусть (s, t)- цепь p такая:
p = s, (s, 2),2, (1, 2), 1, (1,t),t.
Рис. 1.5. Пример
f-дополняющей
(s, t)-цепи
В этой цепи ребра (s, 2) и (1,t) — прямые, а ребро (1, 2) — обратное.
h(p)=1,т.е.p f-дополняющая (s, t)-цепь.
16 Глава 1. Потоки в сетях
Лемма 2. Пусть f — некоторый поток в сети G p f -до- полняющая (s,t)-цепь. Тогда в сети G существует поток f такой, что f∗ > f.
Поток f
построим конструктивно, а именно:
f(e)+h(p),ep, e — прямое в p;
(e)=
f(e) h(p),e∈ p, e — обратное в p;
f(e),eне входит в p.
— поток, т. е. f∗неотрицательна, и выпол-
f
Докажем, что f няются условия 1) и 2) определения потока.
Проверим первое условие и неотрицательность потока (огра­ничение по пропускной способности).
Пусть e — прямое в p. Используя определения f
и h(p),
получим
0 f(e) <f
(e)=f(e)+h(p)
f(e)+h(e)=f (e)+(c(e) f(e)) = c(e),
т. е. для прямых ребер цепи условие 1) выполняется. Неотри­цательность нового потока f
Пусть e — обратное в p. Так как f
(e)  c(e) выполняется. Проверим, что 0  f∗(e). Действи-
f
очевидна.
(e) <f(e), то условие
тельно,
(e)=f(e) − h(p)  f (e) − h(e)=f(e) − f (e)=0.
f
Итак, функция f
удовлетворяет условию 1. Проверим второе условие (сохранение потока в вершинах). Пусть v — вершина, отличная от s и t, и эта вершина вхо-
дит в цепь p. Пусть x и y, соответственно, те ребра в цепи, по которым пришли и ушли из v. Возможны 4 случая.
Случай 1. Пришли по прямому, ушли по прямому. В этом
случае оба потока f (v−) и f (v+) увеличиваются на одно
1.2. Построение максимального потока 17
и то же число, так как ребро x входит в v, а ребро y выхо-
дит из v. Отсюда получаем равенство для f
(v)=f∗(v+).
f
, а именно:
Случай 2. Пришли по прямому, ушли по обратному.То-
гда оба ребра x и y входят в вершину v. Следовательно, они входят в сумму f (v−). Но на ребре x значение потока увели­чивается на h(p), а на ребре y — уменьшится на это же число.
Значит f
(v)=f∗(v+).
f
Остальные два случая разбираются аналогично. Итак, f
(v)=f (v)f(v+) вообще не меняется, отсюда
поток в G.
Осталось проверить, что величина потока f
больше, чем
у потока f. Более того, оказывается, что верно равенство
= f+ h(p).
f
Действительно, цепь p начинается в s,ноs — единственная
вершина, из которой ребра только выходят, а на этом ребре до-
бавится число h(p). Значит, f
(s+) = f(s+) + h(p),т.е.f∗ =
= f+ h(p).
Рассмотрим тот же пример, что и на рис. 1.5, т. е. стартовый
поток тот же самый (см. рис. 1.6).
a
b
Рис. 1.6. Увеличение потока: a — поток f ; b — поток f
18 Глава 1. Потоки в сетях
Здесь цепь p = s, 2, 1,tявляется f-дополняющей и величина
h(p)=1. Значит, поток можно увеличить на единицу. Новый
поток изображен на рис. 1.6, b. Получился поток f
из потока f
по формулам, указанным выше.
Построение потока f
будем описывать немного иначе. По-
ложим
+1,ep, e — прямая в p;
(e)=
sgn
p
1,e∈ p, e — обратная в p;
0,e/p.
В этих обозначениях поток f
f
(e)=f(e)+sgnp(e) · h(p).
описывается так:
Теорема 1.3 (Форд — Фалкерсон, 1956). Для потока f в се- ти G следующие условия эквивалентны:
1) поток f максимален;
2) не существует f -дополняющей (s, t)-цепи;
3) существует разрез (S, T) такой, что f= c(S, T ).
Импликация 1) 2) — это просто по-другому сформули-
рованная лемма 2. Импликация 3) 1) доказана ранее (след­ствие 3 из леммы 1). Осталось показать справедливость импли­кации 2) 3).
Пусть для потока f не существует f -дополняющей (s, t)-
цепи. Построим требуемый разрез (S, T).
В S отнесем все вершины v, до которых существует цепь p
такая, что h(p) > 0, и добавим в S вершину s,азаT возьмем всё остальное, т. е. T = V \S. Поскольку, по условию, не существует
f-дополняющей (s, t)-цепи, то вершина t лежит в
T .
Пусть e = vw — ребро, которое идет из S в T,т.е.v S,
w T . Тогда на этом ребре e выполняется равенство f(e)=c(e), так как в противном случае цепь p, для которой h(p) > 0 и которая заканчивается в v, была бы продолжена до w, а это невозможно по построению множеств S и T.
1.2. Построение максимального потока 19
Аналогично, если ребро e = vw смотрит «навстречу»,
т. е . v T , w S, получаем, что f (e)=0по тем же причи- нам.
Итак, если e ∈ (S T),тоf (e)=c(e) (иначе говоря, эти
ребра забиты под завязку); если e ∈ (T S),тоf (e)=0.
Но по лемме 1 выполняется равенство
f = f (S T ) f (T S).
Однако для построенного разреза f(S T )=c(S,T ), f(T S)=0. Значит, для этого разреза f = c(S, T), от-
сюда следует, что f — максимальный поток по следствию 3 из леммы 1 (а построенный разрез минимален).
Следствие. В произвольной сети величина максимального потока равна пропускной способности минимального разреза.
Доказанная теорема позволяет предложить следующий ал-
горитм (см. алгоритм Форда — Фалкерсона на с. 20).
Algorithm 1: Алгоритм (Форд — Фалкерсон, 1956)
1 Нулевой поток объявить текущим потоком f; 2 Для текущего потока искать f -дополняющую
(s, t)-цепь p;
3 if такая цепь p построена then 4 увеличить текущий поток f по формуле
f(e)=f (e)+sgn
5 else 6 СТОП. Текущий поток максимален. 7 end
(e) · h(p) и на шаг 2.
p
Однако здесь есть тонкость. Все задачи дискретной опти-
мизации, рассмотренные до сих пор, имеют одну особенность, а именно: нет нужды доказывать существование объекта, кото­рый ищется. С точки зрения классический математики доста­точно просто полным перебором найти объект, который ищет­ся — посмотрите задачи о минимальном остове или задачи
20 Глава 1. Потоки в сетях
о кратчайших путях. А вот в задаче о максимальном потоке полный перебор не проходит, поскольку значение потока есть вещественное число. Здесь в полной мере работает «паразит вещественного числа». Поэтому мы вынуждены были доказать теорему существования максимального потока, т.е. что объект, который мы ищем, существует.
Но найдет ли его алгоритм Форда — Фалкерсона? А вдруг
процесс увеличения потока бесконечен?
Соответствующий пример такой сети привели Форд и Фал-
керсон. Разумеется, пропускные способности ребер являются иррациональными числами. Оказывается, можно так «злоу­мышленно» выбирать f -дополняющую (s, t)-цепь p, что про­цесс никогда не закончится, более того, величина каждого про­межуточного потока в течение всего времени работы алгорит­ма будет меньше одной трети величины максимального потока.
Пример такой сети мы приводить не будем, он достаточно
сложный и малоинтересный. Гораздо важнее другое: количе­ство итераций увеличения потока не является функцией от раз­мерности задачи, т. е. от n и m.
Разберем простой пример (см. рис. 1.7). В этом примере числа на ребрах указывают их пропуск-
ные способности. Если на каждом нечетном шаге выбирать
f-дополняющую (s, t)-цепь такую, что
s 1 2 t,
аначетном —
s 2 1 t,
то текущий поток в каждой итерации увеличивается ровно на 1. Значит, максимальный поток будет построен через 2M итераций, что не является функцией от n и m.
Заметим, что если пропускные способности являются це-
лыми числами, то каждый промежуточный и максимальный потоки тоже являются целочисленными, поскольку h(p) — це­лое число. Следовательно, каждый раз поток возрастает как
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]