Edmonds-algoritmus

Innen: testwiki
Ugrás a navigációhoz Ugrás a kereséshez

A gráfelméletben az Edmonds-algoritmus vagy Chu–Liu/Edmonds-algoritmus egy olyan algoritmus, amely a minimális feszítőfa megtalálására szolgál (ezt néha optimális elágazásnak nevezik). A feszítőfa olyan irányított fa, amelyben van egy speciális, gyökérnek nevezett pont, amelyből minden pontba vezet irányított út. Ez a minimális feszítőfa probléma irányított analógja. Az algoritmust először Yoeng-Jin Chu és Tseng-Hong Liu (1965), majd Jack Edmonds (1967) javasolta.

Algoritmus

Az algoritmus bemenetként irányított gráfot kap D=V,E ahol V a csúcsok halmaza és E a irányított élek halmaza, megkülönböztetett csúcs rV amelyet gyökérnek hívnak, és egy valós értékű súlyt (költséget) w(e) minden élre eE. Visszaad egy feszítőfát A-t mely r gyökerű, minimális súlyú (költségű), ahol a fenyő súlya (költsége) a fenyőt meghatározó élek súlyának összege w(A)=eAw(e).

Az algoritmus rekurzív. Legyen f(D,r,w) az a függvény, mely egy r gyökerű, minimális súlyú (költségű) feszítőfát ad vissza. Először távolítsunk el minden élt E-ből ami r-be mutat. A párhuzamos éleket (ugyanazon irányú csúcspárok közötti élek ugyanabba az irányba) kicserélhetjük egyetlen élre is, amelynek súlya (költsége) megegyezik a párhuzamos élek súlyának minimumával.

Ezután a v a gyökéren kívüli csúcsokhoz keressük meg a legkisebb súlyú (költségű) beérkező élt v (több lehetőségnél bármelyiket). Legyen ennek a élnek a forrásának jele π(v). Ha az élek halmaza P={(π(v),v)vV{r}} nem tartalmaz kört, akkor f(D,r,w)=P.

Másképpen fogalmazva, P legalább egy kört tartalmaz. Tetszőlegesen válasszunk egyet a körök közül és hívja meg C-re. Most meghatározunk egy új súlyozott irányított gráfot D=V,E amelyben a kör C "csúcsra" van kötve, a következők szerint:

A V-ben lévő csúcsok nem C-ben lévő csúcsai V-nek, és egy új csomópont jelölje vC.

  • Ha (u,v) egy él a E-ben úgy hogy uC és vC (a ciklusban lévő él), és E-ben új él e=(u,vC), akkor w(e)=w(u,v)w(π(v),v).
  • Ha (u,v) egy él a E-ben úgy hogy uC és vC (a cikluson kívül eső él), és E-ben új él e=(vC,v), akkor w(e)=w(u,v).
  • Ha (u,v) egy él a E-ben úgy hogy uC és vC (a cikluson kívül eső él), és E-ben új él e=(u,v), akkor w(e)=w(u,v).

E-ben minden élről tudjuk hogy melyik élnek felel meg E-ben.

Ezután keressük meg D-nek minimális feszítőfáját A-t sz f(D,r,w) hívásával. Mivel A egy feszítőfa, minden csúcsnak pontosan egy bejövő éle van. Legyen(u,vC) legyen az egyedi bejövő él vC A-be. Ez az él egy élnek felel meg (u,v)E é svC. Távolítsuk el az élt (π(v),v) C-től, megszakítva a kört. Jelöljük be az összes fennmaradó élt C-ben. A minden éle megfelel egy E-beli élnek. Határozzuk meg f(D,r,w) a megjelölt élek halmazát, amelyek minimális feszítőfát képeznek.

Vegyük figyelembe hogy f(D,r,w) meghatározása az alábbiak szerint történik: f(D,r,w), D szigorúan kevesebb csúccsal rendelkezik, mint D. f(D,r,w) értéke egy csúcsú gráfra triviális (éppen ez D maga), tehát biztosan véget ér a rekurzív algoritmus.

Futási idő

Ennek az algoritmusnak a futási ideje: O(EV). Az algoritmus gyorsabb változata Robert Tarjan implementációja O(ElogV) futási idővel rendelkezik ritka gráfokra és O(V2) sűrű gráfokra. Ez olyan gyors, mint Prim algoritmusa egy irányítatlan minimális feszítőfára. Gabow, Galil, Spencer, Compton és Tarjan 1986-ban kidolgoztak egy gyorsabb O(E+VlogV) idejű algoritmust.

Irodalom

Fordítás

Sablon:Fordítás

További információk