V teorii optimalizace a teorii grafů je problémem maximálního toku najít takový tok transportní sítí , aby součet toků ze zdroje, nebo ekvivalentně, součet toků do jímky, byl maximální.
Problém maximálního průtoku je zvláštní případ složitějších problémů, jako je problém s cirkulací .
Po vstupu USA do druhé světové války v roce 1941 se matematik George Bernard Dantzig připojil ke statistickému úřadu letectva Spojených států ve Washingtonu DC . Od roku 1941 do roku 1946 vedl oddělení bojových analýz, kde pracoval na různých matematických problémech. [1] [2] Následně s využitím práce Danziga byl problém maximálního průtoku poprvé vyřešen při přípravě leteckého mostu během blokády Západního Berlína , která probíhala v letech 1948-1949. [3] [4] [5]
V roce 1951 George Dantzig poprvé formuloval problém obecně. [6]
V roce 1955 Lester Ford a Delbert Ray Fulkerson poprvé vytvořili algoritmus speciálně navržený k vyřešení tohoto problému . Jejich algoritmus se jmenoval Ford-Fulkersonův algoritmus . [7] [8]
V budoucnu bylo řešení problému mnohokrát vylepšeno.
V roce 2010 výzkumníci Jonathan Kelner a Aleksander Mądry z MIT spolu se svými kolegy Danielem Spielmanem z Yale University a Shen -Hua Teng z South The University of California poprvé po 10 letech prokázali další vylepšení algoritmu. [3] [9] [10]
Daná dopravní síť se zdrojem , jímkou a kapacitou .
Hodnota průtoku je součtem průtoků ze zdroje . V článku " Dopravní síť " je dokázáno , že se rovná součtu průtoků do stoky .Problém maximálního průtoku je najít takový průtok, kde je hodnota průtoku maximální.
Následující tabulka uvádí některé algoritmy pro řešení problému.
Metoda | Složitost | Popis |
---|---|---|
Lineární programování | Záleží na konkrétním algoritmu. U simplexové metody je exponenciální. | Prezentujte problém maximálního průtoku jako problém lineárního programování. Proměnnými jsou toky podél okrajů a omezení jsou zachování toku a omezení propustnosti. |
Ford-Fulkersonův algoritmus | Závisí na rozšiřujícím algoritmu hledání cesty. Vyžaduje takové vyhledávání. | Najděte jakoukoli rozšiřující cestu. Zvyšte průtok podél všech jeho okrajů o minimum jejich zbytkových kapacit. Opakujte, dokud existuje rozšiřující cesta. Algoritmus funguje pouze pro celočíselné šířky pásma. V opačném případě může běžet neomezeně dlouho, aniž by došlo ke správné odpovědi. |
Edmonds-Karpův algoritmus | Spustíme Ford-Fulkersonův algoritmus, pokaždé vybereme nejkratší rozšiřující cestu (nalezenou vyhledáváním do šířky ). | |
Dinitův algoritmus | nebo pro kapacity jednotek pomocí dynamických stromů Slethor a Tarjan [11] | Vylepšení Edmonds-Karpova algoritmu (ale chronologicky nalezeno dříve). Při každé iteraci pomocí prohledávání do šířky určujeme vzdálenosti od zdroje ke všem vrcholům zbytkové sítě. Sestrojíme graf obsahující pouze takové hrany zbytkové sítě, na kterých se tato vzdálenost zvětší o 1. Z grafu vyjmeme všechny slepé vrcholy s hranami, které k nim přiléhají, dokud se všechny vrcholy nestanou slepými. (Slepá ulička je vrchol, kromě zdroje a jímky, který neobsahuje jedinou hranu nebo z něj žádné hrany nevycházejí.) Na výsledném grafu najdeme nejkratší rozšiřující cestu (bude to libovolná cesta od s do t). Ze zbytkové sítě vyloučíme hranu s minimální kapacitou, opět vyloučíme vrcholy slepé uličky a tak dále, dokud nevznikne rozšiřující cesta. |
Preflow Push Algorithm | Funguje na předběžném toku namísto proudu. Rozdíl je v tom, že pro jakýkoli vrchol u, kromě zdroje a jímky, musí být součet průtoků vstupujících do něj pro tok přísně nulový (podmínka zachování toku) a pro předtok musí být nezáporný. Tento součet se nazývá nadměrný tok k vrcholu a vrchol s kladným nadměrným tokem se říká , že přetéká . Navíc pro každý vrchol algoritmus ukládá další charakteristiku, výšku , což je nezáporné celé číslo. Algoritmus používá dvě operace: push , kdy se tok podél hrany směřující z vyššího do nižšího vrcholu zvětší o maximální možnou hodnotu, a lift , kdy se zvedne přetékající vrchol, ze kterého není možné tlačit kvůli nedostatečné výšce. . Zatlačení je možné, když hrana patří do zbytkové sítě, vede z vyššího vrcholu do nižšího a původní vrchol přetéká. Zvedání je možné, když je zvedáný vrchol plný, ale žádný z vrcholů, do kterých z něj vedou okraje zbytkové sítě, není níže než on. Provádí se do výšky o 1 větší, než je minimum výšek těchto vrcholů. Zpočátku je výška zdroje V, podél všech hran vycházejících ze zdroje protéká maximální možný průtok a zbývající výšky a průtoky jsou nulové. Operace tlačení a zvedání se provádějí tak dlouho, jak je to možné. | |
Algoritmus "zvednout na začátek" | nebo pomocí dynamických stromů | Varianta předchozího algoritmu, která zvláštním způsobem definuje pořadí operací tlačení a zvedání. |
Algoritmus binárního blokovacího toku [1] |
Podrobnější seznam viz [2] a Seznam algoritmů pro zjištění maximálního průtoku .
Pokud jsou propustnosti celočíselné, maximální průtok je také celé číslo.
Věta vyplývá např. z Ford-Fulkersonovy věty .
Některá zobecnění problému maximálního průtoku lze snadno zredukovat na původní problém.
Pokud existuje více než jeden zdroj, přidejte nový vrchol S, ze kterého uděláme jediný zdroj. Ke každému ze starých zdrojů přidáváme hrany s nekonečnou kapacitou od S.
Podobně, je-li více jímek, přidáme nový vrchol T, ze kterého uděláme jedinou výlevku. K T přidáme hrany s nekonečnou kapacitou z každého ze starých dřezů.
Každá neorientovaná hrana (u, v) je nahrazena dvojicí usměrněných hran (u, v) a (v, u).
Každý vrchol v s omezenou kapacitou rozdělíme na dva vrcholy v in a v out . Všechny hrany zahrnuté do v před rozdělením jsou nyní zahrnuty do v v . Všechny hrany, které vznikly z v před rozdělením, nyní pocházejí z v out . Přidejte hranu (v in ,v out ) s kapacitou .
V této verzi problémového prohlášení je hodnota toku každé hrany navíc zespodu omezena funkcí . Hodnota toku pro žádnou hranu tedy nemůže překročit její kapacitu, ale nemůže být menší než stanovené minimum, tzn. . K vyřešení problému je nutné transformovat původní dopravní síť na dopravní síť následovně:
V B je definován tok, který splňuje podmínku omezení propustnosti hran zespodu právě tehdy, když je definován maximální tok, ve kterém jsou všechny okraje formy a "saturovány". Díky této konstrukci bude algoritmus pro nalezení toku ohraničeného zdola následující:
Tato varianta úlohy je shodná s předchozí s tím rozdílem, že hodnota průtoku pro každou hranu může být také rovna , tzn. nebo . Navzdory mírné změně podmínky neexistuje polynomické řešení tohoto problému, pokud třídy P a NP nejsou stejné . Jako důkaz tvrzení lze uvést polynomiální redukci problému Exact-3-SAT .