www.wikidata.uk-ua.nina.az
Algoritm Edmondsa Karpa rozv yazuye zadachu znahodzhennya maksimalnogo potoku v transportnij merezhi Algoritm yavlyaye soboyu okremij vipadok metodu Forda Falkersona i pracyuye za chas O V E 2 displaystyle O V E 2 Vpershe buv opublikovanij v 1970 roci radyanskim vchenim Yu A Denicom Piznishe v 1972 roci buv nezalezhno vidkritij Edmondsom i Karpom Algoritm Dinica podaye dodatkovi pidhodi dlya zmenshennya chasu do O V 2 E displaystyle O V 2 E Zmist 1 Algoritm 1 1 Opis 2 Psevdokod 3 Skladnist 3 1 Dovedennya 3 2 Lema 4 Priklad 4 1 Poshuk v shirinu 4 2 Osnovnij algoritm 5 Algoritm Dinica 6 PosilannyaAlgoritm red Algoritm Edmondsa Karpa ce variant algoritmu Forda Falkersona pri yakomu na kozhnomu kroci vibirayut najkorotshij dopovnyuvalnij shlyah z s displaystyle s nbsp v t displaystyle t nbsp zalishkovoyi merezhi vvazhayuchi sho kozhne rebro maye odinichnu dovzhinu Najkorotshij shlyah znahodimo poshukom v shirinu Opis red Obnulyayemo vsi potoki Zalishkova merezha spochatku zbigayetsya z pochatkovoyu merezheyu U zalishkovij merezhi znahodimo najkorotshij shlyah z dzherela v stik Yaksho takogo shlyahu nemaye zupinyayemosya Puskayemo cherez znajdenij shlyah vin nazivayetsya zbilshuvalnim shlyahom abo zbilshuvalnim lancyugom maksimalno mozhlivij potik Na znajdenomu shlyahu v zalishkovij merezhi shukayemo rebro z minimalnoyu propusknoyu zdatnistyu c min displaystyle c min nbsp Dlya kozhnogo rebra na znajdenomu shlyahu zbilshuyemo potik na c min displaystyle c min nbsp a v protilezhnomu jomu zmenshuyemo na c min displaystyle c min nbsp Modifikuyemo zalishkovu merezhu Dlya vsih reber na znajdenomu shlyahu a takozh dlya protilezhnih yim reber obchislyuyemo novu propusknu zdatnist Yaksho vona stala nenulovoyu dodayemo rebro do zalishkovoyi merezhi a yaksho obnulilas stirayemo jogo Povertayemosya na krok 2 Shob znajti najkorotshij shlyah v grafi vikoristovuyemo poshuk v shirinu Stvoryuyemo chergu vershin O Spochatku O skladayetsya z yedinoyi vershini s Vidmichayemo vershinu s yak vidvidanu bez predka a vsi inshi yak nevidvidani Poki cherga neporozhnya vikonuyemo nastupni kroki Vidalyayemo pershu v cherzi vershinu u Dlya vsih reber u v sho vihodyat z vershini u takih sho vershina v she ne vidvidana vikonuyemo nastupni kroki Vidznachayemo vershinu v yak vidvidanu z predkom u Dodayemo vershinu v v kinec chergi Yaksho v t vihodimo z oboh cikliv mi znajshli najkorotshij shlyah Yaksho chergu porozhnya povertayemo vidpovid sho shlyahu nemaye vzagali i zupinyayemosya Yaksho ni jdemo vid t do s shorazu perehodyachi do predka Povertayemo shlyah u zvorotnomu poryadku Psevdokod red algorithm EdmondsKarp input C 1 n 1 n Yemnist matrici E 1 n 1 Susidni listi s Dzherelo t Stik output f Znachennya maksimalnoyi vitrati F Matricya daye pravovoyi potik z maksimalnim znachennyam f 0 Pochatkovij potik dorivnyuye nulyu F array 1 n 1 n Zalishkova yemnist vid u do v ce C u v F u v forever m P BreadthFirstSearch C E s t F if m 0 break f f m Povernitsya do poshuku i zapisati potik v t while v s u P v F u v F u v m F v u F v u m v u return f F algorithm BreadthFirstSearch input C E s t F output M t Znajshli yemnist shlyahu P Batkivska tablicya P array 1 n for u in 1 n P u 1 P s 2 Perekonajtesya sho dzherelo ne viyavleno M array 1 n Potuzhnist znajdenogo shlyahu do vuzla M s Q queue Q offer s while Q size gt 0 u Q poll for v in E u Yaksho ye vilna yemnist ta v ne zustrichavsya u poshuku if C u v F u v gt 0 and P v 1 P v u M v min M u C u v F u v if v t Q offer v else return M t P return 0 P psevdo kod Edmondsa Karpa z vikoristannyam sumizhnih vuzliv algorithm EdmondsKarp input graph Grafik spisku sumizhnosti vuzliv z produktivnistyu potik zvorotnij i napryamlenij s Dzherelo t Stik output flow Maksimalne znachennya potoku flow 0 Pochatkovij potik dorivnyuye nulyu q array 1 n Inicializaciya q yak grafu dovzhinu while true qt 0 Zminna dlya prohodu po vsih vidpovidnim rebram q qt s Inicializaciya pochatkovogo masivu pred array q length Inicializaciya poperednogo spisku z grafom dovzhini for qh 0 qh lt qt amp amp pred t null cur q qh for graph cur Prohid po vsim rebram Edge e graph cur Kozhne rebro maye buti pov yazane z yemnistyu if pred e t null amp amp e cap gt e f pred e t e q qt e t if pred t null break int df MAX VALUE Inicializaciya do maksimalnogo znachennya for u t u s u pred u s df min df pred u cap pred u f for u t u s u pred u s pred u f pred u f df pEdge array PredEdge pEdge graph pred u t pEdge pred u rev f pEdge pred u rev f df flow flow df return flowSkladnist red U procesi roboti algoritm Edmondsa Karpa bude znahoditi kozhen dopovnyuyuchij shlyah za chas O E displaystyle O E nbsp Nizhche mi dovedemo sho zagalne chislo zbilshen potoku sho vikonuyetsya danim algoritmom stanovit O V E displaystyle O VE nbsp Takim chinom skladnist algoritmu Edmondsa Karpa dorivnyuye O V E 2 displaystyle O VE 2 nbsp Dovedennya red Nazvemovidstannyu vid vershini x displaystyle x nbsp do vershini y displaystyle y nbsp dovzhinu najkorotshogo shlyahu vid x displaystyle x nbsp do y displaystyle y nbsp v zalishkovij merezhi Yaksho takogo shlyahu nemaye budemo vvazhati vidstan neskinchennoyu Budemo govoriti sho y displaystyle y nbsp nablizivsya do x displaystyle x nbsp viddalivsya vid x displaystyle x nbsp yaksho vidstan vid x displaystyle x nbsp do y displaystyle y nbsp zmenshilasya zbilshilasya Budemo govoriti sho y displaystyle y nbsp blizhche do x displaystyle x nbsp dali vid x displaystyle x nbsp nizh z displaystyle z nbsp yaksho vidstan vid x displaystyle x nbsp do y displaystyle y nbsp menshe bilshe nizh vidstan vid x displaystyle x nbsp do z displaystyle z nbsp Lema red U hodi roboti algoritmu zhodna vershina nikoli ne nablizhayetsya do pochatku Dokaz Nehaj ce ne tak todi pri deyakomu zbilshenni potoku deyaki vershini nablizilisya do dzherela Nazvemo yih nepravilnimi Viberemo tu z nepravilnih vershin yaka pislya zbilshennya potoku viyavilasya blizhche vsih do dzherela yaksho takih bilshe odniyeyi to bud yaku z nih Poznachimo vibranu vershinu cherez v Rozglyanemo najkorotshij shlyah vid s do v Poznachimo peredostannyu vershinu na comu shlyahu cherez u takim chinom shlyah maye viglyad s uv Oskilki u blizhche do s nizh v a v najblizhcha do s z nepravilnih vershin u vershina pravilna Poznachivshi vidstani vid s do u i v do i pislya zbilshennya potoku vidpovidno cherez d u displaystyle d u nbsp d u displaystyle d u nbsp d v displaystyle d v nbsp d v displaystyle d v nbsp mayemo d v lt d v displaystyle d v lt d v nbsp d u d u displaystyle d u geq d u nbsp d v d u 1 displaystyle d v d u 1 nbsp zvidki d v d u 2 displaystyle d v geq d u 2 nbsp Otzhe do zbilshennya potoku rebro u v bulo vidsutnim v zalishkovij merezhi Shob vono z yavilosya zbilshuvanij shlyah povinen buv mistiti rebro v u Ale v algoritmi Edmondsa Karpa zbilshuyemij shlyah zavzhdi najkorotshij otzhe d v d u 1 displaystyle d v d u 1 nbsp sho superechit poperednij nerivnosti Znachit nashe pripushennya bulo nevirnim Lema dovedena Nazvemo kritichnim te z reber zbilshuyuchogo shlyahu u yakogo zalishkova propuskna zdatnist minimalna Ocinimo skilki raziv yakes rebro u v mozhe stati kritichnim Nehaj ce vidbulosya na iteraciyi t 1 displaystyle t 1 nbsp a v nastupnij raz na iteraciyi t 2 displaystyle t 2 nbsp Poznachayuchi cherez D y t displaystyle D y t nbsp vidstan vid s do y na iteraciyi t mayemo D v t 1 D u t 1 1 displaystyle D v t 1 D u t 1 1 nbsp D v t 2 D u t 2 1 displaystyle D v t 2 D u t 2 1 nbsp Zauvazhimo sho na iteraciyi t 1 displaystyle t 1 nbsp kritichne rebro znikaye iz zalishkovoyi merezhi Shob do momentu iteraciyi t 2 displaystyle t 2 nbsp rebro u v v nij znovu z yavilosya neobhidno shob na yakijs promizhnij iteraciyi t 3 displaystyle t 3 nbsp buv obranij zbilshuyuchij shlyah sho mistit rebro v u Otzhe D u t 3 D v t 3 1 displaystyle D u t 3 D v t 3 1 nbsp Vikoristovuyuchi ranishe dovedenu lemmu otrimuyemo D v t 2 D u t 2 1 D u t 3 1 D v t 3 2 D v t 1 2 displaystyle D v t 2 D u t 2 1 geq D u t 3 1 D v t 3 2 geq D v t 1 2 nbsp Oskilki spochatku D v gt 0 displaystyle D v gt 0 nbsp inakshe v s ale rebro providne v s ne mozhe z yavitisya na najkorotshomu shlyahu z s v t i zavzhdi koli D v displaystyle D v nbsp zvichajno vono menshe V najkorotshij shlyah ne mistit cikliv i otzhe mistit menshe V reber rebro mozhe viyavitisya kritichnim ne bilshe V 1 1 2 1 V 2 displaystyle frac V 1 1 2 1 V 2 nbsp raz Oskilki kozhen zbilshuyuchij shlyah mistit hocha b odne kritichne rebro a vsogo reber yaki mozhut kolis stati kritichnimi 2 E displaystyle 2E nbsp vsi rebra vihidnoyi merezhi i yim protilezhni to mi mozhemo zbilshiti shlyah ne bilshe EV raz Otzhe kilkist iteracij ne perevishuye O EV sho potribno bulo dovesti Priklad red Nehaj zadana merezha z vitokom u vershini A displaystyle A nbsp i stokom v vershini G displaystyle G nbsp Na malyunku paroyu f c displaystyle f c nbsp poznachenij potik po comu rebru i jogo propuskna spromozhnist nbsp Poshuk v shirinu red Opishemo poshuk v shirinu na pershomu kroci Cherga skladayetsya z yedinoyi vershini A Projdena vershina A Predkiv nemaye Cherga polyagaye vid pochatku do kincya z vershin B i D Projdeni vershini A B D Vershini B D mayut predka A Cherga skladayetsya z vershin D i C Projdeni A B C D Vershini B D mayut predka A vershina C predka B Cherga skladayetsya z vershin C E F Projdeni A B C D E F Vershini B D mayut predka A vershina C predka B vershini E F predka D Vershina C vidalyayetsya z chergi rebra z neyi vedut tilki u vzhe projdeni vershini Mozhna znajti rebro E G i cikl zupinyayetsya U cherzi vershini F G Vidvidani vsi vershini Vershini B D mayut predka A vershina C predka B vershini E F predka D vershina G predka E Jdemo po predkam G gt E gt D gt A Povertayemo projdenij shlyah u zvorotnomu poryadku A gt D gt E gt G Zauvazhimo sho v chergu poslidovno dodavali vershini dosyazhni z A rivno za 1 krok rivno za 2 kroki rivno za 3 kroki Krim togo predkom kozhnoyi vershini ye vershina dosyazhna z A rivno na 1 krok shvidshe Osnovnij algoritm red Propuskna zdatnist shlyahu shlyahmin c f A D c f D E c f E G displaystyle min c f A D c f D E c f E G nbsp min 3 0 2 0 1 0 displaystyle min 3 0 2 0 1 0 nbsp min 3 2 1 1 displaystyle min 3 2 1 1 nbsp A D E G displaystyle A D E G nbsp nbsp min c f A D c f D F c f F G displaystyle min c f A D c f D F c f F G nbsp min 3 1 6 0 9 0 displaystyle min 3 1 6 0 9 0 nbsp min 2 6 9 2 displaystyle min 2 6 9 2 nbsp A D F G displaystyle A D F G nbsp nbsp min c f A B c f B C c f C D c f D F c f F G displaystyle min c f A B c f B C c f C D c f D F c f F G nbsp min 3 0 4 0 1 0 6 2 9 2 displaystyle min 3 0 4 0 1 0 6 2 9 2 nbsp min 3 4 1 4 7 1 displaystyle min 3 4 1 4 7 1 nbsp A B C D F G displaystyle A B C D F G nbsp nbsp min c f A B c f B C c f C E c f E D c f D F c f F G displaystyle min c f A B c f B C c f C E c f E D c f D F c f F G nbsp min 3 1 4 1 2 0 0 1 6 3 9 3 displaystyle min 3 1 4 1 2 0 0 1 6 3 9 3 nbsp min 2 3 2 1 3 6 1 displaystyle min 2 3 2 1 3 6 1 nbsp A B C E D F G displaystyle A B C E D F G nbsp nbsp Vidznachimo sho v procesi vikonannya algoritmu dovzhini dopovnyuyuchih shlyahiv na malyunkah poznacheni chervonim ne zmenshuyutsya Ce vlastivist vikonuyetsya zavdyaki tomu sho mi shukayemo najkorotshij dopovnyuyuchij shlyah Algoritm Dinica red Pokrashenoyu versiyeyu algoritmu Edmondsa Karpa ye algoritm Dinica sho vimagaye O V 2 E displaystyle O V 2 E nbsp operacij Nazvemo dopomizhnoyu bezkonturnoyu merezheyu grafu G z dzherelom s jogo pidgraf sho mistit tilki taki rebra u v dlya yakih minimalna vidstan vid s do v na odinicyu bilshe minimalnoyi vidstani vid s do u Algoritm Dinica Buduyemo minimalnu bezkonturnu merezhu ostatochnogo grafu Poki v merezhi ye shlyah iz s v t vikonati nastupni kroki Znahodimo najkorotshij shlyah z s v t Yaksho jogo nemaye vijti z ciklu Na znajdenomu shlyahu v ostatochnij merezhi shukayemo rebro z minimalnoyu propusknoyu zdatnistyu c min displaystyle c min nbsp Dlya kozhnogo rebra na znajdenomu shlyahu zbilshuyemo potik na c min displaystyle c min nbsp a v protilezhnomu jomu zmenshuyemo na c min displaystyle c min nbsp Vidalyayemo vsi rebra yaki dosyagli nasichennya Vidalyayemo vsi gluhi kuti tobto vershini krim stoku zvidki ne vihodit reber i vershini krim dzherela kudi reber ne vhodit razom z usima incidentnimi yim rebrami Povtoryuyemo poperednij krok poki ye sho vidalyati Yaksho znajdenij potik nenulovij dodayemo jogo do zagalnogo potoku i povertayemosya na krok 1 Posilannya red Realizaciya algoritmu Edmondsa Karpa na C na sajti e maxx ru Arhivovano 28 kvitnya 2015 u Wayback Machine Vizualizaciya algoritmu Realizaciya poshuku maksimalnogo potoku metodom Edmondsa Karpa na Java Arhivovano 18 kvitnya 2015 u Wayback Machine Otrimano z https uk wikipedia org w index php title Algoritm Edmondsa Karpa amp oldid 38153429