Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по ДГИО.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.33 Mб
Скачать

Лекция 5

Задача о максимальном потоке при наличии нижних ограничений на поток.

Пусть каждой дуге орграфа (орсети) поставлены в соответствие неотрицательные числа (или . ) называется пропускной способностью дуги , а - нижней границей дугового потока. При этом . Выделим два узла в : – источник, – сток. Остальные узлы будем называть промежуточными. Рассмотрим на такой сети функцию , определённую на множестве ; значение, которое принимает на дуге , обозначим как .

Определение 2.1. Потоком из в в орсети называется функция , удовлетворяющая условиям:

Условия (2.1) называют уравнениями сохранения, а величину - чистым потоком из узла .

Определение 2.2. Величиной (значением) потока называется чистый поток из узла :

Для каждого разреза определим пропускную способность:

.

Лемма 2.1. Пусть - поток из в величины в сети , а - разрез, отделяющий от . Тогда:

.

Разрез , отделяющий источник и сток, будем называть минимальным разрезом, если величина его пропускной способности есть наименьшая среди значений пропускных способностей всех разрезов, отделяющих источник и сток. Минимальных разрезов в конкретной орсети может быть несколько. Поток будем называть максимальным потоком, если его величина наибольшая среди величин всех потоков.

Теорема (о максимальном потоке и минимальном разрезе).

Для любой сети величина максимального потока из в равна значению пропускной способности минимального разреза.

Внесем несущественные изменения в алгоритм Форда-Фалкерсона.

Опишем процедуру расстановки меток, расширив множество формальных параметров.

Label (f,s,t,e,r);

1. for i:=1 to n do

2. [i]:=0

3. Q:=nil; Q<= s; [s]:=e; ftr[s]:=r

4. while [t]=0 & Q#nil do

5. i<=Q

6. for j:=1 to n do

7. if [ j ]=0 & c[ i , j ]-f[ i , j ]>0

8. then [ j ]=MIN([i],c[ i , j ]-f[ i , j ])

9. ftr[ j ]:=i

10. Q<=j

11. for j:=1 to n do

12. if [ j ]=0 & f[ j , i ]>l[I,j]

13. then [ j ]=min([ i ],f[ j , i ]-l[I,j])

14. ftr[ j ]:=-i

15. Q<=j

Алгоритм Форда-Фалкерсона

Вход: n, орграф задан матрицей c[n,n] , //матрица пропускных способностей дуг

источник s, сток t , l[n,n] , // матрица нижних границ дуговых потоков

f[n,n] // начальный допустимый поток

Выход: f[n,n], v // максимальный поток и его величина

1. v:=0

2. for i:=1 to n do v:=v+f[s,i] - f[i,s]

3. repeat

4. Label(f,s,t,∞,0)

5. if [t]>0

6. then v:=v+[t]

7. i:=t

8. while i#s do

9. j:=ABS(ftr[i])

10. if ftr[i]>0

11. then f[j,i]:=f[j,i]+ [t]

12. else f[i,j]:=f[i,j]- [t]

13. i:=j

14. until [t]=0

Построение начального допустимого потока связано с решением задачи о циркуляции.