Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Поиск максимального потока. 1 страница




Пусть задана сеть S. Введём важное понятие разреза сети. Разрезом сети называется та-кое множество С дуг сети S, после удаления которых сеть распадается на несколько изолиро-ванных друг от друга частей, так что источник x 1 и сток xn оказываются в разных частях, при-чём ни одно подмножество С этим свойством не обладает.

Пример 4. В сети, показанной на рис.2, множество дуг { v 4, v 5, v 6} образует разрез; разрез образуют также множества дуг { v 6, v 7, v 8} и { v 4, v 5, v 7, v 9} (все эти разрезы показаны на рис.6). Множество дуг { v 1, v 5, v 6, v 8} разреза не образует (см. рис.7). Дуги, образующие указанные мно-жества, на рис.6 и 7 отмечены штриховкой ■

Рис.6 Рис.7   Рис.8

Разрезы удобно изображать также линиями (не обязательно прямыми), «разрезающими» соответствующие дуги. На рис.8 показан разрез { v 6, v 7, v 8}. Дуги относительно разреза «ведут себя» по-разному. Обозначим через Аs множество вершин, каждая из которых может быть сое-динена неориентированным путём с источником, через Аt - множество остальных вершин гра-фа, которые соединяются неориентированным путём со стоком.

Пример 4. Для разреза { v 6, v 7, v 8}, показанного на рис.6 b и 8

Аs = { x 1, x 2, x 3, x 4}, Аt = { x 5, x 6};

для разреза { v 4, v 5, v 6} (рис.6 а)

Аs = { x 1, x 2, x 3}, Аt = { x 4, x 5, x 6} ■

Легко понять, что каждая дуга разреза соединяет между собой вершины, лежащие в раз-ных множествах: одна в Аs, а другая в Аt. Дуга v называется прямой дугой разреза, если она выходит из Аs и входит в Аt; обратной, если она выходит из Аt и входит в Аs. В разрезе { v 6, v 7, v 8} дуги v 6 и v 8 - прямые, а дуга v 7 - обратная. Далее разрезы будем обозначать латинскими буквами A, B,....

Пусть u - поток в сети, Р (u) - величина этого потока. Потоком u (A) через разрез A назы-вается число, равное сумме потоков uj во всех прямых дугах разреза A минус сумма потоков uj во всех обратных дугах разреза A.

Утверждение 2. Для любого разреза A

u (A) = Р (u). (7)

Содержательно это утверждение понятно: все, что «вытекает» из источника, проходит по сети и «втекает» в сток. Это же количество продукта протекает через любой разрез. Поэтому надо сложить все, что течёт в нужном направлении (учтя с обратным знаком то, что течёт в противоположном направлении, т.е. по обратным дугам).

Пропускной способностью с (A) разреза A называется сумма пропускных способностей всех его прямых дуг. Ясно, что для любого разреза A и любого потока в сети u

u (A) ≤ с (A). (8)Действительно, сумма потоков в прямых дугах разреза не превосходит с (A); потоки же в об-

ратных дугах входят в u (A) со знаком минус, откуда сразу следует (8).

Разрез A, пропускная способность которого с (A) минимальна (минимум берется по всем разрезам сети S), называется минимальным разрезом. Из определений минимального разреза, максимального потока и формул (7) и (8) следует, что максимальный поток в сети не превосхо-дит пропускной способности минимального разреза. Гораздо более сложным является следую-щее утверждением

Утверждение 3. Максимальный поток равен пропускной способности минимального раз-реза ■

Алгоритм поиска потока в сети, для которого выполняется указанное в утверждении 3 ра-венство, излагается далее.

Пример 6. Найдем минимальные разрезы (и тем самым величины максимальных потоков) в нескольких простых сетях. В сети рис.1 минимальный разрез образует дуги v 1 и v 2, выходящие из источника x 1. Его пропускная способность равна 4-ём. В сети рис.2 минимальным является разрез { v 6, v 7, v 8}, показанный на рис.6 b и 8. Его пропускная способность равна 3. Обратим вни-мание, что дуга v 7 (с пропускной способностью 5) здесь не учитывается, поскольку она является обратной дугой этого разреза. В сети рис.9 минимальный разрез указан линией. Его пропускная способность равна 3. В этом разрезе всего три дуги являются прямыми, остальные - обратны-ми.

Рис.9 ■

4.1. Алгоритм Форда-Фалкерсона (АФФ). Перейдем к изложению алгоритма, предло-женному американскими математиками Фордом и Фалкерсоном в 1945г. (впервые опубликован в 1951г.). Он находит поток u с максимальной величиной Р (u), т.е. решает задачу (1) - (3). В основе этого алгоритма лежит переход от уже построенного потока u к новому потоку u', тако-му, что Р (u') > Р (u). Если такой переход оказывается невозможным, то это значит, что поток u является решением исходной задачи (т.е. поток u уже является максимальным).

Алгоритм перехода от потока u к новому потоку u' состоит из четырёх этапов:

1. Построение меток у вершин сети (исходя из заданного потока u).

2. Построение так называемого увеличивающего пути между источником и стоком (ис-ходя из построенных на этапе 1 пометок).

3. Вычисление инкремента найденного увеличивающего пути (исходя из самого пути и заданного потока u).

4. Построение нового потока u' (исходя из заданного потока u, построенного на этапе 2 увеличивающего пути и вычисленного на этапе 3 инкремента) ■

Наиболее важным и сложным этапом является этап 1. Рассмотрим его отдельно, учитывая, в частности, то обстоятельство, что расстановка пометок у вершин используется в самых разно-образных задачах, связанных с графами (см., например, раздел 6-4.1).

1. Алгоритм расстановки меток. В процессе работы этого алгоритма каждая вершина сети находится в одном из следующих трёх состояний:

1. Не помечена.

2. Помечена и не просмотрена.

3. Помечена и просмотрена.

Каждая вершина может перейти из состояния с мéньшим номером в состояние с бóльшим номером (не помеченная вершина может стать помеченной и не просмотренной; помеченная и не просмотренная вершина может стать помеченной и просмотренной). Обратные переходы, как и изменение полученных меток, невозможны. Как и во всех других алгоритмах, при отсутс-твии явного указания после проверки условия всегда выполняется следующий шаг.

0. Инициализация. Источник x 1 получает метку 0; вершина x 1 объявляется помеченной и не просмотренной; все остальные вершины объявляются не помеченными.

1. Из множества помеченных и не просмотренных вершин произвольно выбираем любую. Пусть это будет вершина xi.

2. Помечаем индексом i все не помеченные ранее вершины x, обладающие следующим свойст-вом: существует дуга vj, ведущая из хi в x, для которой uj < cj (говорят, что дуга vj не насыщена в прямом направлении). Вершина x объявляется помеченной и не просмотренной.

3. Если после выполнения шага 2 сток xn оказывается помеченным, алгоритм 1 расстановки по-меток завершает работу и следует переход к описываемому далее алгоритму 2 построения уве-личивающего пути.

4. Помечаем индексом i все не помеченные ранее вершины x, обладающие следующим свойст-вом: существует дуга vj, ведущая из x в хi, для которой uj > 0 (говорят, что дуга vj не насыщена в обратном направлении). Вершина x объявляется помеченной и не просмотренной.

5. Вершина xi объявляется помеченной и просмотренной.

6. Если текущее множество помеченных и не просмотренных вершин не пусто, то переходим к шагу 1.

7. АФФ завершает работу. Рассматриваемый в качестве исходного для алгоритма 1 расстановки меток поток u является искомым максимальным потоком

При реализации алгоритма целесообразно описывать сеть таблицей вида следующей таб-лицы 1. Таблица содержит n × n ячеек, каждая из которых состоит из двух клеток (напомним, что через n обозначено число вершин сети). Ячейка таблицы с номером (i, j), находящаяся на пере-сечении i -ой строки и j -ого столбца, делится на две клетки – левую и правую – и заполняется только в том случае, если в сети есть дуга, ведущая из вершины i в вершину j. Поскольку по определению потоковой сети из стока ни одна дуга не выходит, то последняя строка таблицы остаётся незаполненной. Поэтому она будет использоваться другим образом: в каждую её ячей-ку с номером j будет записываться текущее состояние вершины j (в левую клетку) и её метка (в правую клетку). Состояния вершин и метки определены при описании алгоритма. В основной части таблицы размера (n −1)× n в левую клетку ячейки (i, j) записывается поток по дуге (i, j), в правую – пропускная способность этой дуги. В отличие от состояний вершин, эти величины в процессе работы алгоритма расстановок меток не меняются.

Таблица 1. Общий вид таблицы для алгоритма расстановки меток

      • • • j • • • n
        • • •    
•••       • • •    
i • • • • • • • • • u c • • • • • •
•••       • • •    
n –1       • • •    
  σ 1 μ 1 • • • • • • σj μj • • • σn μn
                   

Если j – номер вершины, выбираемой на шаге 1, то при выполнении шага 2 просматрива-ются все ячейки таблицы, находящиеся в j -ой строке. По построению таблицы, заполненным ячейкам соответствуют вершины, в которые ведёт дуга из вершины j. Для каждой из них дела-ются операции шага 2 алгоритма. Затем (если следует переход на шаг 4) на шаге 4 просматрива-ются все ячейки таблицы, находящиеся в j -ом столбце. Для заполненных ячеек делаются опера-ции шага 4 алгоритма. Заметим, что ячейки (j, j) в таблице 1 при j < n никогда не заполняются, поскольку дуг вида (j, j), т.е. петель при вершине, в потоковых сетях не бывает. Ячейка (n, n) в последней строке содержит информацию, относящуюся к самой вершине n.

После изменения состояний и меток вершин в соответствии с шагами 2 и 4 вновь выбира-ется одна из вершин с состоянием 2 (если таковая существует) и выполнение алгоритма про-должается. Важно, что после инициализации, т.е. начального заполнения таблицы, рисунком, изображающим сеть, можно не пользоваться: таблица содержит всю необходимую информа-цию.

Пример 7. Применим алгоритм 1 расстановки пометок для сети, показанной на рис.2 и для удобства дальнейшего изложения перерисованной здесь. В качестве исходного рассмотрим

поток u = (2, 0, 1, 1, 1, 0, 0, 2, 0) (см. пример 2). При «ручной» реализации алгоритма воспользу-емся описанной непосредственно перед данным примером таблицей типа 1.

Таблица 2. Инициализация для расстановки пометок по заданному потоку

             
                 
                 
                 
               
                 
                         
                         

При инициализации таблицы 1, в соответствии с алгоритмом расстановки пометок, вер-шина 1 (источник) объявляется помеченной и не просмотренной (состояние 2), а все остальные вершины объявляются непомеченными (состояние 1). Метки при инициализации не определя-ются. В левую клетку ячейки (i, j) запишем поток по дуге (i, j), в правую – ограничение в ней. Таким образом, в таблице 1 представлен результат инициализации, и в этой таблице собрана вся необходимая для дальнейшего информация.

Итерация 1. Результаты итерации записываются в таблицу 2.1, которая сначала является просто копией таблицы 2. Выбирается любая помеченная и не просмотренная вершина в состо-янии 2. Таковая имеется только одна – вершина 1, поэтому она и выбирается. Далее, в соответс-твии с алгоритмом 1, рассматриваются все вершины, в которые ведут дуги из вершины 1. Этим вершинам соответствуют заполненные ячейки 1-ой строки: 2-ая и 3-ья. Поскольку в обеих ячей-ках число в левой клетке меньше числа в правой клетке, то это и значит, что обе дуги: v 1 = (1, 2) и v 2 = (1, 3) не насыщены в прямом направлении. Поэтому, в соответствии с алгоритмом, вер-шины 2 и 3 получают метку 1 и становятся отмеченными, но не просмотренными, т.е. перехо-дят из состояния 1 в состояние 2, что и отмечается в таблице 2.1. Далее, в соответствии с шагом 4 алгоритма, надо проверить вершины, из которых ведут дуги в вершину 1. Но поскольку за-полненных ячеек в 1-ом столбце таблицы 2.1 нет, то, значит, нет и таких вершин, и все опера-ции шага 4 просто не выполняются. Для завершения итерации осталось, в соответствии с шагом 5, перевести вершину 1 из состояния 2 в состояние 3 и отметить это в таблице 2.1.

Таблица 2.1.Итерация 1 расстановки пометок по заданному потоку

             
                 
                 
                 
               
                 
                         
                         

Итерация 2. Результаты итерации записываются в таблицу 2.2, которая сначала является просто копией таблицы 2.1. Выбирается любая помеченная и не просмотренная вершина (т.е. в состоянии 2). Таковых имеется две – вершины 2 и 3. Поскольку можно выбирать любую, для определённости здесь и далее будем выбирать вершину с минимальным номером. Таковой яв-ляется вершина 2. Далее, в соответствии с алгоритмом 1, рассматриваются все вершины, в кото-рые ведут дуги из вершины 2. Этим вершинам соответствуют заполненные ячейки 2-ой строки: 3-ья и 4-ая. Вершина 3 уже помечена (находится в состоянии 2) и, в соответствии с описанием шага 2, здесь не рассматривается. Вершина 4 ещё не помечена (находится в состоянии 1) и по-ток (1) в дуге (2, 4) меньше ограничения (12). Поэтому, в соответствии с шагом 2, вершина 4 по-лучает метку 2 и переходит в состояние 2 (она объявляется помеченной и не просмотренной). Далее, в соответствии с шагом 4 алгоритма, надо проверить вершины, из которых ведут дуги в вершину 2. Таковой является только вершина 1, которой соответствует единственная заполнен-ная клетка во 2-ом столбце. Но поскольку вершина 1 помечена, то операции шага 4 просто не выполняются. Для завершения итерации осталось, в соответствии с шагом 5, перевести верши-ну 2 из состояния 2 в состояние 3 и отметить это в таблице 2.2.

Таблица 2.2.Итерация 2 расстановки пометок по заданному потоку

             
                 
                 
                 
               
                 
                         
                         

Итерация 3. Результаты итерации записываются в таблицу 2.3, которая сначала является просто копией таблицы 2.2. Выбирается любая помеченная и не просмотренная вершина в со-стоянии 2. Таковых имеется две – вершины 3 и 4. Выберем вершину 3 (как имеющую мéньший номер). Далее, в соответствии с алгоритмом 1, рассматриваются все вершины, в которые ведут дуги из вершины 3. Этим вершинам соответствуют заполненные ячейки 3-ьей строки: 4-ая и 5-ая. Вершина 4 уже помечена (находится в состоянии 2) и, в соответствии с описанием шага 2, здесь не рассматривается. Вершина 5 ещё не помечена (находится в состоянии 1) и поток (0) в дуге (3, 5) меньше ограничения (1). Поэтому, в соответствии с шагом 2, вершина 5 получает метку 3 и переходит в состояние 2 (она объявляется помеченной и не просмотренной). Далее, в соответствии с шагом 4 алгоритма, надо проверить вершины, из которых ведут дуги в вершину 3. Таковыми являются вершины 1 и 2, которым соответствуют заполненные ячейки в 3-ем стол-бце. Но поскольку вершины 1 и 2 помечены, то операции шага 4 просто не выполняются. Для завершения итерации осталось, в соответствии с шагом 5, перевести вершину 3 из состояния 2 в состояние 3 и отметить это в таблице 2.3.

Таблица 2.3.Итерация 3 расстановки пометок по заданному потоку

             
                 
                 
                 
               
                 
                         
                         

Итерация 4. Результаты итерации записываются в таблицу 2.4, которая сначала является просто копией таблицы 2.3. Выбирается любая помеченная и не просмотренная вершина в со-стоянии 2. Таковых имеется две – вершины 4 и 5. Выберем вершину 4 (как имеющую мéньший номер). Далее, в соответствии с алгоритмом 1, рассматриваются все вершины, в которые ведут дуги из вершины 4. Этим вершинам соответствуют заполненные ячейки 4-ьей строки. Таковой является только 6-ая ячейка. Вершина 6 ещё не помечена (находится в состоянии 1), но поток (2) в дуге (4, 6) равен ограничению (2) в этой дуге. Поэтому, в соответствии с шагом 2 алгоритма, никаких меток не ставится. Далее, в соответствии с шагом 4 алгоритма, надо прове-рить вершины, из которых ведут дуги в вершину 4. Таковыми являются вершины 2, 3 и 5, кото-рым соответствуют заполненные ячейки в 4-ем столбце. Но поскольку все эти вершины уже по-мечены, то операции шага 4 просто не выполняются. Для завершения итерации осталось, в со-ответствии с шагом 5, перевести вершину 4 из состояния 2 в состояние 3 и отметить это в таб-лице 2.4.

Таблица 2.4.Итерация 4 расстановки пометок по заданному потоку

             
                 
                 
                 
               
                 
                         
                         

Итерация 5. Результаты итерации записываются в таблицу 2.5, которая сначала является просто копией таблицы 2.5. Выбирается любая помеченная и не просмотренная вершина в со-стоянии 2. Таковой является единственная вершина 5. Далее, в соответствии с алгоритмом 1, рассматриваются все вершины, в которые ведут дуги из вершины 5. Этим вершинам соответст-вуют заполненные ячейки 5-ой строки. Таковыми является 4-ая и 6-ая ячейка. Вершина 4 уже помечена, так что она не рассматривается. Вершина 6 ещё не помечена (находится в состоянии 1), и поток (0) в дуге (5, 6) меньше ограничения (4) в этой дуге. Поэтому, в соответствии с ша-гом 2 алгоритма, вершина 6 получает метку 5 и объявляется помеченной и не просмотренной, т.е. переходит в состояние 2, что и отмечается в таблице 2.5. Далее, в соответствии с шагом 3, алгоритм прекращает работу, поскольку сток – вершина 6 – теперь помечен.

Таблица 2.5.Итерация 5 расстановки пометок по заданному потоку

             
                 
                 
                 
               
                 
                         
                         

Задание 2. Применить алгоритм расстановки меток ко всем потокам из задания 1 (см. при-мер 7) ■

Рассмотрим теперь алгоритмы 2 - 4 по отдельности.

2. Алгоритм построения увеличивающего пути. Алгоритм 2 начинает работу, когда сток сети помечен.

1. Концом пути p является сток n.

2. Пусть уже построен путь от некоторой вершины x до стока n. Пусть i - метка у вершины x. Тогда предыдущей вершиной пути p является вершина i.

3. Если вершина i является источником, то искомый путь p построен; переходим к алгоритму 3 вычисления инкремента пути p. В противном случае возвращаемся на шаг 2 ■

Пример 8. Применим алгоритм 2 построения увеличивающего пути для сети с метками, представленными в таблице 2.5. В соответствии с алгоритмом 2 путь p заканчивается в стоке 6. Поскольку у вершины 6стоит метка 5, предыдущей вершиной пути p является вершина 5. Предшествующей 5 вершиной является вершина 3, предшествующей 2 – источник 1. Поэтому сам увеличивающий путь от источника к стоку оказывается таким: 1→3→5→6 ■





Поделиться с друзьями:


Дата добавления: 2016-10-07; Мы поможем в написании ваших работ!; просмотров: 607 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Самообман может довести до саморазрушения. © Неизвестно
==> читать все изречения...

2514 - | 2363 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.