Algoritmul Ford-Fulkerson

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 29 aprilie 2022; verificările necesită 3 modificări .

Algoritmul Ford-Fulkerson rezolvă problema găsirii debitului maxim într-o rețea de transport .

Ideea algoritmului este următoarea. Valoarea debitului este setată inițial la 0: pentru toate . Cantitatea de flux este apoi crescută iterativ prin căutarea unei căi de creștere (o cale de la sursă la chiuvetă de -a lungul căreia poate fi trimis mai mult flux). Procesul se repetă până când poate fi găsită o cale de creștere.

Algoritm

Descriere informală

  1. Resetăm toate fluxurile. Rețeaua reziduală coincide inițial cu rețeaua originală.
  2. În rețeaua reziduală, găsim orice cale de la sursă la chiuvetă. Dacă nu există o astfel de cale, ne oprim.
  3. Lăsăm prin calea găsită (se numește cale crescătoare sau lanț crescător ) debitul maxim posibil:
    1. Pe calea găsită în rețeaua reziduală, căutăm o margine cu capacitatea minimă .
    2. Pentru fiecare muchie de pe traseul găsit, creștem debitul cu , iar în sens opus, îl micșorăm cu .
    3. Modificam reteaua reziduala. Pentru toate muchiile de pe traseul găsit, precum și pentru muchiile opuse (antiparalele) acestora, calculăm noua capacitate. Dacă devine diferit de zero, adăugăm o margine rețelei reziduale, iar dacă devine zero, o ștergem.
  4. Revenim la pasul 2.

Este important ca algoritmul să nu specifice exact ce cale căutăm în pasul 2 sau cum o facem. Din acest motiv, algoritmul este garantat să converge doar pentru lățimi de bandă întregi, dar chiar și pentru acestea, pentru lățimi de bandă mari, poate rula foarte mult timp. Dacă capacitățile sunt reale, algoritmul poate rula la nesfârșit fără a converge la soluția optimă (vezi exemplul de mai jos ).

Dacă nu căutați nicio cale, ci cea mai scurtă, obțineți algoritmul Edmonds-Karp sau algoritmul Dinits . Acești algoritmi converg pentru orice ponderi reale în timp și respectiv.

Descriere formală

Dat un grafic cu capacitate și debit pentru muchiile de la până la . Este necesar să se găsească debitul maxim de la sursă la chiuvetă . La fiecare pas al algoritmului, se aplică aceleași condiții ca pentru toate fluxurile:

Rețeaua reziduală  este o rețea cu lățime de bandă și fără flux.

Grafic de intrare cu lățimea de bandă , sursă și receptor Ieșire Debit maxim de la la

  1. pentru toate marginile
  2. Atâta timp cât există o cale de la la la astfel încât pentru toate marginile :
    1. Găsi
    2. Pentru fiecare margine

Calea poate fi găsită, de exemplu, prin căutare pe lățimea întâi ( algoritmul Edmonds-Karp ) sau căutarea pe adâncime în .

Dificultate

La fiecare pas, algoritmul adaugă un flux de cale de creștere fluxului existent. Dacă capacitățile tuturor muchiilor sunt numere întregi, este ușor de demonstrat prin inducție că fluxurile prin toate muchiile vor fi întotdeauna numere întregi. Prin urmare, la fiecare pas, algoritmul mărește debitul cu cel puțin unu, deci va converge în cel mult pași, unde f este debitul maxim din grafic. Este posibil să finalizați fiecare pas în timp , unde este numărul de muchii din grafic, apoi timpul total de rulare al algoritmului este limitat .

Dacă capacitatea a cel puțin uneia dintre muchii este un număr irațional, atunci algoritmul poate rula la nesfârșit, fără a converge neapărat către soluția corectă. Un exemplu este dat mai jos.

Un exemplu de algoritm neconvergent

Luați în considerare rețeaua afișată în dreapta, cu capacități sursă , canalizare , margini și capacitatea tuturor celorlalte margini egală cu un număr întreg . Constanta este aleasă astfel încât . Folosim căile din graficul rezidual dat în tabel și , și .

Etapa Calea găsită S-a adăugat thread Capacități reziduale
0
unu
2
3
patru
5

Rețineți că după pasul 1, precum și după pasul 5, abilitățile reziduale ale muchiilor , și au forma , și , respectiv, pentru unele naturale . Aceasta înseamnă că putem folosi căile de creștere , , și de nenumărate ori, iar capacitatea reziduală a acestor margini va fi întotdeauna în aceeași formă. Debitul total după pasul 5 este . În timp infinit, debitul total va converge spre , în timp ce debitul maxim este . Astfel, algoritmul nu numai că rulează pe termen nelimitat, dar nici măcar nu converge către soluția optimă. [unu]

Exemplu

Următorul exemplu prezintă primii pași ai algoritmului Ford-Fulkerson într-o rețea de transport cu patru noduri, sursa A și canal D . Acest exemplu arată cel mai rău caz. Când utilizați căutarea pe lățime, algoritmul are nevoie de doar 2 pași.

cale Lățimea de bandă Rezultat
Rețeaua de transport inițială


După pașii din 1998...
Rețeaua de destinație

Vezi și

Link -uri

Literatură

Note

  1. Zwick, Uri. Cele mai mici rețele pe care procedura de debit maxim Ford-Fulkerson poate eșua să se încheie  //  Teoretică Informatică : jurnal. - 1995. - 21 august ( vol. 148 , nr. 1 ). - P. 165-170 . - doi : 10.1016/0304-3975(95)00022-O .