Алгоритм расстановки пометок для задачи о max (от s и t) потоке.
А. Расстановка пометок.
Вершина может находиться в одном из 3 состояний : вершине приписана пометка и вершина присмотрена (т.е. она имеет отметку и не смежные с ней вершины обработаны), вершина не имеет пометки. Пометка произвольной вершины состоит из 2-х частей и имеет 1 из 2 видов (+ или (-. Часть + пометки 1-го типа означает , что поток допускает увеличение вдоль дуги (Часть - пометки другого типа означает что поток может быть уменьшен вдоль дуги (В обоих случаях задает max величину дополнительного потока, который протекает от s к вдоль построенной аугментальной цепи потока . Присвоение пометки вершине соответствует нахождению аугментальной цепи потока из s к все вершины не имеют пометок.
Шаг1 Присвоить вершине s пометку (+s, ). Вершине s присвоена пометка, и она просмотрена, все остальные без пометок.
Шаг2 Взять некоторую непросмотренную вершину с пометкой: пусть ее пометка будет (,.
(1) Каждой непомеченной вершине для которой присвоить пометку (- где = min
(2) Каждой непомеченной вершине для которой , присвоить пометку
( - где = min [
( теперь вершину и имеем и просмотрим , а вершин пометки которые присвоены в (1) и(2) , являются непросмотреными) как-либо обозначим, что просмотрена.
Шаг3. Повторять шаг 2 до тех пор пока либо вершина t будет помечена, и тогда перейти к шагу 4, либо t не помечен и никаких других пометок негде расставить; в этом случае алгоритм работу заканчивает с max вектором поток .
Отметим, что множество помеченных вершин, а -множество непомеченных, то (- минимальный разрез.
Б. поток.
Щаг4. Пусть x=t и перейти к шагу 5.
Шаг5. (1) Если пометки в в вершине x имеют вид (+Z,), то и изменить поток вдоль дуги(Z, X) c на .
(2)Если пометки в X имеют вид (-Z,), то изменить поток вдоль дуги (X,Z) с на .
Шаг6. Если Z=S, то стереть все пометки и вернуться к шагу 1, чтобы начать вновь рставлять пометки , но не используя уже улучшенный поток, найденный на шаге 5.Если Z, то взять X=Z и вернуться к шагу 5.
Пример задачи о max потоке.
Пусть дан граф G (направленный, без циклов, нумерация вершины от меньшего номера к большему).
Здесь источник, сток. Найти max поток от к .
Начальный поток – нулевой на всех дугах.
1 Итерация ( итерация состоит из 6 шагов, кол-во итераций имеет одинаковый порядок с размерностью задачи, определяемой шагом вершин-дуг графа).
Шаг1. Припишем пометку (+
Шаг2. Мн-во вершин, инцидентных
Шаг3. { Дуги ненасыщенны (есть возможность увеличения потока по дуге).
припишем пометку : min[14-0]=(+;
припишем пометку;
Итак, помечена и просмотрена, и помечены и не просмотрены. Остальные вершины не помечены. Повторяем шаг2 и просмотрим вершину . Мн-во вершин, инцидентных ненасыщенными дугами и не помеченные {}.
Для пометка будет (+=( +Теперь и помечены и просмотрены, а и помечены и не просмотрены. Берем и повторяем шаг2.
Для пометкой будет (+=(+.
Для пометкой будет ( ;
Для пометок расставить нельзя. (хотя от в принципе могли пойти к , а не к ).
Для =(+
Для ;
Для
Перейдем к шагам 4 и 5.
X=
X=;
X=
X=
X=
Итак, получим поток величин 4 следующего вида (рис1), дуга ()
насыщеннее.
Стираем пометки и возвращаемся к шагу1 2ой итерации.поток после 1-й итерации.
Итерации 2 .
Пометка для
Пометка для
Пометка для
помечена и просмотрена.
Пометка для : (+ помечена и просмотрена.
Пометка для
Пометка для будет = ( помечена и просмотрена.
Пометка для помечена и просмотрена.
Пометка для ; помечена и просмотрена.
Пометка для
Шаги 4 и 5.
Получим новые потоки:
;
Получим дугу (насыщенную.
Итерация 3.
Пометка для
Для
Для получена и просмотрена .
Для
Для
Для
Для
Для
Для
Новые потоки :
Получили (- насыщенную дугу.
Итерация 4.
Пометка для
Пометка для
Пометка для
Пометка для
Пометка для
Пометка для
не получена и не может быть получена.
Новые потоки ;
На этой итерации насыщенных дуг не появилось.
рис 3.
Итерация 5.
Пометка для
Пометка для
Пометка для
Пометка для
Пометка для
Пометки для и не отмечены.
Пометка для
Пометка для
Новые потоки ;
Появилась насыщенная дуга (
Итерация 6.
Пометка для
Пометка для
Пометка для
не может быть помечена.
не может быть помечена.
,,-нельзя пометить.
Полученный поток –max величин 29,а min разрез имеет вид;
Величина min разреза =10+4+8+7=29= величине max потока.
Вершина 9 не помечена и никаких других пометок нельзя расставить.
Min разрез отделяет множество помеченных вершин от непомеченных
Пример.
-источник;
-сток;
Пропускные способности дуг указаны на рисунке.
Найти max поток от к .
Начальный поток – с нулевыми значениями на всех дугах.
Шаг 1. Припишем пометку (+
Шаг 2. (1) множество вершин есть
Вершине приписана пометка т.е.;
Вершине ,т.е.;
2.Множество вершин не помечена. является пустым.
Итак, помечена и просмотрена, и помечены и не просмотрены, а все остальные вершины не помечены.
Повторим шаг2 и первой просмотрим вершину
-
Множество есть .
Для пометкой будет (+
-
Множество является пустым.Теперь вершины и помечены и просмотрены, а и помечены, но не просмотрены. Взяв для просмотра и повторяя шаг2, прейдем к следующим пометкам; для
пометкой будет (+ для пометкой будет
(+
Беря для просмотра , найдем, что никаких пометок расставить нельзя.
Продолжим просмотр с получим следующие потоки:
Переходим к шагам 4 и 5, получим:
x =
x =
x =
x =
x =
Получим следующие пометки вершин до их стирания на шаге 6:
() - насыщенная дуга.
Стираем пометки и возвращаемся к шагу 1 для второго прохода ,получим:
Шаг3. Пометкой для будет (+
помечена и просмотрена.
помечена и просмотрена.
Пометкой для будет (+,min,
Пометкой для будет (+
решена и просмотрена.
также помечена и просмотрена.
Пометкой для будет (+
помечена и просмотрена.
Пометкой для будет (+
помечена и просмотрена.
Пометки для
Шаги 4 и 5 .
Новые потоки увеличились следующим образом:
Все остальные значения потока не изменились. Новый вид потока и пометки вершин до стирания имеют вид:
- насыщенная дуга.
Далее:
( насыщенная дуга;
после третей итерации.
Далее:
после четвертой итерации.
Далее:
минимальный разрез
Поток - max поток со значением 29, а min разрез