Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ММДО.DO_ukr_new.doc
Скачиваний:
164
Добавлен:
16.05.2015
Размер:
5.09 Mб
Скачать

3.7 Задача про максимальний потік. Метод Форда-Фалкерсона

Постановка задачі про максимальний потік на мережі.

На мережі, що задається графом (I,U), де I – множина вершин, U – множина дуг, з визначеною на ній функцією пропускних спроможностей rij ((i,j) –дуга з U), зафіксовані дві вершини – i1 та in.

Вершина i1 (джерело) має інтенсивність d, вершина in (стік) – інтенсивність – d, всі інші вершини нейтральні. Треба знайти максимальну інтенсивність джерела d, при якій мережа допускає потік. Потiк, що відповідає такому максимальному значенню інтенсивності d*, називається максимальним потоком, а саме значення d*величиною цього потоку.

Алгоритм Форда-Фалкерсона застосовується для побудови максимального потоку на мережі із заданої початкової вершини-джерела в задану кінцеву вершину-стiк.

Будемо вважати, що вершиною-джерелом є 1-а вершина, вершиною-стоком – вершина з номером n.

Вхідні дані.

Для роботи алгоритму необхідно задати таку інформацію:

1. Число вершин мережі.

2. Матрицю суміжностей С, елементи якої сij визначаються співвідношеннями:

сij=1, якщо існує дуга (i,j);

сij=0, якщо дуга (i,j) відсутня.

3. Величини rij пропускних спроможностей дуг (i,j).

4. Початковий потік на мережі, тобто величини xij, що задовольняють умови:

a) 0£xij£rij;

b) для довільної вершини (крім першої i останньої) потік, що входить у вершину, дорівнює потоку, що виходить з неї.

Виклад алгоритму Форда-Фалкерсона.

Алгоритм складається з послідовних iтерацiй, які проводяться до тих пір, поки не буде виконуватись ознака оптимальності.

На кожній iтерацiї можна виділити два етапи.

Етап 1 (етап виставлення позначок).

1. В кожний момент часу кожна вершина може знаходитись в одному з трьох положень:

а) не позначена;

б) позначена, але не проглянута;

в) позначена i проглянута.

Загальний вигляд позначки j-ї вершини: [i+,qj], або [i–,qj], де i — номер деякої позначеної вершини, при прогляданнi якої була позначена вершина j. Вершина 1 завжди позначена та має позначку [1+,q1], де q1 рівне + ¥ (нескінченності).

2. Проглядання довільної позначеної вершини j полягає у такому:

a) довільна непозначена вершина k, для якої існує дуга (j,k) i має місце нерівність xjk<rjk, отримує позначку вигляду [j+,qk], де

qk=min {qj, rjk – xjk};

б) довільна непозначена вершина k, для якої існує дуга (k,j) i має місце умова xkj>0, отримує позначку вигляду [j–,qk], де

qk=min {qj, xkj}.

3. Виставлення позначок закінчується в одному з двох випадків:

а) вершина з номером n позначена;

б) умова а) не виконується, але жодної вершини більше позначити не можна.

В першому випадку переходимо до етапу зміни потоку на мережі. В другому – до визначення мінімального розрізу мережі i максимального потоку.

Етап 2 (етап зміни потоку).

Потiк в мережі змінюється на величину qn відповідно правилу. Якщо вершина n має позначку [k+,qn], де k – номер деякої вершини, то xkn=xkn+qn. Якщо позначка має вигляд [k–,qn], то xnk=xnk–qn. Переходимо до вершини з номером k. Якщо позначка вершини k має вигляд [j+,qk], то xjk=xjk+qn; якщо вона дорівнює [j–,qk], то xkj=xkj–qn. Подібні дії продовжуємо доти, поки не буде досягнута початкова вершина. В цьому випадку всі старі позначки витираємо i повертаємось до першого етапу.

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

Величина максимального потоку дорівнює сумарній пропускній спроможності мінімального розрізу.