Dinit algoritmusa

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. május 24-én felülvizsgált verziótól ; az ellenőrzések 3 szerkesztést igényelnek .

A Dinitz-algoritmus egy polinomiális algoritmus a szállítási hálózatban a maximális áramlás meghatározására , amelyet 1970-ben Efim Dinitz szovjet (később izraeli) matematikus javasolt . Az algoritmus időbonyolultsága . Ilyen becslést kaphatunk a segédhálózat és a blokkoló (pszeudo-maximális) áramlás fogalmának bevezetésével . Az egységnyi sávszélességű hálózatokban erősebb az időbonyolultsági becslés: .

Leírás

Legyen  egy közlekedési hálózat , amelyben és  az áteresztőképesség és az élen áthaladó áramlás .

A maradék sávszélesség a következőképpen definiált  leképezés :
  1. Ha , Más forrásokban
  2. másképp.
Maradékhálózat  - grafikon , ahol . A komplementer útvonal  egy útvonal a maradék gráfban . Legyen  a legrövidebb út hossza -tól -ig a gráfban . Ekkor a gráf segédhálózata  a gráf , ahol . A blokkoló áramlás  olyan áramlás , amelyben a c gráf nem tartalmaz útvonalat.

Algoritmus

Dinit algoritmusa

Bemenet : Hálózat . Kimenet : maximális áramlás .
  1. Telepítse mindegyikhez .
  2. Hozzon létre grafikonból . Ha , leállítás és kimenet .
  3. Keresse meg a blokkoló szálat a következőben .
  4. Növelje az áramlást áramlással, és folytassa a 2. lépéssel.

Elemzés

Megmutatható, hogy minden alkalommal, amikor a forrástól a nyelőig vezető legrövidebb úton lévő élek száma legalább eggyel nő, így nincs több blokkoló folyam az algoritmusban, ahol  a hálózat csúcsainak száma. A segédhálózat szélesség-első időben történő bejárással építhető fel , és a blokkoló áramlás a gráf minden szintjén időben megtalálható . Ezért a Dinits algoritmus futási ideje .

A dinamikus fák nevű adatstruktúrák segítségével időben meg lehet találni a blokkoló áramlást az egyes fázisokon, majd a Dinitz-féle algoritmus futási idejét -re javítani .

Példa

Az alábbiakban a Dinitz-féle algoritmus szimulációja látható. A segédhálózatban a piros címkés csúcsok az értékek . A blokkolószál kék színnel van jelölve.

egy.

Egy blokkolószál útvonalakból áll:

  1. 4 áramlási egységgel,
  2. 6 áramlási egységgel, ill
  3. 4 áramlási egységgel.

Ezért a blokkoló áramlás 14 egységet tartalmaz, az áramlás értéke pedig 14. Vegye figyelembe, hogy a komplementer útvonalnak 3 éle van.

2.

Egy blokkolószál útvonalakból áll:

  1. 5 áramlási egységgel.

Ezért a blokkoló áramlás 5 egységet tartalmaz, és az áramlás értéke 14 + 5 = 19. Vegye figyelembe, hogy a komplementer útvonalnak 4 éle van.

3.

A készlet nem érhető el a hálózaton . Ezért az algoritmus megáll, és a maximális 19 nagyságú áramlást adja vissza. Vegye figyelembe, hogy minden blokkoló folyamban a komplementer útvonal éleinek száma legalább eggyel megnövekszik.

Történelem

A Dinitz-algoritmust 1970-ben az egykori szovjet tudós, Efim Dinitz tette közzé, aki ma a Ben-Gurion Egyetem (Izrael) Számítógép-mérnöki Karának tagja, korábban, mint az 1972-ben megjelent Edmonds-Karp algoritmust , de korábban létrehozott. Önállóan kimutatták, hogy a Ford-Fulkerson algoritmusban , ha a komplementer út a legrövidebb, a komplementer út hossza nem csökken.

Dinitz-algoritmus terjedéssel

Az algoritmus időbeli összetettsége csökkenthető a blokkoló szál keresési folyamatának optimalizálásával. Ehhez be kell vezetni a potenciál fogalmát . Az élpotenciál , a csúcspotenciál pedig . Ugyanezen logika szerint a . A fejlesztés ötlete az, hogy a segédhálózatban egy minimális pozitív potenciállal rendelkező csúcsot keressünk, és sorok segítségével blokkoló áramlást építsünk ki rajta .

Bemenet : Hálózat . Kimenet : maximális áramlás .
  1. Telepítse mindegyikhez .
  2. Hozzon létre grafikonból . Ha , leállítás és kimenet .
  3. Telepítse mindegyikhez .
  4. Határozza meg az egyes csúcsok potenciálját!
  5. Mindaddig, amíg van egy olyan csúcs , amely :
    1. Határozza meg az áramlást a -tól való előrehaladás segítségével .
    2. Határozza meg az áramlást a visszaszaporítás segítségével .
    3. Egészítse ki az adatfolyamot streamekkel és .
  6. Növelje az áramlást áramlással, és folytassa a 2. lépéssel.

Az előre, illetve a visszaszaporító algoritmusok arra szolgálnak, hogy megtalálják az oda és onnan tartó útvonalakat . Példa a közvetlen terjesztési algoritmusra sorokat használva:

Bemenet : Segédhálózat , olyan csúcspont , hogy . Kimenet : egy áramlás a forrástól a csúcsig , amely egy blokkoló folyam része.
  1. Telepítés mindenkinek : .
  2. Telepítse és .
  3. Hozzáadás a sorhoz .
  4. Amíg a sor nem üres:
    1. Állítsa be az értéket a sor utolsó elemére.
    2. Viszlát :
      1. Minden élhez :
      2. .
      3. Frissítés .
      4. Frissítés .
      5. Telepítse .
      6. Ha és dequeue . _

Tekintettel arra, hogy a blokkoló folyam keresésének minden iterációjában legalább egy csúcs "telített", ez a legrosszabb eset iterációival fejeződik be, amelyek mindegyike a csúcsok maximális számát veszi figyelembe. Legyen a "telített" élek száma a blokkoló szál keresésének minden -edik iterációjában. Ekkor az aszimptotikus komplexitása , ahol a csúcsok száma és a gráf éleinek száma. Így a Dinitz-féle szórási algoritmus aszimptotikus komplexitása egyenlő -val , mivel a blokkoló áramlás legfeljebb csúcsokon haladhat át .

Irodalom

Linkek