Завдання про максимальний потік - студопедія

Розглянемо задачу визначення максимального потоку між виділеними вузлами зв'язковою мережі. Кожна дуга мережі володіє пропускними здатностями в обох напрямках, які визначають максимальну кількість потоку, що проходить по даній дузі. Орієнтована (одностороння) дуга відповідає нульовий пропускної здатності в забороненому напрямку.

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

Крок 1 :
Знайти мета, яка з'єднує джерело S і стік t. по якій потік приймає позитивне значення. У напрямку S → t. Якщо такої мети не існує, перейти до кроку 3. В іншому випадку перейти до кроку 2.

Нехай () - пропускні спроможності дуг ланцюга (S, t) в напрямку S → t (t → S).

Матрицю пропускних спроможностей C = [Cij] змінити наступним чином:

а) відняти # 1012; з усіх ;

б) додати # 1012; до всіх .

Замінити поточну матрицю С на знову отриману і перейти до кроку 1. Операція (а) дає можливість використовувати залишки пропускних спроможностей дуг вибраного ланцюга в напрямку S → t.

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

Знайти максимальний потік в мережі.

Нехай C = [Cij] - вихідна матриця пропускних спроможностей.

C * = [C * ij] - остання матриця, отримана в результаті модифікації вихідної матриці (крок 1 і 2).

Оптимальний потік Х = [xij] в дугах задається так:

Максимальний потік з S в t дорівнює:

Приклад: визначити максимальний потік в графі

Завдання про максимальний потік - студопедія

В якості вихідної ланцюга виберемо S → 1 → 4 → t. Тоді осередки (S, 1), (1,4), (4, t) помічаємо знаком (-), а осередки (1, S), (4,1), (t, 4) помічаємо знаком (+).

Максимальний потік для цього ланцюга дорівнює

Можна вибрати різні вихідні ланцюга. Хороший вибір повинен давати найбільше значення # 1012 ;. Але може виникнути багато варіантів таких ланцюгів. При програмуванні ланцюг зручно визначати безпосередньо з матриці С, починаючи з першого рядка S-рядки і вибираючи наступний вузол серед тих, які з'єднані з S позитивним потоком. Далі розглядається рядок, яка відповідає вибраному вузлу, і вибирається наступний вузол, з'єднаний з попереднім позитивної дугою. Процес триває до тих пір. поки не буде досягнутий вузол t.

Коригуємо матрицю С, віднімаючи # 1012; = 5 з усіх елементів, позначених (-), і складаючи з усіма елементами, що мають знак (+). Отримуємо нову матрицю.

Аналогічні дії виробляємо і на наступних ітераціях.

Завдання про максимальний потік - студопедія

Виберемо ланцюг (S → 3 → 2 → t)

# 1012; = min = 10 Скорегуємо матрицю С

Завдання про максимальний потік - студопедія

Виберемо ланцюг (S → 1 → 3 → 4 → t)

# 1012; = min = 5 Скорегуємо матрицю С

Завдання про максимальний потік - студопедія

Виберемо ланцюг (S → 4 → t)

# 1012; = min = 3 Скорегуємо матрицю С

Завдання про максимальний потік - студопедія

Виберемо ланцюг (S → 3 → t)

# 1012; = min = 2 Скорегуємо матрицю С

Завдання про максимальний потік - студопедія

Між S і t можна побудувати ланцюг, т.к всі елементи в стовпці t дорівнюють нулю. Таким чином отримаємо матрицю С *

Побудуємо матрицю Х. Негативні елементи в матриці замінимо нулями.

Σ # 1012; = 5 + 10 + 5 + 3 + 2 = 25

Графічно рішення представлено графом:

Завдання про максимальний потік - студопедія

Схожі статті