Ford-Fulkerson-algoritmen løser problemet med at finde det maksimale flow i et transportnetværk .
Ideen med algoritmen er som følger. Flowværdien er oprindeligt sat til 0: for alle . Mængden af flow øges derefter iterativt ved at søge efter en forstærkende sti (en sti fra kilde til synk , langs hvilken mere flow kan sendes). Processen gentages, indtil der kan findes en forøgelsessti.
Det er vigtigt, at algoritmen ikke præciserer, hvilken vej vi leder efter i trin 2, eller hvordan vi gør det. Af denne grund er algoritmen garanteret kun at konvergere for heltalsbåndbredder, men selv for dem, for store båndbredder, kan den køre i meget lang tid. Hvis kapaciteterne er reelle, kan algoritmen køre i det uendelige uden at konvergere til den optimale løsning (se eksempel nedenfor ).
Hvis du ikke leder efter nogen vej, men efter den korteste, får du Edmonds-Karp- algoritmen eller Dinits-algoritmen . Disse algoritmer konvergerer for eventuelle reelle vægte i tid og hhv.
Givet en graf med kapacitet og flow for kanter fra til . Det er nødvendigt at finde det maksimale flow fra kilden til vasken . Ved hvert trin i algoritmen gælder de samme betingelser som for alle flows:
Det resterende netværk er et netværk med båndbredde og uden flow.
Input Graph med båndbredde , source og sink Output Maksimalt flow fra til
Stien kan for eksempel findes ved bredde-først søgning ( Edmonds-Karp algoritme ) eller dybde-først søgning i .
Ved hvert trin tilføjer algoritmen en forstærkende stistrøm til den eksisterende strøm. Hvis kapaciteten af alle kanter er heltal, er det let at bevise ved induktion, at strømmene gennem alle kanter altid vil være heltal. Derfor øger algoritmen ved hvert trin flowet med mindst ét, så det vil konvergere i højst trin, hvor f er det maksimale flow i grafen. Det er muligt at gennemføre hvert trin i tid , hvor er antallet af kanter i grafen, så er den samlede køretid for algoritmen begrænset .
Hvis kapaciteten af mindst en af kanterne er et irrationelt tal, så kan algoritmen køre på ubestemt tid, uden engang nødvendigvis at konvergere til den korrekte løsning. Et eksempel er givet nedenfor.
Overvej netværket vist til højre med source , sink , edge capacities , , og kapaciteten af alle andre kanter lig med et heltal . Konstanten vælges således, at . Vi bruger stierne fra restgrafen i tabellen, og , og .
Trin | Fundet sti | Tilføjet tråd | Resterende kapaciteter | ||
---|---|---|---|---|---|
0 | |||||
en | |||||
2 | |||||
3 | |||||
fire | |||||
5 |
Bemærk, at efter trin 1, såvel som efter trin 5, de resterende evner af kanterne , og har formen , og , henholdsvis for nogle naturlige . Det betyder, at vi kan bruge augmenting paths , , og uendeligt mange gange, og restkapaciteten af disse kanter vil altid være i samme form. Det samlede flow efter trin 5 er . I uendelig tid vil det samlede flow konvergere til , mens det maksimale flow er . Algoritmen kører således ikke kun i det uendelige, men konvergerer ikke engang til den optimale løsning. [en]
Følgende eksempel viser de første trin af Ford-Fulkerson-algoritmen i et transportnetværk med fire knudepunkter, kilde A og synk D. Dette eksempel viser det værste tilfælde. Når du bruger bredde-først søgning, behøver algoritmen kun 2 trin.
Sti | Båndbredde | Resultat |
---|---|---|
Indledende transportnet | ||
Efter 1998 trin... | ||
Destinationsnetværk |