Ford-Fulkerson algoritme

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 29. april 2022; checks kræver 3 redigeringer .

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.

Algoritme

Uformel beskrivelse

  1. Vi nulstiller alle streams. Det resterende netværk falder i første omgang sammen med det oprindelige netværk.
  2. I restnettet finder vi enhver vej fra kilden til vasken. Hvis der ikke er en sådan vej, stopper vi.
  3. Vi slipper gennem den fundne vej (det kaldes stigende vej eller stigende kæde ) det maksimalt mulige flow:
    1. På den fundne vej i det resterende netværk leder vi efter en kant med minimumskapacitet .
    2. For hver kant på den fundne sti øger vi flowet med , og i modsat retning mindsker vi det med .
    3. Vi ændrer det resterende netværk. For alle kanter på den fundne sti, såvel som for kanterne modsat (antiparallelle) til dem, beregner vi den nye kapacitet. Hvis det bliver ikke-nul, tilføjer vi en kant til det resterende netværk, og hvis det bliver nul, sletter vi det.
  4. Vi vender tilbage til trin 2.

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.

Formel beskrivelse

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

  1. til alle kanter
  2. Så længe der er en vej fra til til sådan, at for alle kanter :
    1. Finde
    2. For hver kant

Stien kan for eksempel findes ved bredde-først søgning ( Edmonds-Karp algoritme ) eller dybde-først søgning i .

Sværhedsgrad

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.

Et eksempel på en ikke-konvergerende algoritme

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]

Eksempel

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

Se også

Links

Litteratur

Noter

  1. Zwick, Uri. De mindste netværk, hvor Ford-Fulkersons maksimale flow-procedure muligvis ikke afsluttes  //  Teoretisk datalogi : journal. - 1995. - 21. august ( bind 148 , nr. 1 ). - S. 165-170 . - doi : 10.1016/0304-3975(95)00022-O .