Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Поток минимальной стоимости и труднорешаемые задачи. Учебно-методическое пособие
.pdf
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).
e∈E(S→T )

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)=
e∈E(S→T )
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) справедливы неравенства
f f (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 ) выполняются неравенства
∗
f c(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
e∈P
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),e∈ p, 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,e∈ p, 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) — целое число. Следовательно, каждый раз поток возрастает как
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
