УДК 519.1
Н.Н. ВОДОЛАЗОВ
ОБ ОСОБЕННОСТЯХ ПОТОКА В СЕТЯХ С БАРЬЕРНОЙ ДОСТИЖИМОСТЬЮ
Рассматривается задача о нахождении максимального потока в сетях с барьерной достижимостью при помощи модифицированного алгоритма Эдмондса-Карпа. Особенность предложенного алгоритма в том, что он позволяет находить поток в сетях, для которых разработанный ранее алгоритм [1] не находил решения. Ключевые слова: сеть, источник, сток, поток, блокирующий поток.
Введение. В классической постановке задачи стационарным потоком на графе G(U, V, j) называется отображение f : U ® R +, удовлетворяющее условиям:
ство дуг, выходящих из вершины и ; с(и) - пропускная способность дуги; £ - источник; t - сток.
Для решения этой задачи может быть применен симплекс-метод. Однако в 1956 г. Форд и Фалкерсон предложили более эффективный алгоритм решения задачи, основанный на поиске увеличивающих цепей из источника в сток. Эдмондс и Карп [2] в 1972 г. улучшили алгоритм Форда-Фалкерсона и получили алгоритм, время работы которого не зависело от пропускных способностей дуг.
Постановка задачи. Требуется найти максимальный поток в графе G(и, Vс дополнительным ограничением на пути частиц, которое в [1] названо барьерной достижимостью. Множество дуг графа и разбито на три непересекающихся подмножества: иН (нейтральные дуги), и+ (увеличивающие дуги) и иБ (барьерные дуги). С каждой частицей, проходящей по графу, связано целое число i - её барьерный уровень. Для частиц, выходящих из источника, он равен 0. Если барьерный уровень меньше некоторого заданного числа k , то при прохождении дуг из множества и + барьерный уровень увеличивается на 1, при прохо-
ждении дуг из множеств иН и и Б барьерный уровень не изменяется. Частица может проходить по дугам множества иБ только в случае, если её барьерный уровень равен к .
Существующее решение. Решение описанной задачи предложено в [1]. Для этого по исходному графу строится вспомогательный граф. Каждой вершине х исходного графа ставится в соответствие к + 1 вершина
(1)
0 < f (u ) < c(u ) ,
где 0 _ (v) - множество дуг, входящих в вершину V ; 0 + (v ) - множе-
Требуется максимизировать
вспомогательного графа , ^Х ^х (к). Каждой нейтральной дуге
(х, у) исходного графа ставится в соответствие к + 1 дуга вспомогательного графа вида (х(),у0)), і = 0,...,к (рис.1).
Хк^оук
Хк - Ук - 1
хх С^Оу!
Х0^-^0 у0
Рис.1. Преобразование нейтральных дуг
Каждой увеличивающей дуге исходного графа (х, у) ставится в соответствие к + 1 дуга вспомогательного графа: к дуг вида
(х(і),у(+!)) , і = 0,...,к - 1 и одна дуга (х(к),у(к)) (рис.2).
Хк^*°ук Хк - у к - 1
Рис.2. Преобразование увеличивающих дуг
Каждой барьерной дуге исходного графа ставится в соответствие одна дуга вспомогательного графа (х(к), у(к)) (рис.3).
хк^*Оук
Хк-1 _ ° ук -1
Х1 О О у1
ХоО О у0
Рис.3. Преобразование барьерных дуг
В соответствии с идеей, изложенной в [1], пропускная способность дуг вспомогательного графа не определена. Вместо этого определен максимальный поток по множеству дуг вспомогательного графа, который поставлен в соответствие дуге исходного графа (множеству связанных дуг). Следовательно, применить алгоритм Форда-Фалкерсона мы не можем.
В работе [1] авторами был развит новый подход к построению алгоритма. Его сущность состоит в том, что алгоритм ищет кратчайший простой путь на вспомогательном графе из источника в сток, по которому можно пустить увеличивающий поток. Поток увеличивается на некоторую величину, и пропускная способность множеств связанных дуг, через которые прошел увеличивающий путь, уменьшается на эту же величину. Таким об-
разом, в отличие от алгоритма Форда-Фалкерсона алгоритм, описанный в
[1], ищет не увеличивающую цепь, а увеличивающий путь. Ясно, что найденный поток будет неулучшаемым.
Приведенный ниже пример показывает, что неулучшаемый поток может быть не максимальным в случае, когда возможен блокирующий поток [3]. Блокирующий поток в [3] рассматривается как поток, для которого не существует увеличивающего пути из источника в сток. Надо сказать, в таких случаях (блокировки) алгоритм Форда-Фалкерсона находит выход, поскольку существует увеличивающая цепь. Рассмотрим пример.
Пример 1. Пусть дан граф G (рис.4).
СІ 0/1 Є 0/1
Рис.4. Нулевой поток на графе G
На рис. 4 источник - вершина £ , сток - вершина ґ . Первая цифра в записи 0/1 - поток по дуге, вторая - пропускная способность. Все дуги нейтральные и нет барьерных дуг, т.е. мы рассматриваем случай поиска
/- I —т— и и и и
потока в обычном графе. Тогда первый увеличивающий путь, найденный алгоритмом, будет проходить по вершинам £, а, f, ґ (рис.5).
СІ 0/1 Є 0/1 /
Рис.5. Блокирующий поток на графе G
Поток на рис. 5 - блокирующий, так как нет увеличивающего пути из источника в сток. Величина потока равна 1, максимальный поток, изображенный на рис. 6, равен 2.
З і/і е
і/і
Л
Рис.6. Максимальный поток на графе G
Таким образом алгоритм не находит максимальный поток для решения классической задачи. В случае с добавлением дополнительных ограничений на поток также возможно появление блокирующего потока. Предлагаемый алгоритм решения задачи. Для удобства будем рассматривать не суммарный поток частиц всех барьерных уровней через дугу, а поток частиц каждого барьерного уровня через дугу. Поэтому для поставленной задачи полагаем, что поток - отображение Л : и ® (R+ )к +1, т.е. поток ставит каждой дуге в соответствие вектор чисел, при этом і -я компонента вектора является потоком і -го барьерного уровня по дуге. Обозначим Л(и,и) і -ю компоненту вектора поток
ка по дуге (и,и) , а Л(и,и ) /і(и,и ).
і = 0
Условия (1) заменим на следующие условия:
X, /о (и) = X, /о (и) , V и е V,и Ф s,V Ф t;
ие ©_ (и )0 иН
ие© + (и )
X Л (и) +
ие©_ (и)пия
X Л_. (и) =
ие©_ (и)^и+
X Л (и)
ие©_ (и)
ие©_ (и)
"і = 1,..., к _ 1, V V е V ;
X л (и) + X Л-1 (и) + X л (и) + X л (и) = X л (и)
ие©_ (и)пия ие©_ (и)пи + ие©_ (и)ои+ ие©_ (и)пи£
V и е V ;(2)
Лі (и) > 0 , V і = 1,..., к — 1,V и е и ;
0 < Л (и) < с(и) .
X Л(и) _ X Л(и), т.е.
V
Требуется максимизировать
вме-
М€©_ (5) М€© + (5)
сто одного уравнения для каждой вершины в классическом случае, для данной задачи получается k + 1 уравнение для каждой вершины. Следует подчеркнуть, что эту задачу так же, как и классическую, можно решать симплекс-методом, но мы попытаемся изменить алгоритм Эдмондса-Карпа так, чтобы с его помощью можно было решать задачу о максимальном потоке на графе с дополнительными ограничениями на пути частиц. Модифицировав алгоритм Форда-Фалкерсона, Эдмондс и Карп предложили производить увеличение потока по кратчайшей увеличивающей цепи (считая, что все дуги имеют единичную длину) [2].
Для решения поставленной задачи предполагается помечать каждую вершину вектором из к + 1 метки, где к - максимальный барьерный уровень; каждая метка содержит информацию об увеличивающей цепи соответствующего барьерного уровня в данную вершину. Наш алгоритм на первом этапе решения использует в своей работе очередь помеченных вершин и вспомогательный алгоритм пометки вершин.
Алгоритм пометки вершин
На входе помеченная вершина х графа G . Алгоритм помечает смежные вершины и добавляет их в очередь помеченных вершин.
1. Для каждой дуги (ха) и (а, х) .
2. Для каждой метки (Ь>c, 3) і -го уровня вершины х .
a. Если мы рассматриваем дугу (ха) :
І. если Л(х>а) < с(х>а) , то обозначим
е = тіп(3, С(х, а) _ Л(х, а)) , 5 = "+ ", иначе переходим на шаг 2 и рассматриваем следующую метку.
b. Если мы рассматриваем дугу (а.х) :
і. если Л(ах) > 0, то обозначим
е = тіп(3, Лі (х, а)), 5 ="_", иначе переходим на шаг 2 и рассматриваем следующую метку.
С. Если (х*а) или (a, х) - нейтральная дуга и а не помечена на і -ом уровне, то:
i. помечаем вершину а на і -ом уровне меткой
(хе) ;
ii. если а не первая в очереди, то добавляем а в очередь помеченных вершин.
d. Если (х*а) - увеличивающая дуга, і < к и а не помечена на (і + 1) -ом уровне, то:
i. помечаем вершину а на (і + 1) -ом уровне меткой
(х,5,е) ;
ii. если а не первая в очереди, то добавляем а в очередь помеченных вершин.
e. Если (а.х) - увеличивающая дуга, і > 0 и а не помечена на (і _ 1) -ом уровне, то:
i. помечаем вершину а на (і _ 1) -ом уровне меткой
(хе) ;
ii. если а не первая в очереди, то добавляем а в очередь помеченных вершин.
£ Если (х,а) или (а,х) - барьерная дуга, і = к и а не помечена на к -ом уровне, то:
і. помечаем вершину а на к -ом уровне меткой
(хе) ;
и. если а не первая в очереди, то добавляем а в очередь помеченных вершин.
Алгоритм поиска максимального потока
1. Поиск увеличивающей цепи.
(~, ~, ¥ )
а. Помечаем источник вектором
, прочерк на і -
• • •
\ /
ом месте означает, что вершина не помечена на данном барьерном уровне.
Ь. Помещаем источник в очередь помеченных вершин.
С. Пока очередь просмотренных вершин не пуста: выбираем одну вершину х из очереди;
и. выполняем для нее алгоритм пометки вершин, если сток оказался помечен, то найдена увеличивающая цепь, переходим к шагу 2, иначе переходим к шагу ^ ш. если очередь просмотренных вершин пуста, то алгоритм завершает свою работу.
2. Поиск величины, на которую можно увеличить поток.
a. Восстанавливаем увеличивающую цепь в сток по меткам. При этом цепь может проходить по некоторым дугам несколько раз, но на разных барьерных уровнях.
b. Обозначим 1 величину е из метки стока.
С. Проходим по полученной цепи.
Пусть I - количество проходов цепи по дуге, при котором направления цепи и дуги совпадают, р - количество проходов, при котором направления противопо-
^ Ч > с (х, а) - /(X а)
ложны. Тогда, если I > Р и 1 ;---------,
I - р
г. С(х, а) - /(х, а)
то присвоим 1 ;-----------.
I - р
3. Увеличение потока. Проходим по всем дугам цепи:
а. Если направление цепи из источника в сток совпадает с направлением дуги, то увеличиваем поток по дуге на величину 1 .
Ь. Если направление дуги не совпадает с направлением цепи из источника в сток, то уменьшаем поток по дуге на величину 1 .
Отличие предлагаемого нами алгоритма от алгоритма Форда-Фал-керсона в том, что, во-первых, он работает с вектором меток, а во-вторых, требуется шаг 2 для определения максимального потока по цепи. Необходимость шага 2 вызвана тем, что увеличивающая цепь может проходить по дуге несколько раз на разных барьерных уровнях. Благодаря использованию очереди каждая увеличивающая цепь будет иметь минимальную длину.
Пример 2. Рассмотрим граф с источником 5 и стоком t (рис.7), пропускные способности всех дуг равны 1. Обозначим поток через дугу вектором, первая компонента которого - поток с нулевым барьерным уровнем, вторая - с первым.
С
Рис.7. Начальное состояние графа
Дуга (Ь, г) - барьерная, с барьерным уровнем 1, дуга (Ь, с) -увеличивающая, остальные дуги нейтральные. Применим наш алгоритм.
После первого шага вершины окажутся помеченными так, как изображено на рис.8.
с
Рис. 8. Состояние графа после первого шага
Таким образом, найдена увеличивающая цепь из источника в сток, проходящая по вершинам 5, а, Ь, с, а, Ь, t. При этом по дуге (а, Ь) цепь проходит дважды: сначала на первом барьерном уровне, затем на втором. Поэтому на втором шаге алгоритма величина, на которую по этой цепи можно увеличить поток, будет определена как 0,5 . После увеличения потока и повторения первого шага алгоритма граф будет выглядеть следующим образом (рис. 9).
С
Рис. 9. Состояние графа, при котором алгоритм завершает работу
Суммарный поток по дуге (а, Ь) равен 1, и эта дуга насыщена. Вершина с не может быть помечена, так как вершина а помечена на нулевом уровне, а поток по дуге (с, а) идет по первому уровню. Пометка вершины с и построение через нее увеличивающей цепи означали бы нарушение условий (2). Сток не может быть помечен, и поэтому алгоритм заканчивает свою работу. На основе примера 2 поток, получаемый предложенным алгоритмом, совпадает с потоком, получаемым симплекс-методом для системы (3).
£0 (s, а) ^ 0 £0 (а Ь) ^ 0
£ і (а, Ь) > О
£0 (Ь, с) ^ 0 £1 (Ь, с) > О
£0 (^ а) ^ 0 £1 (с, а) > 0
£0 (Ь О ^ 0
£1 (Ь, 1) > 0
£0 (^ а) £ 1 * £0 (а, Ь) + £ 1 (а, Ь) £ 1
£0 (Ь, с) + £1 (^ с) £ 1 Ґ0 (с, а) + £1 (с, а) £ 1 Ґ0 (Ь, 1) + Ґ1 (Ь, 1) £ 1
£0 (^ а) + £0 (^ а) = £0 (а Ь)
Ґ1 (с, а) = £1 (а, Ь)
£0 (а Ь) = £0 (Ь с)
£1 (а, Ь) = £1 (Ь, с) + £1 (Ь, 1)
£0 (с а) = 0
£0 (Ь, с) + £1 (Ь, с) = £1 (с, а) £0 (^, а) —— тах
(3)
Пример 3. Несмотря на то, что предлагаемый нами алгоритм может находить максимальный поток в сетях с возможной блокировкой, как в примере 1, существуют сети, для которых он не находит максимальное решение. В этом случае рассмотрим граф, изображенный на рис. 10.
Пропускные способности всех дуг равны 1. Дуги (Ъ, С) , (е, /) , (g, И) и (I, р) - увеличивающие, (Ъ, t) и (е, t) - барьерные, с барьерным уровнем 2, остальные дуги нейтральные. Поток по не помеченным
2
на рис.10 дугам считаем равным 0, общий поток на рис.10 равен 3 .
Установлено, что найденный симплекс-методом максимальный поток, равен 1. Поток образуется, если все дуги пути, проходящего по вершинам 5, d, е, §, И, k, I, р, а, Ъ, t, насыщены, а остальные дуги не нагружены. Так как на рис. 10 дуги ^, е) и (а, Ъ) насыщены, а (с, а), (/, d) и (р, а) не нагружены на нулевом барьерном уровне, то не существует не только увеличивающего пути, но и увеличивающей цепи из источника в сток. Следовательно, предложенный алгоритм не может найти максимальный поток на этом графе.
Выводы. Предложенный нами алгоритм основан на идее Форда-Фалкерсо-на нахождения увеличивающих цепей. Ранее нами было показано, что для поставленной задачи с барьерными ограничениями существуют блокирующие потоки - потоки, которые не максимальны, но для них не существует увеличивающей цепи. Из примера 3 видно, что алгоритм, основанный на поиске увеличивающей цепи, не может найти максимальный поток в сети на рис. 10. Отличие данной блокировки от блокировки, рассмотренной в
[2], состоит в том, что блокировка в [2] представлена как отсутствие увеличивающего пути на графе без дополнительных ограничений на пути частиц. Тем не менее, решать эту задачу возможно, применяя симплекс-метод к системе уравнений и ограничений (2).
Автор выражает благодарность профессору Я.М.Ерусалимскому за постановку задачи.
Библиографический список
1. Ерусалимский Я.М., Скороходов В.А. Потоки в сетях со связанными дугами./ Я.М.Ерусалимский, В.А.Скороходов. // Изв. вузов. Сев.-Кав. регион. Естественные науки, 2003; прил. № 8. - С. 9-
12.
2. Edmonds Jack, Karp Richard M. Theoretical Improvements in Algorithmic Efficiency for Network Flow Problems.//Journal of the Association for Computing Machinery. - Vol. 19. - No. 2, April 1972, -P. 248-264.
3. Ning Xuanxi, Ning Angelika The Blocking Flow Theory and its Application to Hamiltonian Graph Problems. Germany,Aachen: Shaker Verlag GmbH, 2006. -249p.
Материал поступил в редакцию 17.05.08.
N.N. VODOLAZOV ON THE FLOW PECULIARITY IN NETWORK WITH BARRIER REACHABILITY
The problem of finding maximal flow in networks with barrier reachability is considered. It is shown that existing algorithm for solution this problem can't find solution for all networks. New algorithm is suggested.
ВОДОЛАЗОВ Николай Николаевич (р. 1984), аспирант первого года обучения факультета математики, механики и компьютерных наук Южного федерального университета. Окончил ЮФУ (2006), магистратуру (2007). Научные интересы: теория графов и её приложения.