Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курс_заочн(27 вар).doc
Скачиваний:
79
Добавлен:
21.12.2018
Размер:
444.93 Кб
Скачать

Построения полного потока в сети

Данные: транспортная сеть D, заданная матрицей пропускных способностей дуг.

Результат: полный поток в сети.

  1. Полагаем для любой дуги xХ (x) = 0 ( начинаем с нулевого потока ).

  2. Полагаем D* = D.

  3. Удаляем из орграфа D* все дуги, являющиеся насыщенными при потоке  в транспортной сети D. Полученный орграф снова обозначим через D*.

  4. Ищем в D* простую цепь  из v1 в vn . Если такой цепи нет, то  - искомый полный поток в транспортной сети D. В противном случае переходим к шагу 5.

  5. Увеличиваем поток (x) по каждой дуге x из  на одинаковую величину a>0 такую, что, по крайней мере, одна дуга из  окажется насыщенной, а потоки по всем остальным дугам из  не превышают их пропускных способностей. При этом величина потока  также увеличится на a, а сам поток  в транспортной сети D остается допустимым. После этого перейдем к шагу 3.

        1. Максимальный поток

Поток  называется максимальным, если его величина принимает максимальное значение по сравнению с другими допустимыми потоками в транспортной сети D. Максимальный поток всегда является полным (обратное, вообще говоря, неверно).

Введем для заданной транспортной сети D и допустимого потока  в этой сети орграф приращений I(D,), имеющий те же вершины, что и сеть D. Каждой дуге x = (v,w)  X транспортной сети D в орграфе приращений I(D, ) соответствуют две дуги: x и x* = (w,v) – дуга, противоположная по направлению дуге x. Припишем дугам x и x* орграфа приращений I(D, ) длину l:

0, если (x) < c(x),

l(x) =

, если (x) = c(x),

0, если (x) > 0,

l(x*) =

, если (x) = 0.

А л г о р и т м

Построения максимального потока

Данные: транспортная сеть D, заданная матрицей пропускных способностей дуг.

Результат: максимальный поток в сети.

  1. Полагаем i = 0. Пусть 0 – любой допустимый поток в транспортной сети D (например, полный или нулевой).

  2. По сети D и потоку i строим орграф приращений I(D, i).

  3. Находим простую цепь i, являющуюся минимальным путем из v1 в vn в нагруженном орграфе I(D, i) (можно использовать любой описанный выше алгоритм). Если длина этой цепи равна , то поток i максимален и работа алгоритма заканчивается. В противном случае увеличиваем поток вдоль цепи i на максимально допустимую величину ai > 0, где aiZ (прибавляя ее для каждой дуги xX, через которую проходит цепь i, к уже имеющейся величине потока по дуге x, если дуга x входит в i, и вычитая, если дуга x* входит в i), такую, что при этом сохраняется условие допустимого потока. В результате меняется поток в транспортной сети D, т.е. от потока i переходим к потоку i+1, который является допустимым, и при этом величина его увеличивается на ai. Присваиваем i = i + 1 и переходим к шагу 2.

Алгоритм меток для нахождения максимального потока

Рассмотрим другой алгоритм построения максимального потока в транспортной сети, использующий метки вершин.