Dinitzův algoritmus je polynomiální algoritmus pro nalezení maximálního toku v dopravní síti , navržený v roce 1970 sovětským (později izraelským) matematikem Efimem Dinitzem . Časová složitost algoritmu je . Takový odhad lze získat zavedením pojmů pomocná síť a blokující (pseudomaximální) tok . V sítích s jednotkovou šířkou pásma existuje silnější odhad časové složitosti: .
Dovolit být dopravní síť , ve které a jsou, v tomto pořadí, propustnost a tok přes okraj .
Zbytková šířka pásma je mapování definované jako:Dinitův algoritmus
Vstup : Síť . Výstup : maximální průtok .Je možné ukázat, že pokaždé, když se počet hran na nejkratší cestě od zdroje k jímce zvýší alespoň o jednu, takže v algoritmu již nejsou žádné blokující toky, kde je počet vrcholů v síti. Pomocná síť může být vybudována procházením v čase do šířky a blokovací tok na každé úrovni grafu lze nalézt v čase . Proto je doba běhu algoritmu Dinits .
Pomocí datových struktur nazývaných dynamické stromy je možné najít blokující tok v každé fázi v čase , poté lze dobu běhu Dinitzova algoritmu zlepšit na .
Níže je simulace Dinitzova algoritmu. V pomocné síti jsou vrcholy s červenými štítky hodnotami . Blokovací závit je označen modře.
jeden. | |||
---|---|---|---|
Blokující vlákno se skládá z cest:
Blokující tok tedy obsahuje 14 jednotek a hodnota toku je 14. Všimněte si, že doplňková cesta má 3 hrany. | |||
2. | |||
Blokující vlákno se skládá z cest:
Blokující tok tedy obsahuje 5 jednotek a hodnota toku je 14 + 5 = 19. Všimněte si, že komplementární cesta má 4 hrany. | |||
3. | |||
Akcie nejsou dostupné v síti . Proto se algoritmus zastaví a vrátí maximální tok o velikosti 19. Všimněte si, že v každém blokovacím toku se počet hran v komplementární cestě zvýší alespoň o jednu. |
Dinitzův algoritmus byl publikován v roce 1970 bývalým sovětským vědcem Efimem Dinitzem, který je nyní členem Fakulty počítačového inženýrství na Ben-Gurionově univerzitě (Izrael), dříve než algoritmus Edmonds-Karp , který byl publikován v roce 1972, ale vytvořené dříve. Nezávisle na sobě ukázali, že v případě Ford-Fulkersonova algoritmu , pokud je komplementární cesta nejkratší, délka komplementární cesty se nezmenšuje.
Časovou složitost algoritmu lze snížit optimalizací procesu hledání blokujícího vlákna. K tomu je nutné zavést pojem potenciál . Okrajový potenciál je a vrcholový potenciál je . Podle stejné logiky a . Myšlenkou vylepšení je hledat v pomocné síti vrchol s minimálním kladným potenciálem a pomocí front vybudovat blokovací tok přes něj .
Vstup : Síť . Výstup : maximální průtok .Algoritmy dopředného a zpětného šíření slouží k nalezení cest z do az do . Příklad algoritmu přímého šíření pomocí front:
Vstup : Pomocná síť , vrchol takový, že . Výstup : Tok od zdroje k vrcholu , který je součástí blokujícího toku.Vzhledem k tomu, že v každé iteraci hledání blokujícího toku je "nasycen" alespoň jeden vrchol, je dokončován v nejhorších iteracích, z nichž každý bere v úvahu maximum vrcholů. Nechť je počet "nasycených" hran v každé -té iteraci hledání blokujícího vlákna. Pak je jeho asymptotická složitost , kde je počet vrcholů a počet hran v grafu. Asymptotická složitost Dinitzova algoritmu šíření je tedy rovna , protože blokovací tok může procházet nanejvýš vrcholy.