Задача о максимальном потоке в сети с ограниченным и

advertisement
Задача о максимальном потоке в сети с ограниченным и пропускными
способностями ветвей (каналов):
Задача о максимальном потоке - одна из основных проблем в теории
вычислительных систем.
Грубо говоря, указанная задача заключается в том, чтобы подсчитать максимальное
количество некоторых объектов, которые могут двигаться с одного конца сети в другой.
При этом пропускная способность узлов сети ограничена. Под объектами могут
подразумеваться пакеты данных, путешествующие по интернету, или коробки с товарами,
которые везут по автомагистралям. Соответственно, их перемещения могут быть
ограничены пропускной способностью соединений сети или скоростью транспорта на
загруженных дорогах.
В задаче о максимальном потоке одна из вершин графа назначается истоком точкой, в которой все объекты начинают свой путь, а другая - стоком - точкой, в которую
они все направляются. Пропускная способность каждого ребра ограничена.
Подобные графы моделируют реальные транспортные и коммуникационные сети.
Однако их применение гораздо шире, к ним сводятся многие проблемы оптимизации.
Помимо анализа собственно сетей, эта задача может использоваться при составлении
расписания авиарейсов, распределении задач в суперкомпьютерах, обработке цифровых
изображений и расположении последовательностей ДНК.
Рассмотрим транспортную сеть, в которой выделены пункты 0 (вход, источник) и n
(выход, сток) и каждой дуге (отрезку), связывающей пункты i и j, сопоставлено число
dij>0, называемое пропускной способностью дуги. Величина пропускной способности
характеризует максимальное допустимое количество вещества (воды, газа, самолетов,
вагонов и т.п.), которое может проходить по соответствующей дуге в единицу времени.
Количество вещества, проходящего по дуге от i до j, будем называть потоком по
дуге (i, j) и обозначать через Xij .
Очевидно, что 0≤Xij≤dij для всех i, j/
Если учесть, что все вещество, вошедшее в промежуточный пункт сети, должно
полностью выйти из него, получаем  X ij   X jk .
i
k
Из естественного требования равенства потоков на входе и на выходе имеем
 X 0 j   X in  Z /
i
i
Величину Z называем величиной потока в сети и ставим задачу максимизации Z.
Разрезом сети называется такое разбиение всех вершин на два не пресекаемых
множества, при котором исток попадает в одно множество, а сток в другое.
Потоком через разрез называется сумма пропускных способностей дуг,
соединяющих вершины, попадающие в разные множества.
Теорема Фалкерсона-Форда: максимальный поток через сеть равен минимальному
потоку через разрез.
Алгоритм Фалкерсона-Форда
1. Обнуляем все потоки. Остаточная сеть изначально совпадает с исходной сетью.
2. В остаточной сети находим любой путь из источника в сток. Если такого пути
нет, останавливаемся.
3. Пускаем через найденный путь (он называется увеличивающим путём или
увеличивающей цепью) максимально возможный поток:
1. На найденном пути в остаточной сети ищем ребро с минимальной
пропускной способностью cmin.
2. Для каждого ребра на найденном пути увеличиваем поток на cmin, а в
противоположном ему - уменьшаем на cmin.
3. Модифицируем остаточную сеть. Для всех рёбер на найденном пути, а
также для противоположных им рёбер, вычисляем новую пропускную
способность. Если она стала ненулевой, добавляем ребро к остаточной
сети, а если обнулилась, стираем его.
4. Возвращаемся на шаг 2.
1. Подбирается поток с ненулевой частотой. В нашем случае в скобках указан поток.
zij ≤dij
2. Исходя из заданной сети N строим новую сеть N' следующим образом: любая дуга,
из которой zl=0 (старый поток) остается в новой сети с той же пропускной
способностью, если же zl≠0, эта дуга заменяется двумя дугами – одна в том же
направлении с пропускной способностью Ul-xl и обратная к xl.
3. Если в новой сети можно найти ненулевой поток, то добавляем его к исходному, и
получаем поток больше исходного до тех пор, пока на шаге три для очередной сети
мы не сможем найти ненулевой поток. F’=4+1=5
В новой сети N'' нет ненулевого потока, поэтому F=5.
Download