книги из ГПНТБ / Ху, Т. Целочисленное программирование и потоки в сетях
.pdf
|
|
|
|
|
8.1. |
ВВЕДЕНИЕ |
|
|
141 |
||
Поскольку с(Х, |
|
|
|
|
|
|
Щ, т. е- |
|
|
||
c(Q, P) + c(Q, R) + c(S, |
P) + c( S , Д )< |
|
|
|
|||||||
|
|
|
|
|
|
|
|
< c ( P , |
R)-\-c(Q , R)-\-c(S, R), |
||
получаем |
|
|
|
|
|
|
|
|
|
|
|
|
|
c(Q, |
P) + |
c(S, P ) ^ c ( P , |
R). |
(4) |
|||||
Аналогично из выражения с (У, |
У )^ с (Q, |
P\JR\JS) |
находим |
||||||||
|
|
с{Р, |
R) + c(P, S) ^c ( Q, |
Р), |
(5) |
||||||
а из выражения c(Y, Y ) ^ c (Р [J Q (J S, |
R) |
следует |
|
||||||||
|
|
с(Р, |
S) + |
c(Q, S ) ^ c ( S , |
R). |
(6 ) |
|||||
Складывая (3), (4), (5) и |
(6), |
получим 2с (S, Р)-\-2с(Р, S ) ^ . 0. |
|||||||||
Так как |
0, |
то |
|
|
|
|
|
|
|
|
|
|
|
|
c(S, |
Р) = |
с(Р, S) = 0. |
(7) |
|||||
Подставляя (7) |
в (3), (4), |
(5) и (6), имеем |
|
|
|||||||
|
|
|
|
c(S, |
R)<^c(Q, |
S), |
|
|
|||
|
|
|
|
c{Q, |
P ) < c ( P , |
R), |
|
|
|||
|
|
|
|
c(P, |
R ) < c ( Q , |
P), |
|
|
|||
|
|
|
|
c(Q, S ) ^ c ( S , |
R), |
|
|
||||
откуда следует |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
c(S, |
R) = c(Q, |
S), |
|
(8 ) |
|||
|
|
|
|
c(Q, |
|
P) = c(P, |
R). |
|
(9) |
||
Из (7), (8 ) и (9) имеем |
|
|
|
|
|
|
|
|
|||
c(X, |
X) = c(Q, |
P) + c(Q, |
R) + c(S, |
R) = |
|
||||||
|
= c(<?, P) + c(Q, |
R) + c(Q, |
S) = c(X{] Y, |
A ffT ), |
|||||||
c(X, |
X) — c (Q, |
P) + c(Q, |
R) + c(S, |
R) = |
|
||||||
|
= c ( P , |
R) + c(Q, |
R) + c(S, |
R) = c ( X[ ) Y, |
Х Ц ? ) . , |
Так как существует много минимальных разрезов, возникает естественный вопрос: какой из минимальных разрезов получается в конструктивном доказательстве теоремы о максимальном потоке
и минимальном разрезе? Пусть |
(X*, X,) |
(£ = 1, |
т) — все |
||
минимальные |
разрезы, |
разделяющие N s и |
N t . Пусть |
(X, X) — |
|
минимальный |
разрез, |
полученный |
в конструктивном доказатель- |
||
<стве теоремы |
|
т |
|
|
|
8.1. Тогда Х = П X,-. |
|
|
|
142 |
|
ГЛ. 8. МАКСИМАЛЬНЫЙ ПОТОК |
|
Чтобы |
доказать этот факт, покажем сначала, |
что разрез |
|
т |
т |
_ |
_ |
( П Xt, |
П Xi) является минимальным. Пусть (Х4, Х 4) и (Х2, Х2) — |
г = 1
любые два минимальных разреза. Тогда из теоремы 8.2 следует, что (Xi П Х2, X t f| Х 2) — тоже минимальный разрез. Пусть (Х3, Х 3) —еще один минимальный разрез. Снова используя теоре
му 8.2, мы получаем, |
что (X* f| Х2П Х 3, Х4 (~| Х 2П Х3) —тоже мини |
|
мальный разрез. Если |
этот процесс повторим т — 1 раз, то полу |
|
чим, что |
(Xj П х 2П • |
• • п Х т, Х 4 П х 2п • • • П Хт ) —минимальный |
разрез. |
заметим, что рекуррентное определение множества X |
|
Теперь |
||
не может |
быть использовано для того, чтобы пометить какой- |
нибудь узел из X, если величина потока в сети равна с(Х, X). Отсюда следует, что множество X не содержит в качестве собствен
ного подмножества ни одного из множеств Х 4, таких, что (X;, X, ) — минимальный разрез. В частности, X не может содержать в каче-
т
стве собственного подмножества и П -^г- Следовательно, учиты-
i —1
вая, что множество X является одним из множеств Х 4, получим
т
х = n Xt. а
г= 1
8.2.Метод расстановки пометок для нахождения максимального потока
Мы уже рассмотрели конструктивное доказательство теоремы о максимальном потоке и минимальном разрезе. Теперь остано вимся подробнее на алгоритме нахождения максимального потока. Как уже отмечалось в § 8.1, задача о максимальном потоке в сети , может быть сформулирована как задача линейного программиро-
\у вания. Однако метод расстановки пометок не является частным случаем симплекс-метода. В симплекс-методе происходит движе ние от одной вершины многогранника к другой, пока не будет достигнута оптимальная. Как станет ясно в дальнейшем, в методе расстановки пометок дело обстоит не так.
Метод расстановки пометок начинается с произвольного потока (в качестве начального можно взять нулевой поток). Затем пред принимается попытка получить поток с большей величиной. Вычисления заканчиваются, когда получен максимальный поток. Алгоритм заключается в систематическом поиске всех возможных путей из N s в N t, увеличивающих поток. Это осуществляется с помощью процедуры «расстановки пометок». Узлы получают специальные «пометки», указывающие направление, в котором
8.2. МЕТОД РАССТАНОВКИ ПОМЕТОК |
14S |
может быть увеличен некоторый дуговой поток. После того как найден некоторый путь, увеличивающий поток, определяют вели чину максимальной пропускной способности этого пути; далее поток увеличивают на эту величину, а все пометки на узлах сти рают. Затем начинается расстановка новых пометок узлов исходя из только что полученного потока.
Алгоритм состоит из двух шагов. Шаг 1 — это процесс, в ходе которого узлы получают пометки. Шаг 2 заключается в измене нии потока. Шаги 1 и 2 повторяются до тех пор, пока увеличение потока становится невозможным.
Ш а г 1 (процесс расстановки пометок). На шаге 1 каждый узел находится в одном из трех состояний: «помечен и просмотрен»,, «помечен и не просмотрен» или «не помечен». Вначале все узлы не помечены. Пометка произвольного узла N s всегда состоит из двух частей. Первая часть — индекс i узла N и который указы вает, что можно «послать» поток из N г в N j. Вторая часть помет ки — число, указывающее максимальную величину потока, кото рый можно «послать» из источника N s в N], не нарушая ограниче ний на пропускные способности дуг.
Прежде всего источник N s получает пометку [s+, е (s) = оо]„ Первая часть этой пометки означает, что можно послать поток из узла N g в этот же узел; символ оо означает, что величина потока не ограничена сверху. Теперь узел N s «помечен и не просмотрен», а все остальные узлы «не помечены».
Вообще выберем любой помеченный и непросмотренный узел N j. Пусть он имеет пометку В+, е (/)] или В“, s (/)]. Два узла будем называть соседними, если они соединены дугой. Из всех узлов, соседних с N j, выделим те узлы N k, которые не помечены и для
которых |
xjk < |
bjh. |
Припишем |
каждому |
узлу N k |
пометку |
[/+, е (Л)], |
где |
е (к) |
= min [е (/), |
bjh — xjk]. |
(Такие |
узлы N k |
теперь «помечены и не просмотрены».) После этого всем соседним
с N j узлам N к, которые не помечены и для которых xhj > |
0, при |
писываем пометку [/- , е (ft)], где е (к) = min [е (/), xhj] *). |
(Такие |
узлы N h теперь также «помечены и не просмотрены».) Теперь все узлы, соседние с N j, имеют пометки. Тогда узел N j считается поме ченным и просмотренным, и его можно больше не рассматривать на этом шаге. Может оказаться, что некоторые соседние с N j узлы помечены, а остальные не могут быть помечены (либо все соседние с А /узлы не могут быть помечены); в этих случаях узел N j также-
х) |
Д л я |
неориентированной дуги |
мы |
могли бы определить е ( к ) — |
= m in |
[е (;'), |
xhj + bjh). Это повысило |
бы |
пропускную способность п ути , |
увеличивающего поток. Е сли принять такую процедуру, то появление отри цательного дугового потока на шаге 2 (изменение потока) будет означать, что дуговой поток имеет направление, противоположное направлению пер воначального дугового потока.
144 ГЛ. 8. МАКСИМАЛЬНЫЙ ПОТОК
считается помеченным и просмотренным. Знаки «+» и «—» в пер вой части пометок указывают, как должен быть изменен поток на шаге 2 .
Продолжим приписывать пометки узлам, которые являются соседними для помеченных и непросмотренных узлов, до тех пор, пока либо узел N t окажется помеченным, либо нельзя будет боль
ше пометить ни один узел и |
сток N t окажется непомеченным. |
||
Если |
N t не может быть помечен, |
то не существует пути из N s |
|
в N t, |
увеличивающего поток, |
и, |
следовательно, построенный |
поток максимален. Если же N t помечен, то на шаге 2 можно найти путь, увеличивающий поток.
III а г 2 (изменение потока). Предположим, что сток N t имеет пометку [Ат, е (£)]. Тогда заменим xht на xht + е (t). Если же он имеет пометку [А;- , е (/)], то xtk заменим на xth — е (t). Затем в любом из этих случаев переходим к узлу N k. Вообще если узел N h имеет пометку [у'+, е (А;)], то xjh заменим на Xjk + е (t) и перей дем к узлу N у, если узел N h имеет пометку [/“, е (А;)],, то xhj заме
ним на xkj — г (t) и перейдем к Nj. Продолжим эти действия, пока не достигнем источника N s. После этого сотрем все старые пометки узлов и вновь перейдем к шагу 1 .
Чтобы обеспечить конечность процесса, будем предполагать, что дуговые пропускные способности btj целочисленны. (Ниже будет рассмотрена модификация метода, обеспечивающая конеч ность процесса при любых неотрицательных Ъц.)
Когда алгоритм заканчивается на шаге 1, то получается мно
жество X |
помеченных узлов и |
множество дуг А ц с N , |
£ X , N j £ |
£ X , на |
которых xtj = btj (и |
нет дуг А ц , таких, что |
Хц > 0 ). |
Отсюда следует, что (X , X) — минимальный разрез, поток через который равен его пропускной способности. Таким образом, получен максимальный поток. G другой стороны, каждый раз величина потока увеличивается по крайней мере на единицу (предполагаем, что пропускные способности дуг и исходный поток являются целочисленными). Поскольку величина максимального потока ограничена сверху пропускной способностью минимально го разреза (целым числом), то алгоритм расстановки пометок конечен х).
Рассмотрим сеть, изображенную на рис. 8.4. Каждой ориенти рованной дуге поставлено в соответствие 2 числа. Первое из них —.
1 1А Если вычисления начались с целочисленного потока, то все после дующие потоки (в частности, максимальный), получаемые при работе рас смотренного алгоритма, будут целочисленными. Этот простой, но важный факт известен под названием т е о р е м ы о ц е л о ч и с л е н н о с т и : если пропускные способности дуг b t j целочисленны, то сущ ествует максимальный поток, который целочислен.— П р и м , п ерев .
8. МЕТОД РАССТАНОВКИ ПОМЕТОК |
145 |
это пропускная способность дуги, а второе — исходный поток по дугам. (Можно использовать в качестве исходного потока любые числа, удовлетворяющие условиям (1 ),
(2). В частности, можно было бы взять Хц = 0 для всех i, /.)
Ш а г |
1. |
Припишем узлу N s помет |
|
|||||||
ку [s+, оо]. Узел |
N s |
имеет |
2 соседних |
|
||||||
узла. |
Пометить |
N 4 мы не |
можем, так |
|
||||||
как bsl — xsl |
|
= |
1 |
— 1 = 0 , и нет дуго |
|
|||||
вого |
потока |
|
xis > |
0. |
Узлу N 2 припи |
|
||||
шем |
пометку |
[s+, |
1 1 , |
поскольку bs2 — |
Р и с. 8.4. |
|||||
— xs2 = 2 |
— |
1 |
= |
1 |
и s (2 ) = min [е (а), |
|||||
|
||||||||||
bs2 — |
= |
min (оо, |
1 ) = |
1 . |
|
|||||
Теперь узел N s помечен и просмотрен, a N 2 помечен и не про |
||||||||||
смотрен. |
|
имеет два непомеченных соседних узла, а именно N j |
||||||||
Узел N 2 |
и N t. Узел N t в данный момент не может быть помечен, а узел
Атj получает пометку [2~, 1], |
поскольку xi2 = 1 > |
0 и |
е (1) = |
|||||
= min (е (2), |
xl2] = min (1, 1) |
= |
1. |
Теперь |
узел |
N 2 |
помечен |
|
и просмотрен, a |
помечен и не просмотрен. Узел N { имеет толь |
|||||||
ко один соседний непомеченный узел, |
а именно N t. Узел N t дол |
|||||||
жен получить |
пометку [1 +, |
1 1 , |
поскольку |
е (t) |
= min [е (1 ), |
|||
•Ьи — xlt] = |
min [1 , 3 — 0 ] = |
1 . |
|
|
|
на рис. 8.5. |
||
Результат |
этой расстановки пометок изображен |
Так как узел Атt оказывается помеченным, то переходим к шагу 2.
Ш а г |
2. Так как пометка узла N t есть [1+, |
1], |
то увеличиваем |
xit на 1. |
В результате получаем x\t = ' xlt |
+ |
l = 0 - j ^ l = l . |
|
(2-,П |
|
|
(1+,
Переходим к узлу обладающему пометкой [2“, 1], и уменьшаем х12 на 1. Получаем х'12 = х12 — 1 = 1 — 1 = 0 . Переходим к узлу
N 2, имеющему пометку [s+, |
11, и прибавляем 1 к х ,г. Получаем: |
x's2 = xs2 + 1 = 1 + 1 == 2. |
Окончательный результат операции |
изменения потока изображен на рис. 8 .6 .
10 Т. Х у
146 |
|
ГЛ. 8. МАКСИМАЛЬНЫЙ ПОТОК |
|
Ш а г |
3. |
Приписываем пометку [s+, |
се] узлу N s. Теперь узлы |
N 1 и iV2 |
не могут быть помечены, и узел N t оказывается непоме |
||
ченным. |
Конец. |
|
|
Сделаем |
два замечания. Во-первых, |
мы увеличиваем поток |
(рис. 8.4), посылая единицу потока по следующему пу*ги, увеличи
вающему поток: N s, A s2, N 2, A i2, |
A iU N t. Если |
бы не было |
потока по дуге Л 12, то нельзя было бы послать поток |
из N 2 в Л+ |
потому что A i2 — ориентированная дуга. Но когда уже имеется ненулевой поток по дуге Л 12, можно послать поток из N 2 в N t, и в результате новый и прежний потоки по этой дуге взаимно уничтожатся.
Во-вторых, здесь получается |
минимальный разрез (X , X), |
|||||||||
где X |
— это единственный |
узел N s, а X — три узла N if N 2, N |
||||||||
Заметим, |
что (У, Y), |
где |
Y |
= { N t, |
N 2} — тоже |
минимальный |
||||
разрез |
с |
пропускной |
способностью, |
равной |
bsi |
+ b2l + |
b2t = |
|||
= 1 + |
0 |
+ 2 = 3. Здесь |
X с |
Y. |
Как уже |
отмечалось |
выше, |
алгоритм расстановки пометок всегда дает такой минимальный
разрез (X, X), что X — наименьшее среди упорядоченных по включению подмножеств узлов.
Если пропускные способности b(j не являются все целыми числами, то алгоритм может не быть конечным и может даже сходиться не к максимальному потоку. Такой пример построен Фордом и Фалкерсоном [67]. Это показывает, что метод расста новки пометок не эквивалентен симплекс-методу для задач линей ного программирования. Так как задача о потоке в сети является частным случаем задачи линейного программирования, а симплексметод работает при любых действительных числах, то должен существовать алгоритм решения потоковой задачи, в которой пропускные способности дуг являются любыми действительными числами.
Перейдем к рассмотрению такой модификации метода расста новки пометок, которая применима для любых неориентированных
сетей с действительными пропускными способностями. |
|
||
Ш а г |
1. |
Удалим из сети все дуги, для которых выполняется |
|
xtj = btj) |
такие дуги будем называть насыщенными |
потоком. |
|
(В самом начале нет насыщенных дуг, так как xi} = 0.) |
Перехо |
||
дим к шагу 2 . |
|
||
Ш а г |
2. |
Используя любые оставшиеся в сети дуги, |
находим |
с помощью метода расстановки пометок произвольный путь, уве личивающий поток; посылаем по нему максимально возможный поток. Если такой путь нашелся, 'то переходим к шагу 1; если же нет, переходим к шагу 3.
8.2. МЕТОД РАССТАНОВКИ ПОМЕТОК |
147 |
Ш а г 3. Восстанавливаем в сети все ранее удаленные дуги (т. е. все дуги, насыщенные потоком). Находим некоторый путь из N s в N t, увеличивающий поток, и посылаем по нему максималь но возможный поток. Если такой путь нашелся, то переходим к шагу 1 ; если же нет, то алгоритм закончен и найденный поток —
максимальный.
Докажем, что этот алгоритм конечен и дает максимальный поток. При каждом изменении потока на шаге 2 по крайней мере одна новая дуга оказывается насыщенной потоком. После того как шаги 1 и 2 будут повторены друг за другом некоторое конечное
число раз, из сети будет удалено такое количество насыщенных дуг, что уже нельзя будет на шаге 2 получить поток с большей
величиной. Если при этом на шаге 2 использовать метод расста новки пометок, то будет помечено некоторое множество узлов X,
а все такие дуги А г;-, что N t £ X , N j £ X , будут насыщены потоком. (Заметим, что поток может идти по дуге в любом направлении.) Величина потока при этом равна
|
2 |
_ х ц — |
2 |
_ Х м = |
2 |
_ Ь ц — |
2 |
h i 1)- |
JVj£X; N f i X |
N f i X , JVfe£X |
N £ X , N j £ X |
N f i X , |
X |
||||
После этого переходим к шагу 3 и восстанавливаем в сети все |
||||||||
насыщенные дуги. |
Теперь можно пометить любой узел N h, кото |
|||||||
рый принадлежал X на шаге 2 , |
если имеется дуга с xki > 0 , где |
|||||||
N г 6 |
X . Благодаря тому, |
что в сети восстановлены насыщенные |
||||||
дуги, |
узел N t попадет в множество X |
и величина потока в сети |
возрастет. Затем мы снова перейдем к шагу 1, и когда опять вер немся к шагу 3, величина потока в сети будет снова равна разности
2 Ъц — 2 bhi- Но величина потока при этом изменится, следова-
г ,3 Ь.,1
тельно, в этот раз на шаге 3 |
суммы 2 |
Ъц, 2 bkt берутся по другим |
множествам дуг (либо по |
i j |
k tl |
тем же |
самым множествам дуг, что |
и в предыдущий раз на шаге 3, но некоторые из них проходятся в противоположном направлении). Так как в сети имеется конеч ное множество дуг и каждая дуга может быть насыщена потоком
в одном из двух направлений, то величина 2 |
btj — 2 bhi |
может |
|
|
г ,3 |
k ,l |
|
*) Сумма 2 |
Ьц берется по тем дугам Aij, для которых Х г£Х, |
Nj £X, |
|
N j £ X |
|
|
|
н я ; у >0 . Сумма |
^ Ьм берется по тем дугам Aki, |
для которых |
N ^ ^ X , |
№
Ni £ X, и 0. —Прим, перев.
10*
148 ГЛ. 8. МАКСИМАЛЬНЫЙ ПОТОК
принимать конечное множество различных значений. Каждый раз, когда мы возвращаемся к операции 3, величина потока при
нимает одно из значений 2 |
Ьц — 2 ^ki- Поскольку каждый раз |
i j |
h , l |
величина потока возрастает, то ни одно из этих значений не повторяется дважды. Таким образом, алгоритм конечен.
Этот же алгоритм можно использовать и в сетях с ориентиро ванными дугами, но доказательство этого факта довольно громозд ко *). Трудность заключается в том, что при осуществлении про цедуры изменения потока на шаге 2 поток по некоторой ориенти
рованной дуге может взаимно уничтожиться с прежним, но ни одна дуга при этом не будет насыщена потоком. Поэтому нельзя утвер ждать, что на шаге 2 найдется по крайней мере одна новая дуга,
насыщенная потоком.
Теперь перейдем к изучению следующего вопроса: какое коли чество итераций в методе расстановки пометок требуется для нахождения максимального потока?
Каждый путь, увеличивающий поток, дает возможность увели чить величину потока по крайней мере на единицу. Если величина максимального потока равна v, то для нахождения максимального потока достаточно не больше чем v раз найти путь, увеличивающий поток. Предположим теперь, что мы умножили на 10 все пропуск ные способности дуг. Тогда величина максимального потока в новой сети будет равна 10и. Это означает, что для нахождения максимального потока в сети достаточно самое большее 1 0 ы раз
найти путь, увеличивающий поток. Следовательно, полезно было бы иметь такую верхнюю оценку количества итераций в процессе расстановки пометок, которая не зависела бы от величины макси мального потока, не известной до начала вычислений. Такая верхняя оценка была получена впервые Эдмондсом и Карпом 158]. Эта оценка справедлива и тогда, когда все пропускные способно сти дуг — действительные числа. Рассмотрим подробнее эти резуль таты 2).
Сделаем несколько замечаний и приведем модификацию метода расстановки пометок. Для, удобства будем считать, что сеть, имеющая п узлов, всегда содержит п (п — 1 ) дуг, хотя некоторые
дуги могут обладать пропускной способностью, равной, нулю. Если задан поток F в некоторой сети, будем использовать символ1*
1) Это утверждение не точно. Как показано |
в работе [17*], в ориентиро- |
1 ванных сетях с иррациональными пропускными |
способностями дуг рассма |
триваемый алгоритм может не быть конечным. В этой же работе приводится [ модификация алгоритма, которая уже применима для лю.бых ориентирован- \яы х сетей.— Прим, перев.
2) В переводе исправлены имеющиеся в оригинале погрешности и вне сены уточнения, содержащиеся в работе Эдмондса и Карпа [58*], появив шейся после выхода в свет данной книги.— Прим, перев.
|
8.2. МЕТОД РАССТАНОВКИ ПОМЕТОК |
149 |
|
N |
(F) для обозначения этой сети вместе с текущим в ней потоком F. |
||
В |
сети N (F) дуга |
может быть насыщена (х1} = |
Ьц), и тогда |
можно считать, что дуги А ц в сети «не существует», поскольку все
равно нельзя послать поток из узла N t в узел Nj |
по дуге A tj. |
Так как можно послать поток из N j в N t в сети N |
(F), то можно |
считать, что в N (F) имеется дуга Ац с пропускной способностью |
|
Ьц — %ц. Например, можно считать, что на рис. |
8.4 дуги A i2 |
не существует, а имеется дуга i 2) с пропускной способностью, равной 1. В дальнейшем, говоря о сети N (F), будем иметь в виду
Р и с . 8.7. Р и с . 8.8.
сеть, отличающуюся от исходной сети, в которой еще не было потока. Метод расстановки пометок, таким образом, порождает некоторую последовательность сетей: N (Fi), N (F2), . . ., N (Fm), где Fm — максимальный поток. Поуок Fk+l получается из пото ка Fk с помощью добавления в сеть N (Fh) некоторого пути, увели чивающего поток.
При описании метода расстановки пометок мы до сих пор не указывали, в каком порядке следует просматривать помеченные узлы. Будем теперь придерживаться правила «первым помечен ■— первым просмотрен». Так, в рассмотренном выше примере (рис. 8.4)
узел N z должен |
быть просмотрен |
перед |
узлом |
iVl5 так |
как N z |
||
помечен |
раньше, |
чем N t. При |
использовании |
правила |
«первым |
||
помечен |
— первым просмотрен» |
в |
методе |
расстановки |
пометок, |
каждый раз будет получаться увеличивающий поток путь, который содержит минимальное число дуг (если поток в сети еще не макси
мален) *). |
Сделаем еще одно уточнение. Если П 81, А 12, А 23, . . . |
|||
. . ., |
A ht — некоторый путь, увеличивающий поток, |
то определим |
||
е (/ + |
1 ) |
следующим образом: |
е (/ + 1 ) = min [е (j) b}, j+ 1 — |
|
— Xj, |
j+ 1 |
+ xj+i, J. При таком |
модифицированном |
определении |
пометки е (; + 1 ) по крайней мере одна дуга в пути, |
увеличиваю |
щем поток, окажется насыщенной потоком. Рассмотрим сеть, изображенную на рис. 8.7, где числа рядом с дугами означают
х) В гл. 10 будет рассмотрен алгоритм Дийкстры решения задачи о крат чайшем пути в сети. В случае когда длины всех дуг равны 1, он сводится
к правилу «первым помечен — первым просмотрен». Отсюда |
следует, что |
это правило приводит к пути, содержащему минимальное |
число дуг.— |
Прим, перев. |
|
150 |
ГЛ. |
8. МАКСИМАЛЬНЫЙ ПОТОК |
|
|
|
||||
их пропускные способности. |
Будем считать; что эта |
сеть есть |
|||||||
N (F0). Предположим, что единица потока направляется по пути |
|||||||||
A si, |
A i3, A 3t\ дуга А 13 оказывается насыщенной, и |
получается |
|||||||
сеть N (F]), изображенная на рис. 8 .8 . Мы считаем, что в этой |
|||||||||
сети |
дуги А 13 не существует, |
а имеется |
дуга А 31 с |
пропускной |
|||||
|
|
способностью, равной 1. Если напра |
|||||||
|
1,1 |
вить единицу потока по |
увеличиваю |
||||||
|
|
щему поток пути A s2, А аз, А 31, |
А ц , |
||||||
|
|
A it, |
то получится сеть |
N |
(F2), |
изо |
|||
3,1 |
1,0 |
3,1 браженная на рис. 8.9. |
В этой |
сети |
|||||
|
|
дуги |
А 31 |
не |
существует, |
а снова |
|||
|
|
появляется |
дуга A i3 с |
пропускной |
|||||
|
|
способностью, равной 1. |
Можно счи |
||||||
|
Р и с . 8.9. |
тать, |
что |
оказалась |
насыщенной |
||||
|
дуга |
A 3i в сети N (F2) |
на рис. 8 .8 . |
||||||
|
|
||||||||
|
|
Таким образом, видно, |
что каждый |
||||||
раз путь, увеличивающий поток, |
меняет ориентацию |
по крайней |
|||||||
мере у одной дуги из |
сети N |
(F). Этот результат сформулируем |
|||||||
в виде леммы. |
|
|
|
|
|
|
|
|
|
Л емма 8.1. Пусть |
N (F0), |
'N (i^ ), |
. . ., N (Fm) — произволь |
ная последовательность сетей. В сети N (Fh) найдется по крайней мере одна дуга, которая не содержится в N (.Fft+1), где Fk+i — поток, полученный из Fk с помощью добавления в сеть N (Fh)
пути, |
увеличивающего |
поток, причем г (/ + 1 ) = min [е (/), |
|
Ъ), j + i |
%}, j+ i |
Ej+i. |
/1- |
Назовем кардинальной длиной пути число дуг в этом пути.
Определим кардинальное расстояние между N s и N t в сети N (Fk)
как длину кратчайшего увеличивающего поток пути, ведущего из N s в N t в сети N (Fh). Если не существует пути, увеличивающего поток из N s в N t, то кардинальное расстояние между N s и N t полагаем равным оо. Будем обозначать кардинальное расстояние между N s и N t через lhst.
Заметим, что следует различать путь из N s в N t, увеличиваю щий поток, и цепь из N s в N t, по которой проходит поток (кото рую будем называть потоковой цепью). Например, на рис. 8 . 8
кратчайшая потоковая цепь N s, N и N 3, N t имеет кардинальную длину 3, в то время как кратчайший путь, увеличивающий поток, здесь такой: N s, N 2, N 3, N t, М4, N t (следовательно, кардинальное расстояние между N s и N t равно 5). На рис. 8.9 кратчайшая пото ковая цепь имеет кардинальную длину 3, а кардинальное рас стояние между N s и N t равно оо.
Определим кардинальное расстояние l\v между двумя узлами N u и N v в сети N (Fh) ■как длину кратчайшего увеличивающего поток пути, ведущего из N u в N v в сети N (Fh). Если такого пути не существует, то полагаем luv = оо.