GRAFOVSKI ALGORITMI OPTIMIZACIONI ALGORITMI Optimizacioni problemi koriste teinske
GRAFOVSKI ALGORITMI
OPTIMIZACIONI ALGORITMI • Optimizacioni problemi koriste težinske grafove. • Optimizacioni zadatak se svodi na zahtev da se od polaznog grafa dođe do razapinjućeg stabla čija je težina najmanja. • • 1. 2. 3. U praksi ovakvih problema ima mnogo. Postoje mnogi algoritmi za njihovo rešavanje, kao što su naprimer: Kruskalov, Primov, Dijkastrin i mnogi drugi.
PRIMOV ALGORITAM • • • Tokom svoje kаrijere u Bell Labs, Robert Prim je zаjedno sа kolegom DŽozefom Kruskаlom rаzvio dvа rаzličitа аlgoritmа (vidi pohlepni аlgoritаm) zа pronаlаženje minimаlnog razapetog stаblа u težinskom grаfu, To je bio glаvni kаmen spoticаnjа u dizаjnu rаčunаrskih mrežа. Primov аlgoritаm je prvobitno pronаšаo mаtemаtičаr. Bojteh Jаrnik 1930. godine Nezаvisno od njegа gа je Prim otkrio 1957. godine. Edsher Dаjkstrа gа je ponovo pronаšаo kаsnije, 1959. godine. Zbog togа se ponekаd nаzivа DJP аlgoritаm ili Jаrnikov аlgoritаm.
• • • Primov algoritam je algoritam u teoriji grafova koja nalazi minimalno razapinjuće stablo za povezani težinski graf. To znači da nalazi podskup grana koje formiraju stablo koje uključuje sve čvorove, takav da je ukupna težina stabla minimalna. U početku je stablo prazno pa ga počinjemo graditi definisanjem proizvoljnog vrha koristeći skup čvorova početnog grafa. Postupak nastavljamo dodavanjem grana u stablo koji ima osobinu da povezuje jedan čvor koji se već nalazi u stablu i jedan koji se se u njemu ne nalazi, pazeći pri tome da je težina te grane bude minimalna. Na kraju definisani algoritam od dobijenog grafa daje traženo minimalno razapinjajuće stablo. Algoritam postepeno povećava veličinu stabla počevši od jednog čvora, dok ne poveže sve čvorove.
Algoritam se može prikazati sledećim opisom: • • • Izabere se proizvoljni čvor iz G i stavi se u stablo T. Izabere se grana najmanje težine iz skupa grana koje sadrže predhodni čvor i obrazuje se stablo. Dok je broj čvorova stabla < broja čvorova grafa, ponavljati postupak. Izaberi čvor koji ne pripada stablu, a susedan je nekom čvoru iz stabla, a pri tome je težina ivice koja ih spaja minimalna. Stavi taj čvor zajedno s njemu pripadajućim granom u stablo. Postupak ponavljati sve dok svaki čvor grafa G ne bude u stablu.
ALGORIRAM: • • Ulaz: Povezan težinski graf G(V, E) Inicijalizacija: V' = {x}, gde je x proizvoljan čvor iz V, E'= {} ponavljanje dok ne postane V'=V: – Izaberi granu (u, v) iz E sa minimalnom težinom, takvu da je u iz V' a v nije iz V' (ako ima više grana iste težine, izabrati proizvoljnu) – Dodaj v u V', i (u, v) u E' Izlaz: G(V', E') je minimalno razapinjuće stablo
• • Primer: Od datog težinskog grafa sa slike, formirati minimalno razapinjuće stablo koristeći Primov algoritam. • • • Biramo jedan čvor proizvoljno za početnu tačku, odnosno koren stabla. Neka je to čvor a. Iz čvora a možemo da stignemo u čvor b sa udaljenišću 2, zatim u čvor d sa udaljenošću 3 i u čvor e sa udaljenošću 1. Kako je čvor e na najmanjoj udaljenosti od a, pridodaćemo ga stablu kao i njegovu granu (a, e).
• Sada posmatramo oba čvora novog stabla a i e. Njihove udaljenosti do čvorova grafa su: iz a do b dužina 2, iz a u d dužina 3, iz čvora e u b dužina 4, iz e u dužina 3. Najmanja dužina je 2 iz a u b, tako da čvor b i granu (a, b) pridodajemo stablu.
• Proces se nastavlja. Sada posmatramo čvorove b i e. Najmanja udaljenost je iz b u d dužine 2, tako da stablu pridodajemo čvor d i granu (bd).
• I konačno, iz b u c možemo granom dužine 4, a iz d u c granom dužine 2, pa dodajemo čvor c i kraću granu (d, c).
• Zraženo minimalno razapeto stablo bi izgledalo :
Primer Primovog algoritma
KRUSKALOV ALGORITAM • Kruskalov algoritam je još jedan od algoritama koji određuju stablo minimalne dužine. • Algoritam: 1. Početi sa grafom koga sačinjavaju samo čvorovi grafa G, tj. iz originalnog grafa ukloniti sve grane. 2. Sortirati sve grane L grafa G u neopadajući niz prema njihovim dužinama. 3. Dodavati grane inicijalnom grafu po sortiranom redosledu vodeći računa o tome da se ne formira kontura. 4. Ponavljati korak 3 sve dok broj dodatih grana ne bude n - 1.
Primer: : Od datog težinskog grafa sa slike, formirati minimalno razapinjuće stablo Popisaćemo sve grane grafa i njihove dužine i sortirati ih u neopadajući niz: grane dužina sortirana grane dužina (a, b) (a, c) (b, d) (c, e) (c, f) (d, g) (e, h) (f, h) (h, i) (g, h) (d, e) 8 11 3 3 2 6 5 1 2 3 7 6 4 (e, h) (c, e) (f, h) (b, c) (b, d) (h, i) (d, e) (d, g) (g, h) (c, f) (g, i) (a, b) (a, c) 1 2 2 3 3 3 4 5 6 6 7 8 11
• Ne koristiti grane koje bi stvorile konture. To su grane (a, c), (d, e), (g, h), (g, i) i (c, f).
• Drugi način 1. Uočiti bilo koju konturu grafa. 2. Iz uočene konture isključiti granu sa najvećom dužinom. – Ponavljati korake 1 i 2 sve dok ne ostane n - 1 grana, tj. dok ne bude više kontura.
• • Počećemo od zadatog grafa i uočiti npr. konturu (a, b, c, a). Od grana koje sačinjavaju ovu konturu biramo onu sa najvećom dužinom i brišemo je. To je grana (a, c). Sve uočene konture i izbrisane grane su date u sledećoj tabeli: Kontura Grana koja se briše (a, b, c, a) (a, c) (b, c, e, d, b) (d, e) (b, c, e, h, g, d, b) (g, h) (b, c, e, h, i, g, d, b) (i, g) (c, e, h, f, c) (c, f) Nakon ovog postupka dobili smo graf
DIJKASTRIN ALGORITAM • • Dijkstrin algoritam, koji je dobio ime po holandskom informatičaru Edsheru Dejkstri (1930 -2002), i služi za nalaženje najkraćeg puta u grafu. Koristi se i za orijentisane i neorijentisane grafove sa nenegativnim težinama. Na primer, ako čvorove predstavimo kao gradove, a vrednosti grana kao rastojanja između onih gradova koji su direktno povezani, Dijkstrin algoritam nalazi najkraći put između dva grada, ili najbrži put, ili najjeftiniji put. Spada u takozvane pohlepne algoritme , kod kojih se pamti trenutna vrednost puta d kao najkraćeg puta, od polaznog čvora do nekod drugog na putu.
1. U startu svi čvorovi imaju koordinate Prva koordinata predstavlja dužinu puta, a druga predhodni čvor. 2. Početi od i promeniti ga u i ovaj čvor učiniti stalnim. Svi ostali čvorovi u ovom trenutku su privremeni. 3. Kada čvor postane stalan, za svaki čvor susedan sa , dodati razdaljinu m između i . Ako je ova vrednost manja od tekuće razdaljine dodeljene čvoru , zameniti tu razdaljinu ovim zbirom i drugu koordinatu iz uređenog para zameniti sa čvorom
3. Odrediti minimalnu razdaljinu dodeljenu privremenim čvorovima. Odgovarajući čvor zameniti stalnim. 4. Ako nije stalan čvor vratiti se na korak 2. 5. Ako jeste stalan čvor razdaljina dodeljena je najkraće rastojanje od i 6 Obrnutim obilaskom odvih čvorova dobija se najkraći put.
• Primer: Dat je težinski graf na slici. Naći najkraći put od A do F.
• • Krenućemo od A ka ostalim čvorovima. Svaki čvor ima dve koordinate, prva označava dužinu najkraćeg puta do tog čvora u tom trenutku, a druga označava predhodni čvor na najkraćem putu. Dok se put ne pronađe prva komponenta je , a druga je 0.
• Ako je A prvi čvor na putu, on postaje stalni čvor sa koordinatama (0, 0). • Pošto su čvorovi B i C susedni sa A, vrednost ( 5, A ) dodelimo uređenom paru čvora B, vrednost ( 6, A ) dodelimo uređenom paru čvora C. Uzimamo manju od dodeljnih vrednosti, a to je 5 i B( 5, A ) postaje stalan čvor.
• • • Vraćajući se na predhodni korak, razmatramo privremene čvorove C, D, E, F susedne sa B. U svakom slučaju dodajmo razdaljinu AB razdaljini do posmatranih čvorova. Za C imamo 5+3=8, za D imamo 5+7=12, za E imamo 5+2=7 i za F imamo 5+10=15. Pošto nova razdaljina ka C nije manja od one koja je već dodeljena ovom čvoru, ne menjamo vrednost C( 6, A ). Nove vrednosti za čvorove D, E, F su manje i one se dobijaju prolaskom kroz B i postaju nove D( 12, B ), E( 7, B ), F( 15, B )
• Uzimamo najmanju od razdaljina dodeljenih privremenim čvorovima, a to je 6 i C( 6, A ) postaje stalan čvor.
• Sada koristimo novi stalni čvor C. Korak 2 ne daje nove promene, a korakom 3 čvor E ( 7, B ) postaje novi stalni čvor.
• Nastavljajući imamo od F( 15, B ) do F( 11, E ) i F postaje stalan čvor. • Kada smo stigli do čvora F završili smo algoritam i dobijamo da je najkraće rastojanje od A do F 11. Najkraći put je dakle put ABEF.
• Korakom 2 dobijamo promenu od F( 15, B ) do F( 11, E ) i F postaje stalan čvor. • Kada smo stigli do čvora F završili smo algoritam i dobijamo da je najkraće rastojanje od A do F 11. Najkraći put je dakle put ABEF.
- Slides: 32