Dinicsův algoritmus - Dinics algorithm - Wikipedia
Dinicův algoritmus nebo Dinitzův algoritmus je silně polynomický algoritmus pro výpočet maximální průtok v toková síť, koncipovaný v roce 1970 izraelským (dříve sovětským) počítačovým vědcem Jefimem (Chaimem) A. Dinitzem.[1] Algoritmus běží čas a je podobný Algoritmus Edmonds – Karp, který běží dovnitř v tom, že používá nejkratší rozšiřující cesty. Zavedení pojmů graf úrovně a blokování toku umožnit Dinicovu algoritmu dosáhnout svého výkonu.
Dějiny
Yefim Dinitz vynalezl tento algoritmus v reakci na pre-class cvičení v Adelson-Velsky třída algoritmů. V té době nevěděl o základních skutečnostech týkajících se Algoritmus Ford-Fulkerson.[2]
Dinitz zmiňuje vynalézání svého algoritmu v lednu 1969, který byl publikován v roce 1970 v časopise Doklady Akademii Nauk SSSR. V roce 1974 Shimon Even a (jeho tehdejší Ph.D. student) Alon Itai na Technion v Haifě byli velmi zvědaví a zaujati Dinitzovým algoritmem stejně Alexander V. Karzanov související myšlenka blokování toku. Bylo však pro ně obtížné dešifrovat tyto dva články, z nichž každý byl omezen na čtyři stránky, aby splnil omezení deníku Doklady Akademii Nauk SSSR. Ani se nevzdal a po třech dnech úsilí se podařilo oběma papírům porozumět, kromě problému vrstvené údržby sítě. V příštích několika letech dokonce přednášel o „Dinicově algoritmu“, nesprávně vyslovil jméno autora a popularizoval jej. Even a Itai také přispěli k tomuto algoritmu kombinací BFS a DFS, což je způsob, jakým je nyní algoritmus běžně prezentován.[3]
Asi 10 let poté, co byl vynalezen Ford-Fulkersonův algoritmus, nebylo známo, zda by bylo možné provést ukončení v polynomiálním čase v obecném případě iracionálních okrajových kapacit. To způsobilo nedostatek jakéhokoli známého algoritmu polynomiálního času k vyřešení problému s maximálním tokem v obecných případech. Dinitzův algoritmus a Algoritmus Edmonds – Karp (publikováno v roce 1972) oba nezávisle ukázali, že v algoritmu Ford-Fulkerson, je-li každá rozšiřující cesta nejkratší, pak délka rozšiřujících cest neklesá a algoritmus vždy končí.
Definice
Nechat být sítí s a kapacita a tok okraje , resp.
- The zbytková kapacita je mapování definováno jako,
- -li ,
- v opačném případě.
- -li ,
- The zbytkový graf je nevážený graf , kde
- .
- An rozšiřující cesta je – cesta ve zbytkovém grafu .
- Definovat být délkou nejkratší cesty od na v . Pak graf úrovně z je graf , kde
- .
Algoritmus
Dinicův algoritmus
- Vstup: Síť .
- Výstup: An – tok maximální hodnoty.
- Soubor pro každého .
- Postavit z z . Li , stop a výstup .
- Najděte blokující tok v .
- Přidejte rozšířený tok podle a vraťte se ke kroku 2.
Analýza
Je možné ukázat, že počet vrstev v každém blokujícím toku se pokaždé zvýší alespoň o 1, a proto jich je nanejvýš blokování toků v algoritmu. Pro každého z nich:
- graf úrovně může být vytvořen vyhledávání na šířku v čas
- blokovací tok v grafu úrovně najdete v čas
s celkovou dobou chodu pro každou vrstvu. V důsledku toho je doba běhu Dinicova algoritmu .[6]
Pomocí datové struktury s názvem dynamické stromy, lze dobu běhu hledání blokovacího toku v každé fázi zkrátit na a proto lze dobu běhu Dinicova algoritmu zlepšit na .
Speciální případy
V sítích s jednotkovými kapacitami platí mnohem silnější časová vazba. Každý blokující tok najdete v času a lze ukázat, že počet fází nepřesahuje a . Algoritmus tedy běží čas.[7]
V sítích, které vznikají z bipartitní shoda problém, počet fází je omezen , což vede k časově omezené. Výsledný algoritmus je také známý jako Algoritmus Hopcroft – Karp. Obecněji platí, že tato vazba platí pro všechny jednotková síť - síť, ve které každý vrchol, s výjimkou zdroje a jímky, má buď jedinou vstupní hranu kapacity jedna, nebo jednu výstupní hranu kapacity jedna a všechny ostatní kapacity jsou libovolná celá čísla.[5]
Příklad
Následuje simulace Dinicova algoritmu. V grafu úrovně , vrcholy se štítky červeně jsou hodnoty . Cesty v modré barvě tvoří blokující tok.
1. | ![]() | ![]() | ![]() |
---|---|---|---|
Blokovací tok se skládá z
Blokovací tok má tedy 14 jednotek a hodnotu toku je 14. Všimněte si, že každá rozšiřující cesta v blokujícím toku má 3 hrany. | |||
2. | ![]() | ![]() | ![]() |
Blokovací tok se skládá z
Blokovací tok má tedy 5 jednotek a hodnotu toku je 14 + 5 = 19. Pamatujte, že každá rozšiřující cesta má 4 hrany. | |||
3. | ![]() | ![]() | ![]() |
Od té doby nelze dosáhnout v , algoritmus ukončí a vrátí tok s maximální hodnotou 19. Všimněte si, že v každém blokujícím toku se počet okrajů v rozšiřující cestě zvýší alespoň o 1. |
Viz také
Poznámky
- ^ Jefim Dinitz (1970). "Algoritmus pro řešení problému maximálního toku v síti s odhadem výkonu" (PDF). Doklady Akademii Nauk SSSR. 11: 1277–1280.
- ^ Ilan Kadar; Sivan Albagli (2009-11-27). „Dinitzův algoritmus pro nalezení maximálního toku v síti“.
- ^ Jefim Dinitz. „Dinitzův algoritmus: původní verze a sudá verze“ (PDF). Citovat deník vyžaduje
| deník =
(Pomoc) - ^ To znamená, že podgraf vyplývá z odstranění všech nasycených okrajů (tj. Všech okrajů takhle ) neobsahuje žádnou cestu z na . Jinými slovy blokování toku je taková, že každá možná cesta z na obsahuje nasycenou hranu.
- ^ A b Tarjan 1983, str. 102.
- ^ Yefim Dinitz (2006). „Dinitzův algoritmus: původní verze a sudá verze“ (PDF). v Oded Goldreich; Arnold L. Rosenberg; Alan L. Selman (eds.). Teoretická informatika: Pokusy o paměť Shimon Even. Springer. 218–240. ISBN 978-3-540-32880-3.
- ^ Dokonce, Šimon; Tarjan, R. Endre (1975). "Tok sítě a testování připojení grafu". SIAM Journal on Computing. 4 (4): 507–518. doi:10.1137/0204043. ISSN 0097-5397.
Reference
- Yefim Dinitz (2006). „Dinitzův algoritmus: původní verze a sudá verze“ (PDF). v Oded Goldreich; Arnold L. Rosenberg; Alan L. Selman (eds.). Teoretická informatika: Pokusy o paměť Shimon Even. Springer. 218–240. ISBN 978-3-540-32880-3.
- Tarjan, R. E. (1983). Datové struktury a síťové algoritmy.CS1 maint: ref = harv (odkaz)
- B. H. Korte; Jens Vygen (2008). „8.4 Blokování toků a Fujishigeův algoritmus“. Kombinatorická optimalizace: Teorie a algoritmy (Algorithms and Combinatorics, 21). Springer Berlin Heidelberg. 174–176. ISBN 978-3-540-71844-4.