ADS2 Jiří Kalvoda: Cvičení 4
Also available as: PDF Markdown
Informace k cv. jsou na https://kam.mff.cuni.cz/~jirikalvoda/vyuka/25z/ads2.
Toky v sítích
Ford-Fulkersonův algoritmus:
- Najdi (libovolnou) cestu zdroj–stok z nenasycených hran
- Spočítej, o kolik nejvýše lze na této cestě zvýšit tok
- Zvyš tok
- Opakuj, dokud nějaká cesta existuje
Hrana je nenasycená, pokud tok je menší než kapacita (může být způsobeno i tím, že něco teče v protisměru).
U úloh nezabývajících se Fordovým-Fulkersonůvým algoritmem můžete předpokládat, že existuje algoritmus, který pro zadanou síť najde maximální tok v polynomiálním čase vzhledem k počtu vrcholů a hran.
Úloha 1 (Pomalý vstup): Najděte příklad sítě s nejvýše 10 vrcholy a 10 hranami, na níž Fordův-Fulkersonův algoritmus může provézt více než milion iterací.
Úloha 2 (Oprava?): Ukázalo se, že Fordův-Fulkersonův algoritmus nevrátí maximální tok, pokud dovolíme zlepšovat tok pouze po směru hran. Opravíme tento problém, budeme-li uvažovat pro zlepšení toku nejkratší cesty?
Úloha 3 (Svišti): Na louce je svišťů a děr v zemi (obojí je zadáno jako body v rovině nebo raději body v nepříliš velké celočíselné mřížce). Když se objeví orel, zvládne svišť uběhnout pouze metrů, než bude uloven. Kolik maximálně svišťů se může zachránit útěkem do díry, když jedna díra pojme nejvýše jednoho sviště? A co když pojme svišťů?
Úloha 4 (Šachovnice s dírami): Mějme šachovnici velikosti , ve které chybí některá políčka. Chceme na ni postavit co nejvíce věží tak, aby se navzájem neohrožovaly. Věž nemůžeme položit na chybějící políčko a ohrožuje celý řádek a sloupec, na kterém stojí.
Úloha 5 (Hranově disjunktní cesty): Navrhněte algoritmus, který pro zadaný orientovaný graf a jeho vrcholy a nalezne největší možný systém hranově disjunktních cest z do . Jak se situace změní, pokud graf bude neorientovaný?
Úloha 6 (Vrcholově disjunktní cesty): Upravte předchozí algoritmus, aby našel dokonce vrcholově disjunktní cesty (až na a ).
Úloha 7 (Šachovnice se sloupy): Znovu chceme pokládat věže, ale tentokrát v šachovnici jsou sloupy. Věže pak neohrožují přes tyto sloupy. Navrhněte efektivní algoritmus, který takové rozestavění najde.
Úloha 8 (Nekonečno): Najděte síť s reálnými kapacitami, na níž Fordův-Fulkersonův algoritmus nedoběhne. Lze dokonce zařídit, aby k maximálnímu toku ani nekonvergoval.