Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Потоки в сетях.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
475.6 Кб
Скачать

2.2. Задача о максимальном потоке

На практике часто возникает проблема определения максимальной проводимости некоторой реальной сети: сети транспортной, сети ЭВМ, других. Иногда нужно определить самый дешёвый поток и т.д. Все эти и многие другие задачи решаются с помощью алгоритмов, которые работают на сетях. Так, алгоритм о максимальном потоке ищет максимально возможную пропускную способность сети, алгоритм минимальной стоимости – самый дешёвый поток. В данном разделе будем рассматривать задачу о максимальном потоке.

Задача заключается в нахождении такого множества потоков по дугам, чтобы величина Q(vs) была максимальной.

Разрез S отделяет vs от vt, если вершины vs, vt принадлежат разным сторонам разреза: vs Vs, vt Vt, V = Vs Vt. Пропускной способностью с(S) разреза S называется сумма пропускных способностей дуг разреза, которые начинаются в Vs и заканчивается в Vt:

с(S) = .

2 .3. Алгоритм размещения пометок для задачи о максимальном потоке

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

Теорема 1.Теорема про максимальный поток и минимальный разрез. Для произвольной сети максимальная величина потока из vs в vt равняется минимальной пропускной способности разреза, который отделяет vs от vt.

Доказательство

Покажем, что величина w произвольного потока φ не превышает пропускной способности разреза (Vs,Vt), который отделяет vs от vt. Поскольку функция φ поток, то она удовлетворяет уравнению (1) сохранении потока:

- = w,

- = 0, v vs, v t, (2)

- = -w.

Сложим те уравнения из (2), которые соответствуют вершинам из Vs. Учитывая, что vs Vs, vt Vt, получаем:

w = - .

Всё множество вершин распадается на две стороны: V = Vs Vt. Получаем

w = - =

= + - - =

= - ≤ ≤ = c(Vs, Vt).

Теперь нужно показать, что существуют некоторые поток φ и разрез (Vs, Vt), для которых величина потока равняется пропускной способности разреза. Как видно, все потоки от Vs до Vt ограничены и среди них можно выбрать максимальный поток φ. С её помощью определим разрез (Vs, Vt), для которого

= c(Vs, Vt), = 0.

Определим множество Vs рекуррентно:

1) vs Vs.

2 ) Если, vs Vs дуга e идёт из вершины vi в какую-либо вершину vj и φ(e) < c(e), то vj Vs.

3) Если vi Vs, дуга e идёт из вершины vr в вершину vi и φ(e), то vj Vs.

Шаг 1) построения множества Vs означает, что источник vs принадлежит построенной стороне разреза. Покажем, что сток тогда лежит на другой стороне разреза – vt Vt = V/Vs. Допустим противоположное: пусть vt Vs. Тогда существует “неориентированная” цепь, которая идёт из источника vs в сток vt, такая, что для каждой дуги ei цепи с направлением, совпадающим с ориентацией “от источника к стоку” > 0.

Обозначим через l1 = min{c(ej) - c(ei)} все дуги ei цепи с направлением, совпадающим с ориентацией “от источника к стоку”, l2 = min{φ(ei)} все дуги ei цепи с направлением, не совпадающим с ориентацией “от источника к стоку”, l = min(l1, l2). Поток φ можно увеличить на l, увеличив на l поток на дугах цепи, ведущих “от стока к источнику”. Это противоречит тому, что величина потока φ максимальная величина допустимого потока из вершины vs в вершину vt.