Problém s maximálním průtokem - Maximum flow problem

v teorie optimalizace, problémy s maximálním průtokem zahrnovat nalezení proveditelného toku přes a toková síť který získá maximální možný průtok.
Na problém s maximálním tokem lze pohlížet jako na speciální případ složitějších problémů s tokem v síti, jako je problém oběhu. Maximální hodnota s-t toku (tj. Toku z zdroj s až dřez t) se rovná minimální kapacitě s-t řez (tj. odřízněte oddělování s od t) v síti, jak je uvedeno v věta o maximálním toku o minimálním řezu.
Dějiny
Problém s maximálním průtokem byl poprvé formulován v roce 1954 T. E. Harris a F. S. Ross jako zjednodušený model toku sovětské železniční dopravy.[1][2][3]
V roce 1955 Lester R. Ford, Jr. a Delbert R. Fulkerson vytvořil první známý algoritmus, Algoritmus Ford-Fulkerson.[4][5] Ve svém příspěvku z roku 1955[4] Ford a Fulkerson napsali, že problém Harrisa a Rosse je formulován následovně (viz[1] p. 5):
Zvažte železniční síť spojující dvě města prostřednictvím řady mezilehlých měst, kde každé propojení sítě má přiděleno číslo představující její kapacitu. Za předpokladu ustáleného stavu najděte maximální tok z jednoho daného města do druhého.
Ve své knize Toky v síti,[5] v roce 1962 Ford a Fulkerson napsali:
Autorům ji položil na jaře 1955 T.E. Harris, který ve spojení s generálem F.S. Ross (Ret.), Formuloval zjednodušený model toku železniční dopravy a určil tento konkrétní problém jako ústřední problém navržený modelem [11].
kde [11] odkazuje na tajnou zprávu z roku 1955 Základy metody pro hodnocení kapacit železniční sítě Harris a Ross[3] (vidět[1] p. 5).
V průběhu let byla objevena různá vylepšená řešení problému maximálního průtoku, zejména nejkratší algoritmus rozšiřující cesty Edmondse a Karpa a nezávisle Dinitze; algoritmus blokujícího toku Dinitz; the algoritmus push-relabel z Goldberg a Tarjan; a algoritmus binárního blokovacího toku Goldberga a Raa. Algoritmy Shermana[6] a Kelner, Lee, Orecchia a Sidford,[7][8] najděte přibližně optimální maximální průtok, ale pracujte pouze v neorientovaných grafech.
V roce 2013 James B. Orlin zveřejnil článek popisující algoritmus pro všechny hodnoty a .[9]
Definice

Nejprve vytvoříme notaci:
- Nechat být sítí s být zdrojem a jímkou resp.
- Li je funkce na okrajích pak jeho hodnota na je označen nebo
Definice. The kapacita hrany je maximální množství toku, které může projít hranou. Formálně je to mapa
Definice. A tok je mapa který splňuje následující podmínky:
- Omezení kapacity. Tok hrany nesmí překročit její kapacitu, jinými slovy: pro všechny
- Zachování toků. Součet toků vstupujících do uzlu se musí rovnat součtu toků opouštějících tento uzel, s výjimkou zdroje a jímky. Nebo:
Poznámka. Toky jsou zkosené symetrické: pro všechny
Definice. The hodnota průtoku je množství toku procházejícího ze zdroje do jímky. Formálně pro tok je to dáno:
Definice. The problém s maximálním průtokem je směrovat co nejvíce toku ze zdroje ke dřezu, jinými slovy najít tok s maximální hodnotou.
Všimněte si, že může existovat několik maximálních toků, a pokud jsou povoleny libovolné skutečné (nebo dokonce libovolné racionální) hodnoty toku (místo pouze celých čísel), existuje buď právě jeden maximální tok, nebo nekonečně mnoho, protože existuje nekonečně mnoho lineárních kombinací základní maximální průtoky. Jinými slovy, pokud pošleme jednotky toku na hraně v jednom maximálním průtoku a jednotky toku zapnuty v jiném maximálním průtoku, pak pro každý můžeme poslat jednotky zapnuty a podle toho směrujte tok na zbývajících okrajích, abyste získali další maximální průtok. Pokud mohou být hodnoty toku libovolná reálná nebo racionální čísla, je jich nekonečně mnoho hodnoty pro každý pár .
Algoritmy
V následující tabulce jsou uvedeny algoritmy pro řešení problému s maximálním průtokem.
Metoda | Složitost | Popis |
---|---|---|
Lineární programování | Omezení daná definicí a legální tok. Viz lineární program tady. | |
Algoritmus Ford-Fulkerson | Ó(E | Fmax |) | Pokud je ve zbytkovém grafu otevřená cesta, pošlete na ní minimum zbytkových kapacit. Algoritmus je zaručeně ukončen, pouze pokud jsou všechny váhy Racionální.[je třeba další vysvětlení ] Jinak je možné, že algoritmus nebude konvergovat na maximální hodnotu. Pokud se však algoritmus ukončí, je zaručeno najít maximální hodnotu. |
Algoritmus Edmonds – Karp | Ó(VE2) | Specializace Ford-Fulkerson, hledání rozšiřujících cest s vyhledávání na šířku. |
Dinicův blokovací algoritmus toku | Ó(PROTI2E) | V každé fázi algoritmy vytvářejí vrstvený graf s vyhledávání na šířku na zbytkový graf. Maximální průtok ve vrstveném grafu lze vypočítat v Ó(VE) čas a maximální počet fází je PROTI-1. V sítích s jednotkovými kapacitami končí Dinicův algoritmus čas. |
Algoritmus MKM (Malhotra, Kumar, Maheshwari)[10] | Ó(PROTI3) | Funguje pouze v acyklických sítích. Odkazovat na originální papír. |
Dinicův algoritmus | Ó(VE log PROTI) | The dynamické stromy datová struktura zrychluje výpočet maximálního toku ve vrstveném grafu na Ó(VE log PROTI). |
Obecný algoritmus maximálního toku push-relabel | Ó(PROTI2E) | Algoritmus push relabel udržuje preflow, tj. Funkci toku s možností přebytku ve vrcholech. Algoritmus běží, zatímco v grafu je vrchol s kladným přebytkem, tj. Aktivní vrchol. Operace tlačení zvyšuje průtok na zbytkové hraně a výšková funkce na vrcholech řídí, které zbytkové hrany lze tlačit. Funkce výšky se změní pomocí operace relabelu. Správné definice těchto operací zaručují, že výsledná funkce toku je maximální tok. |
Algoritmus push-relabel s FIFO pravidlo výběru vrcholu | Ó(PROTI3) | Varianta algoritmu push-relabel, která vždy vybírá naposledy aktivní vrchol a provádí operace push, dokud není přebytek pozitivní nebo nejsou z tohoto vrcholu přípustné zbytkové hrany. |
Algoritmus push-relabel s dynamickými stromy | Algoritmus staví stromy omezené velikosti na zbytkovém grafu týkajícím se funkce výšky. Tyto stromy poskytují víceúrovňové operace push. | |
Algoritmus KRT (King, Rao, Tarjan)[11] | ||
Algoritmus toku binárního blokování[12] | Hodnota U odpovídá maximální kapacitě sítě. | |
Algoritmus KRT (King, Rao, Tarjan) od Jamese B Orlina[9] | Orlinův algoritmus řeší maximální průtok dovnitř Ó(VE) čas na zatímco KRT to vyřeší Ó(VE) pro . |
Rozsáhlejší seznam viz Goldberg & Tarjan (1988).
Věta o integrálním toku
Věta o integrálním toku to říká
- Pokud má každá hrana v síti toku integrální kapacitu, pak existuje integrální maximální tok.
aplikace
Problém s maximálním průtokem více zdrojů s více dřezy

Vzhledem k síti se sadou zdrojů a sada umyvadel místo pouze jednoho zdroje a jednoho jímky musíme najít maximální průtok napříč . Můžeme transformovat problém s více zdroji s více jímkami na problém s maximálním tokem přidáním a konsolidovaný zdroj připojení ke každému vrcholu v a a konsolidovaný dřez spojeny každým vrcholem v (také známý jako supersource a supersink) s nekonečnou kapacitou na každém okraji (viz obr. 4.1.1.).
Minimální pokrytí cesty v směrovaném acyklickém grafu
Vzhledem k směrovaný acyklický graf , musíme najít minimální počet vrcholové disjunktní cesty pokrýt každý vrchol v . Můžeme sestrojit bipartitní graf z , kde
- .
Poté lze zobrazit pomocí Kőnigova věta, že má shodu velikosti kdyby a jen kdyby má vrcholový disjunktní kryt cesty velikosti , kde je počet vrcholů v . Proto lze problém vyřešit nalezením maximální shody mohutnosti v namísto.
Intuitivně, pokud dva vrcholy jsou spárovány , pak okraj je obsažen v . To vidět je vrchol-disjunktní, zvažte následující:
- Každý vrchol v může být neodpovídající v , v takovém případě nezůstanou žádné hrany v ; nebo může být uzavřeno, v takovém případě zbývá právě jedna hrana v . V obou případech žádný vrchol neopustí více než jedna hrana v .
- Podobně pro každý vrchol v - pokud je uzavřeno, je do něj jediná příchozí hrana v ; v opačném případě nemá v sobě žádné příchozí hrany .
Žádný vrchol tedy nemá dva příchozí nebo dva odchozí okraje , což znamená všechny cesty v jsou vrchol-disjunktní.
Bipartitní shoda s maximální mohutností

Vzhledem k bipartitní graf , musíme najít a maximální shoda mohutnosti v , to je shoda, která obsahuje největší možný počet hran. Tento problém lze přeměnit na problém s maximálním tokem vytvořením sítě , kde
- obsahuje hrany v režie od na .
- pro každého a pro každého .
- pro každého (Viz obr. 4.3.1).
Pak hodnota maximálního průtoku dovnitř se rovná velikosti maximální shody v .
Maximální průtok s kapacitami vrcholů

Nechat být sítí. Předpokládejme, že v každém uzlu je kromě kapacity hrany také kapacita, tj. Mapování tak, že tok musí uspokojit nejen omezení kapacity a zachování toků, ale také omezení kapacity vrcholů
Jinými slovy, množství toku procházejícího vrcholem nemůže překročit jeho kapacitu. Chcete-li zjistit maximální průtok napříč , můžeme problém transformovat na problém maximálního toku v původním smyslu rozšířením . Nejprve každý je nahrazen a , kde je spojen hranami vstupujícími do a je připojen k hranám vycházejícím z , poté přiřaďte kapacitu ke spojovací hraně a (viz obr. 4.4.1). V této rozšířené síti je omezení kapacity vrcholů odstraněno, a proto lze problém považovat za problém původního maximálního toku.
Maximální počet cest od s do t
Vzhledem k orientovanému grafu a dva vrcholy a , musíme najít maximální počet cest z na . Tento problém má několik variant:
1. Cesty musí být disjunktní. Tento problém lze transformovat na problém s maximálním tokem vytvořením sítě z , s a být zdrojem a jímkou a přiřazení každé hrany kapacitu . V této síti je maximální tok pokud existují okrajové disjunktní cesty.
2. Cesty musí být nezávislé, tj. Vrchol-disjunkt (kromě a ). Můžeme postavit síť z s kapacitami vrcholů, kde jsou kapacity všech vrcholů a všech hran . Pak se hodnota maximálního toku rovná maximálnímu počtu nezávislých cest od na .
3. Kromě cest, které jsou disjunktní od okraje a / nebo od vrcholu, mají cesty také omezení délky: počítáme pouze cesty, jejichž délka je přesně , nebo nanejvýš . Většina variant tohoto problému je NP-úplná, s výjimkou malých hodnot .[13]
Problém s uzavřením
A uzavření směrovaného grafu je sada vrcholů Ctak, aby nezůstaly žádné hrany C. The problém s uzavřením je úkolem najít uzávěr maximální nebo minimální hmotnosti ve vertexově váženém orientovaném grafu. To lze vyřešit v polynomiálním čase pomocí redukce na problém s maximálním průtokem.
Skutečné aplikace
Eliminace baseballu

V baseball eliminační problém existuje n týmy soutěžící v lize. V určité fázi ligové sezóny wi je počet výher a ri je počet her zbývajících pro tým i a rij je počet zbývajících her proti týmu j. Tým je vyřazen, pokud nemá šanci dokončit sezónu na prvním místě. Úkolem problému eliminace baseballu je určit, které týmy jsou v sezóně vyřazeny v každém bodě. Schwartz[14] navrhla metodu, která tento problém redukuje na maximální tok sítě. V této metodě je vytvořena síť k určení, zda tým k je vyloučeno.
Nechat G = (PROTI, E) být sítí s s,t ∈ PROTI je zdrojem a umyvadlem. Jeden přidá herní uzel {i,j} s i < j na PROTIa spojuje každou z nich z s o hranu s kapacitou rij - což představuje počet her mezi těmito dvěma týmy. Také přidáme týmový uzel pro každý tým a spojíme každý herní uzel {i,j} se dvěma týmovými uzly i a j zajistit, aby jeden z nich vyhrál. Není třeba omezovat hodnotu průtoku na těchto okrajích. Nakonec jsou hrany vytvořeny z uzlu týmu i do uzlu jímky t a kapacita wk+rk–wi je nastaven tak, aby zabránil týmu i od vítězství více než wk+rk.Nechat S být souborem všech týmů účastnících se ligy a nechat . V této metodě je to nárokovaný tým k není vyloučeno, právě když hodnota průtoku o velikosti r(S − {k}) v síti existuje G. V uvedeném článku je prokázáno, že tato hodnota průtoku je maximální hodnotou průtoku od s na t.
Plánování leteckých společností
V leteckém průmyslu je velkým problémem plánování letových posádek. Problém plánování leteckých společností lze považovat za aplikaci rozšířeného maximálního toku sítě. Vstupem tohoto problému je sada letů F který obsahuje informace o tom, kde a kdy každý let odlétá a přilétá. V jedné verzi plánování leteckých společností je cílem vytvořit proveditelný plán s maximálně k posádky.
K vyřešení tohoto problému se používá variace problém oběhu zvaný omezený oběh, což je zobecnění tok sítě problémy s přidaným omezením spodní hranice okrajových toků.
Nechat G = (PROTI, E) být sítí s s,t ∈ PROTI jako zdroj a uzly jímky. Pro zdroj a cíl každého letu i, jeden přidá dva uzly do PROTI, uzel si jako zdroj a uzel di jako cílový uzel letu i. Jeden také přidá následující hrany E:
- Okraj s kapacitou [0, 1] mezi s a každý si.
- Okraj s kapacitou [0, 1] mezi každým di a t.
- Okraj s kapacitou [1, 1] mezi každou dvojicí si a di.
- Okraj s kapacitou [0, 1] mezi každým di a sj, pokud zdroj sj je dosažitelný s přiměřeným časem a náklady z cíle letu i.
- Hrana s kapacitou [0, ∞ ] mezi s a t.
Ve zmíněné metodě je tvrzeno a prokázáno, že zjištění hodnoty toku ve výši k v G mezi s a t se rovná nalezení proveditelného rozvrhu letové sady F maximálně k posádky.[15]
Další verzí plánování leteckých společností je nalezení minimálního počtu posádek potřebných k provedení všech letů. Abychom našli odpověď na tento problém, bipartitní graf G' = (A ∪ B, E) je vytvořen tam, kde má každý let v sadě kopii A a nastavit B. Pokud stejné letadlo může provádět let j po letu i, i∈A je připojen k j∈B. Odpovídající G' vyvolává plán pro F a samozřejmě maximální bipartitní shoda v tomto grafu vytváří letový řád s minimálním počtem posádek.[15] Jak je uvedeno v aplikační části tohoto článku, bipartitní shoda s maximální mohutností je aplikací problému s maximálním tokem.
Problém oběhu a poptávky
Existují továrny, které vyrábějí zboží, a některé vesnice, kam je třeba zboží doručit. Jsou propojeny sítí silnic, přičemž každá silnice má kapacitu C pro maximální zboží, které jím může protékat. Problém je zjistit, zda existuje oběh, který uspokojuje poptávku. Tento problém lze transformovat do problému maximálního průtoku.
- Přidejte zdrojový uzel s a přidejte z něj hrany do každého uzlu továrny Fi s kapacitou stri kde stri je rychlost výroby v továrně Fi.
- Přidejte uzel jímky t a přidejte hrany ze všech vesnic protii na t s kapacitou di kde di je míra poptávky vesnice protii.
Nechat G = (PROTI, E) být touto novou sítí. Existuje oběh, který uspokojuje poptávku právě tehdy, když:
- Maximální hodnota průtoku (G) .
Pokud existuje oběh, pohled na řešení maximálního toku by poskytl odpověď na to, kolik zboží musí být odesláno na konkrétní silnici, aby byly splněny požadavky.
Problém lze rozšířit přidáním spodní hranice toku na některých okrajích.[16]
Segmentace obrazu


Ve své knize Kleinberg a Tardos představují algoritmus pro segmentaci obrazu.[18] Představují algoritmus pro nalezení pozadí a popředí v obraze. Přesněji řečeno, algoritmus bere bitmapu jako vstup modelovaný takto: Ai ≥ 0 je pravděpodobnost, že pixel i patří do popředí, bi ≥ 0 v pravděpodobnosti, že pixel i patří do pozadí a strij je trest, pokud jsou dva sousední pixely i a j jsou umístěny jeden v popředí a druhý v pozadí. Cílem je najít oddíl (A, B) sady pixelů, které maximalizují následující množství
- ,
Ve skutečnosti pro pixely v A (považováno za popředí), získáváme Ai; pro všechny pixely v B (považováno za pozadí), získáváme bi. Na hranici mezi dvěma sousedními pixely i a j, ztrácíme strij. Je to ekvivalentní k minimalizaci množství
protože

Nyní vytvoříme síť, jejíž uzly jsou pixel, plus zdroj a umyvadlo, viz obrázek vpravo. Připojíme zdroj k pixelu i o okraj váhy Ai. Spojíme pixel i k dřezu hranou váhy bi. Spojujeme pixel i na pixel j s váhou strij. Nyní zbývá vypočítat minimální snížení v této síti (nebo ekvivalentně maximální tok). Poslední obrázek ukazuje minimální řez.
Rozšíření
1. V problém toku minimálních nákladů, každá hrana (u, v) má také a nákladový koeficient Auv kromě své kapacity. Pokud je tok přes okraj Fuv, pak jsou celkové náklady AuvFuv. Je nutné najít tok dané velikosti ds nejmenšími náklady. Ve většině variant mohou být nákladové koeficienty buď kladné, nebo záporné. Pro tento problém existují různé algoritmy polynomiálního času.
2. Problém s maximálním průtokem lze rozšířit o disjunktivní omezení: a negativní disjunktivní omezení říká, že určitá dvojice hran nemůže mít současně nenulový tok; A pozitivní disjunktivní omezení říká, že u určité dvojice hran musí mít alespoň jedna nenulový tok. S negativními omezeními se problém stává silně NP-tvrdé i pro jednoduché sítě. S pozitivními omezeními je problém polynomiální, pokud jsou povoleny dílčí toky, ale mohou být silně NP-tvrdé když toky musí být integrální.[19]
Reference
- ^ A b C Schrijver, A. (2002). "K historii přepravy a problémům s maximálním průtokem". Matematické programování. 91 (3): 437–445. CiteSeerX 10.1.1.23.5134. doi:10,1007 / s101070100259. S2CID 10210675.
- ^ Gass, Saul I .; Assad, Arjang A. (2005). "Matematický, algoritmický a profesionální vývoj operačního výzkumu od roku 1951 do roku 1956". Komentovaná časová osa operačního výzkumu. International Series in Operations Research & Management Science. 75. str. 79–110. doi:10.1007 / 0-387-25837-X_5. ISBN 978-1-4020-8116-3.
- ^ A b Harris, T. E.; Ross, F. S. (1955). „Základy metody pro hodnocení kapacit železniční sítě“ (PDF). Memorandum o výzkumu.
- ^ A b Ford, L. R.; Fulkerson, D. R. (1956). Msgstr "Maximální tok sítí". Kanadský žurnál matematiky. 8: 399–404. doi:10.4153 / CJM-1956-045-5.
- ^ A b Ford, L.R., Jr.; Fulkerson, D.R., Toky v sítích, Princeton University Press (1962).
- ^ Sherman, Jonah (2013). "Téměř maximální průtok v téměř lineárním čase". Proceedings of the 54th Annual IEEE Symposium on Foundations of Computer Science. 263–269. arXiv:1304.2077. doi:10.1109 / FOCS.2013.36. ISBN 978-0-7695-5135-7. S2CID 14681906.
- ^ Kelner, J. A .; Lee, Y. T .; Orecchia, L .; Sidford, A. (2014). „Algoritmus téměř lineárního času pro přibližný maximální tok v neorientovaných grafech a jeho zobecnění více akomodací“ (PDF). Sborník z dvacátého pátého výročního sympozia ACM-SIAM o diskrétních algoritmech. p. 217. arXiv:1304.2338. doi:10.1137/1.9781611973402.16. ISBN 978-1-61197-338-9. S2CID 10733914. Archivovány od originál (PDF) dne 03.03.2016.
- ^ Knight, Helen (7. ledna 2014). „Nový algoritmus může dramaticky zefektivnit řešení problému„ maximálního toku ““. Zprávy MIT. Citováno 8. ledna 2014.
- ^ A b Orlin, James B. (2013). Msgstr "Maximální tok v čase O (nm) nebo lepší". Sborník ze 45. ročníku sympozia ACM o Sympóziu o teorii výpočetní techniky - STOC '13. STOC '13 Proceedings of the Forty-5th Annual ACM Symposium on Theory of Computing. str. 765–774. CiteSeerX 10.1.1.259.5759. doi:10.1145/2488608.2488705. ISBN 9781450320290. S2CID 207205207.
- ^ Malhotra, V.M .; Kumar, M. Pramodh; Maheshwari, S.N. (1978). „An algoritmus pro zjištění maximálních toků v sítích " (PDF). Dopisy o zpracování informací. 7 (6): 277–278. doi:10.1016/0020-0190(78)90016-9.
- ^ King, V .; Rao, S .; Tarjan, R. (1994). "Rychlejší deterministický algoritmus maximálního průtoku". Journal of Algorithms. 17 (3): 447–474. doi:10.1006 / jagm.1994.1044. S2CID 15493.
- ^ Goldberg, A. V.; Rao, S. (1998). "Za bariérou proti rozkladu toku". Deník ACM. 45 (5): 783. doi:10.1145/290179.290181. S2CID 96030.
- ^ Itai, A .; Perl, Y .; Shiloach, Y. (1982). "Složitost hledání maximálních disjunktních cest s omezeními délky". Sítě. 12 (3): 277–286. doi:10,1002 / net. 3230120306. ISSN 1097-0037.
- ^ Schwartz, B.L. (1966). "Možní vítězové v částečně dokončených turnajích". Recenze SIAM. 8 (3): 302–308. doi:10.1137/1008062. JSTOR 2028206.
- ^ A b Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, a Clifford Stein (2001). "26. Maximální průtok". Úvod do algoritmů, druhé vydání. MIT Press a McGraw-Hill. 643–668. ISBN 978-0-262-03293-3.CS1 maint: více jmen: seznam autorů (odkaz)
- ^ Carl Kingsford. „Rozšíření Max-flow: cirkulace s požadavky“ (PDF).
- ^ „Project imagesegmentationwithmaxflow, that contains the source code to produce these Illustration“. GitLab. Archivovány od originál dne 2019-12-22. Citováno 2019-12-22.
- ^ „Návrh algoritmu“. www.pearson.com. Citováno 2019-12-21.
- ^ Schauer, Joachim; Pferschy, Ulrich (01.07.2013). Msgstr "Problém maximálního toku s disjunktními omezeními". Journal of Combinatorial Optimization. 26 (1): 109–119. CiteSeerX 10.1.1.414.4496. doi:10.1007 / s10878-011-9438-7. ISSN 1382-6905. S2CID 6598669.
- Goldberg, A. V.; Tarjan, R. E. (1988). „Nový přístup k problému maximálního průtoku“. Deník ACM. 35 (4): 921. doi:10.1145/48014.61051. S2CID 52152408.
Další čtení
- Joseph Cheriyan a Kurt Mehlhorn (1999). Msgstr "Analýza pravidla výběru na nejvyšší úrovni v algoritmu max-flow před-push-push". Dopisy o zpracování informací. 69 (5): 239–242. CiteSeerX 10.1.1.42.8563. doi:10.1016 / S0020-0190 (99) 00019-8.
- Daniel D. Sleator a Robert E. Tarjan (1983). "Datová struktura pro dynamické stromy" (PDF). Journal of Computer and System Sciences. 26 (3): 362–391. doi:10.1016/0022-0000(83)90006-5. ISSN 0022-0000.
- Eugene Lawler (2001). "4. Toky sítě". Kombinatorická optimalizace: Sítě a matroidy. Doveru. 109–177. ISBN 978-0-486-41453-9.