Toky
Algoritmom pre hľadanie maximálneho toku v grafe sú venované dve prednášky a cvičenia.
V texte sa odkazujem na slajdy z prednášky, s. 491-633. Plný text k slajdom nájdete v učebnici KT Kleinberg, Tardos: Algorithm Design. Popis algoritmov nájdete aj v učebnici CLRS Cormen, Leiserson, Rivest, Stein: Introduction to Algorithms. Odkaz na demonštráciu výpočtu algoritmov nájdete na visualgo.net, využiť môžete aj demo k slajdom a vizualizáciu Push Relabel metódy.
História problému a motivácie k jeho skúmaniu sú vo videu
Formulácia problému maximálneho toku je na slajdoch 491-503. Duálnym problémom k maximálnemu toku je problém minimálneho rezu. Algoritmy v skutočnosti riešia obidva problémy. Vzťah medzi nimi je kľúčový pre dôkaz korektnosti.
Pre riešenie problému sa používajú dve základné metódy: metóda Forda a Fulkersona a metóda Push Relabel (aka Goldbergova a Tarjanova metóda). Spresnením metód dostávame celý rad rôznych algoritmov, postupne sa zoznámime s tými najzákladnejšími.
Metóda Forda a Fulkersona
- Kapacity sú prirodzené čísla: v priebehu celého výpočtu je tok celočíselný a v každej iterácii sa zvýši jeho hodnota aspoň o 1 ==> výpočet skončí. Tzv. integrality invariant a theorem sú formulované na slajde 540. Budeme ich často využívať!
- Kapacity sú racionálne čísla: kapacity prenásobíme vhodnou konštantou a prevedieme na prípad prirodzených čísel.
- Kapacity sú iracionálne čísla: výpočet môže cykliť pretože hodnota toku sa v každej iterácii bude zvyšovať o stále menšiu hodnotu. Príklad siete a nekonečného výpočtu nájdete v učebnici J. Ericksona na strane 335 alebo na wikipedii
- cesta s maximálnou reziduálnou kapacitou
- cesta s dostatočne veľkou reziduálnou kapacitou
- cesta s minimálnym počtom hrán
Metóda Push Relabel (Goldbergova)
Varianty problému maximálneho toku
Pri riešení problémov často narazíme na situáciu, keď by sa nám hodilo, aby sieť resp. tok mali špecifické vlastnosti. Ukážeme si rôzne varianty problému maximálneho toku ktoré dokážeme riešiť tak, že ich prevedieme na základnú variantu.
- Násobné zdroje a stoky, viz sl. 626-627.
- Cirkulácie s potrebami a požiadavkami (circulations with supplies and demands), viz sl. 629-631. Umožňujú modelovať situácie v ktorých nie je rovnováha medzi prítokom a odtokom z vrchola. Pozor, hľadáme cirkuláciu a nie maximálny tok!
- Dolné ohraničenia kapacít, viz sl.632-633. Umožňujú formulovať požiadavky na veľkosť toku. Pozor, aj v tomto prípade je úloha formulovaná ako existencia cirkulácie.
Aplikácie
Algoritmom pre výpočet maximálneho toku venujeme veľkú pozornosť preto, že veľa reálnych problémov je možné previesť na problém toku. Asi najznámejšie a najčastejšie používané sú redukcie problémov maximálneho párovania v bipartitnom grafe a počtu hranovo disjunkných ciest. Popis redukcií nájdete na slajdoch 610-616 resp. 619-623. Všimnite si, že v oboch prípadoch má popis redukcie rovnakú schému.
- Bipartitnému grafu G priradíme sieť G' (sl. 612).
- Ukážeme, že pre každé párovanie v G veľkosti k existuje v G' celočíselný tok s hodnotou k.
- Ukážeme, že každému celočíselnému toku v G' s hodotou k zodpovedá párovanie v G veľkosti k.
- Z 3 a 4 vyplýva, že maximálnemu celočíselnému toku zv G' zodpovedá párovanie v G s maximálnou veľkosťou.
- Ako posledný krok zostáva ukázať, že v sieti G' existuje taký maximálny tok, ktorý je celočíselný a že algoritmus FF vypočíta maximálny celočíselný tok v G'. To je ale tvrdenie Integrality Invariant a Theorem, slajd 540.
Ďalším aplikáciam sú venované cvičenia. Komentáre k jednotlivým príkladom:
- změny v síti - audiokomentár resp. Solved Excercise 1, p. 411, KT
- pokrytí šachovnice dominem - audiokomentár
- pokrytí cykly - audiokomentár
- umisťování kamenů na mřižku - audiokomentár
- výběr projektů - KT, kapitola 7.11
- eliminace týmů v baseballu - KT, kapitola 7.12
- plánování letecké dopravy - KT, kapitola 7.9
Veľa ďalších rôznych zaujímavých príkladov (riešených aj neriešených) nájdete v odkazovanej učebnici.