Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
65
Добавлен:
19.05.2015
Размер:
722.94 Кб
Скачать

Алгоритм расстановки пометок для задачи о 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 и первой просмотрим вершину

  1. Множество есть .

Для пометкой будет (+

  1. Множество является пустым.Теперь вершины и помечены и просмотрены, а и помечены, но не просмотрены. Взяв для просмотра и повторяя шаг2, прейдем к следующим пометкам; для

пометкой будет (+ для пометкой будет

(+

Беря для просмотра , найдем, что никаких пометок расставить нельзя.

Продолжим просмотр с получим следующие потоки:

Переходим к шагам 4 и 5, получим:

x =

x =

x =

x =

x =

Получим следующие пометки вершин до их стирания на шаге 6:

() - насыщенная дуга.

Стираем пометки и возвращаемся к шагу 1 для второго прохода ,получим:

Шаг3. Пометкой для будет (+

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

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

Пометкой для будет (+,min,

Пометкой для будет (+

решена и просмотрена.

также помечена и просмотрена.

Пометкой для будет (+

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

Пометкой для будет (+

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

Пометки для

Шаги 4 и 5 .

Новые потоки увеличились следующим образом:

Все остальные значения потока не изменились. Новый вид потока и пометки вершин до стирания имеют вид:

- насыщенная дуга.

Далее:

( насыщенная дуга;

после третей итерации.

Далее:

после четвертой итерации.

Далее:

минимальный разрез

Поток - max поток со значением 29, а min разрез

17