Pređi na sadržaj

Edmondsov algoritam

S Vikipedije, slobodne enciklopedije

Ovaj članak je o algoritmu optimalnog grananja. Za algoritam maksimalnog poklapanja pogledajte Algoritam maksimalnog uparivanja.

U teoriji grafova, grani matematike, Edmondsov algoritam ili Ču-Liu/Edmondsov algoritam je algoritam za pronalaženje maksimalnog ili minimalnog optimalnog grananja. Ovaj algoritam je sličan problemu minimalnog razapinjućeg stabla, koji se tiče neusmerenih grafova. Ipak, kada su čvorovi povezani usmerenim granama sa težinskim koeficijentima, algoritam minimalnog razapinjućeg stabla se ne može koristiti.

Algoritam optimalnog grananja su predložili nezavisno Jeng-jin Ču (Yoeng-jin Chu) i Ceng-hong Liu (Tseng-hong Liu) 1965. godine, a zatim i Edmonds 1967. godine. Za pronalazak putanje maksimalne dužine, uzima se grana sa najvećim težinskim koeficijentom i povezuju se odgovarajuća dva čvora, zatim se uzima sledeća grana po težini, itd. Ako odabrana grana pravi petlju, uklanja se i bira se naredna grana. Pronalazak putanje minimalne dužine se vrši analogno, odabirom grane sa najmanjom težinom.

Složenost algoritma[uredi | uredi izvor]

Složenost ovog algoritma je reda . Postoji i brža implementacija, koju je predložio Robert Tarjan. Složenost tog algoritma je reda za retki graf, a reda za zbijeni graf. Taj algoritam je brz koliko i Primov algoritam za minimalno povezujuće stablo. 1986. godine , Gabov (Gabow), Galil (Galil), Spenser (Spencer), i Tarjan (Tarjan) su napravili bržu implementaciju, reda .

Algoritam[uredi | uredi izvor]

Opis[uredi | uredi izvor]

Algoritam je rekurzivan. Sa je označena funkcija koja za dati usmereni graf sa težinskim koeficijentima i čvorom koji predstavlja koren, vraća povezujuće stablo minimalne težine, sa korenom u .

Za dati usmereni graf sa težinskim koeficijentima i koren zamenimo bilo koji skup paralelnih grana (grana između dva ista čvora, u istom pravcu) jednom granom sa težinom jednakom najmanjoj težini u datom skupu grana.

Dalje, za svaki čvor različit od , obeležimo dolazeću granu najmanje težine. Označimo drugi kraj te grane sa . Grana je tako označena sa , a pridružena težina sa . Ako obeležene grane formiraju stablo najkraće putanje, je to stablo. U suprotnom, skup obeleženih grana formira bar jednu petlju. Neka je jedna od ovih petlji (nasumično odabrana). Definišemo usmereni graf sa težinskim koeficijentima, i korenom u prema sledećem uputstvu: čvorovi su čvorovi koji se ne nalaze u i novi čvor je označen sa .

Ako je grana u gde je i , onda treba uključiti u granu , i definisati .

Ako je grana u gde je i , onda treba uključiti u granu , i definisati .

Ako je grana u gde je i , onda treba uključiti u granu , i definisati .

U se ne uključuje nijedna druga grana.

Koren stabla je koren stabla .

Pozivom funkcije , nalazi se stablo najkraće putanje za . Prvo, označe se u stablu sve grane koje su i u , a koje su označene u stablu najkraće putanje(SNP) za . Takođe, označe se u sve grane iz . Dalje, pretpostavimo da je u SNP za , (jedinstvena) dolazeća grana u . Ta grana dolazi iz nekog para gde je i . Treba obrisati i označiti . Takođe, za svaku označenu u SNP za koja potiče od grane u gde je i , označiti granu . Sada skup označenih grana formira SNP, što je povratna vrednost .

Implementacija[uredi | uredi izvor]

Neka je BV skup čvorova i BE skup grana. Neka je v čvor, a e grana sa najvećom pozitivnom težinom koja povezuje v. Ci je petlja. G0 = (V0,E0) je originalni dijagram. ui je zamenski čvor za Ci.


i=0


A:
if  then goto B
for неки чвор  and  {
   
   нађи грану  тако да w(e) = max{ w(y,v)|(y,v)  Ei}
   if w(e) ≤ 0 then goto A
}
if  садржи петљу {
   i=i+1
   конструиши  сажимајући  на 
   измени BE, BV и тежинске коефицијенте
}

goto A


B:
while i ≠ 0 {
   реконструиши  и преименуј неке гране у BE
   if  је био корен излазног стабла BE {
        and 
   }else{
        and 
   }
   i=i-1
}
Максимална тежина гране  = 

Spoljašnje veze[uredi | uredi izvor]