Підтримка
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 AlgoritmAlgoritm Edmondsa Karpa ce variant algoritmu Forda Falkersona pri yakomu na kozhnomu kroci vibirayut najkorotshij dopovnyuvalnij shlyah z s displaystyle s v t displaystyle t zalishkovoyi merezhi vvazhayuchi sho kozhne rebro maye odinichnu dovzhinu Najkorotshij shlyah znahodimo poshukom v shirinu Opis 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 Dlya kozhnogo rebra na znajdenomu shlyahu zbilshuyemo potik na c min displaystyle c min a v protilezhnomu jomu zmenshuyemo na c min displaystyle c min 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 Psevdokodalgorithm 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 flowSkladnistU procesi roboti algoritm Edmondsa Karpa bude znahoditi kozhen dopovnyuyuchij shlyah za chas O E displaystyle O E Nizhche mi dovedemo sho zagalne chislo zbilshen potoku sho vikonuyetsya danim algoritmom stanovit O V E displaystyle O VE Takim chinom skladnist algoritmu Edmondsa Karpa dorivnyuye O V E 2 displaystyle O VE 2 Dovedennya Nazvemovidstannyu vid vershini x displaystyle x do vershini y displaystyle y dovzhinu najkorotshogo shlyahu vid x displaystyle x do y displaystyle y v zalishkovij merezhi Yaksho takogo shlyahu nemaye budemo vvazhati vidstan neskinchennoyu Budemo govoriti sho y displaystyle y nablizivsya do x displaystyle x viddalivsya vid x displaystyle x yaksho vidstan vid x displaystyle x do y displaystyle y zmenshilasya zbilshilasya Budemo govoriti sho y displaystyle y blizhche do x displaystyle x dali vid x displaystyle x nizh z displaystyle z yaksho vidstan vid x displaystyle x do y displaystyle y menshe bilshe nizh vidstan vid x displaystyle x do z displaystyle z Lema 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 d u displaystyle d u d v displaystyle d v d v displaystyle d v mayemo d v lt d v displaystyle d v lt d v d u d u displaystyle d u geq d u d v d u 1 displaystyle d v d u 1 zvidki d v d u 2 displaystyle d v geq d u 2 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 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 a v nastupnij raz na iteraciyi t 2 displaystyle t 2 Poznachayuchi cherez D y t displaystyle D y t 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 D v t 2 D u t 2 1 displaystyle D v t 2 D u t 2 1 Zauvazhimo sho na iteraciyi t 1 displaystyle t 1 kritichne rebro znikaye iz zalishkovoyi merezhi Shob do momentu iteraciyi t 2 displaystyle t 2 rebro u v v nij znovu z yavilosya neobhidno shob na yakijs promizhnij iteraciyi t 3 displaystyle t 3 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 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 Oskilki spochatku D v gt 0 displaystyle D v gt 0 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 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 raz Oskilki kozhen zbilshuyuchij shlyah mistit hocha b odne kritichne rebro a vsogo reber yaki mozhut kolis stati kritichnimi 2 E displaystyle 2E 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 PrikladNehaj zadana merezha z vitokom u vershini A displaystyle A i stokom v vershini G displaystyle G Na malyunku paroyu f c displaystyle f c poznachenij potik po comu rebru i jogo propuskna spromozhnist Poshuk v shirinu 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 Propuskna zdatnist shlyahu shlyah min 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 min 3 0 2 0 1 0 displaystyle min 3 0 2 0 1 0 min 3 2 1 1 displaystyle min 3 2 1 1 A D E G displaystyle A D E G 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 min 3 1 6 0 9 0 displaystyle min 3 1 6 0 9 0 min 2 6 9 2 displaystyle min 2 6 9 2 A D F G displaystyle A D F G 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 min 3 0 4 0 1 0 6 2 9 2 displaystyle min 3 0 4 0 1 0 6 2 9 2 min 3 4 1 4 7 1 displaystyle min 3 4 1 4 7 1 A B C D F G displaystyle A B C D F G 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 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 min 2 3 2 1 3 6 1 displaystyle min 2 3 2 1 3 6 1 A B C E D F G displaystyle A B C E D F G 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 DinicaPokrashenoyu versiyeyu algoritmu Edmondsa Karpa ye algoritm Dinica sho vimagaye O V 2 E displaystyle O V 2 E 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 Dlya kozhnogo rebra na znajdenomu shlyahu zbilshuyemo potik na c min displaystyle c min a v protilezhnomu jomu zmenshuyemo na c min displaystyle c min 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 PosilannyaRealizaciya algoritmu Edmondsa Karpa na C na sajti e maxx ru 28 kvitnya 2015 u Wayback Machine Realizaciya poshuku maksimalnogo potoku metodom Edmondsa Karpa na Java 18 kvitnya 2015 u Wayback Machine
Топ