Download as pdf or txt
Download as pdf or txt
You are on page 1of 18

1 Grafovski algoritmi

1.1 Uvod
U cilju potpunog razumijevanja grafovskih algoritama potrebno je denisati odgovarajuce
pojmove i utvrditi konvencije.
Predmet analize su samo prosti grafovi, koji nemaju petlje u pojedinim cvorovima
i nemaju ponavljajucih ivica
Sa n = [V [ i m = [E[ se oznacava broj cvorova (tjemena, V) i grana (linija, E)
respektivno; svaki cvor je obiljezen brojem od 1 do n osim ako nije potrebno izbjeci
konfuziju
Jedan od prvih problema koji se rjeava kada se racunarski simuliraju grafovski algoritmi
je predstavljanje odnosno na koji nacin tu informaciju prenijeti racunaru. Postoje tri
nacina:
Lista cvorova (edge list) : formira se jednostavna numerisana lista koja u nekim
slucajevima moze biti sortirana
Matrica povezanosti (adjacency matrix) : matrica n n koja se sastoji od 1 i 0 u
zavisnosti od toga da li su dva cvora povezana (1) ili ne (0). Primjer je
A =
0
B
B
@
0 1 1 1
1 0 0 0
1 0 0 1
1 0 1 0
1
C
C
A
U ovoj listi vrijedi da je a
ij
= a
ji
to znaci da je graf neusmjeren. U slucaju da je a
ij
,= a
ji
radi se o usmjerenom grafu.
Lista povezanosti (adjacency list) : lista od n elemenata u kojoj je svaki element
lista cvorova koji su povezani sa tim cvorom. Ako se radi o usmjerenom grafu tada
su elementi liste ureeni parovi
Ne postoji "najbolja" grafovska prezentacija jer to bitno zavisi od informacija koje se
prezentiraju putem grafa. Prezentacija je diktirana, prije svega, brojem veza a zatim
ostalim elementima.
Ako se svakoj grani dodijeli neka vrijednost tada se govori tezinskom grafu (ponderisani
graf, weighted graph, ...). "Tezina" je u tom slucaju velicina koja je od interesa kao
npr. rastojanje, cijena, vjerovatnoca i slicno. Namjena ovog teksta nije da se bavi inter-
nom prezentacijom. U tom smislu ce za svaki tip problema biti koritena odgovarajuca
notacija.
1
1.2 Algoritmi pretrazivanja
Problem pretrazivanja se formulie na sljedeci nacin : Ako su data dva cvora v; w V (G)
da li postoji putanja iz v do w ? Ako postoji, da li je ta putanja najkraca ?
Podrazumijeva se da je graf G neusmjeren.
Intuitivno, to se radi tako da se graf G pretrazi po svakoj ivici od v kako bi se vidjelo da
li se moze doci do w. Ako se radi na taj nacin potrebno je cuvati informaciju o tome koji
cvorovi su posjeceni kako bi se izbjegle beskonacne petlje.
Ideja je da se cvorovi koji jo nisu pretrazeni obiljeze Bijelo a pretrazeni Crno. Kad se
pretrazuju child cvorovi mora se osigurati da se ne obrauju ponovo pa se oznacavaju
kao Sivi. Inicijalno, svi cvorovi su oznaceni Bijelo.
Genericki (opti) algoritam pretrazivanja je u nastavku.
Oznaciti sve cvorove bijelo
Odabrati pocetni cvor i obojiti ga u Sivo
SveDok( postoji Sivi cvor )
{
Odaberi cvor i
Oznaci Bijele susjede Sivo
Obraditi cvor i
Oznaciti ga Crno
}
Kako bi se pokazala korektnost treba primijetiti da se kretanje odvija po principu
BijeloSivoCrno
i svaka iteracija petlje mijenja boju barem jednog cvora tako da se ne pojavljuje beskon-
acna petlja. Algoritam se zavrava samo ako su svi cvorovi oznaceni Bijelo ili Crno. Bilo
koji cvor koji je oznacen Bijelo ne moze biti susjed cvora koji je povezan sa startnim
cvorom (jer bi inace bio oznacen kao Sivo). Bilo koji cvor koji je oznacen Crno mora
biti povezan sa pocetnim cvorom. Stoga, putanja od cvora n do cvora m postoji ako i
samo ako je w oznacen kao Crno na kraju algoritma. U sutini, ovo je nacin da se nau
povezane komponente, zasebne cjeline grafa koje nisu povezane ivicama.
Na taj nacin je prezentiran prvi dio rjeenja problema.
Kad se ovaj algoritam zavri velicina numCC sadrzi ukupan broj povezanih komponenti
a cc [i] daje oznaku komponente koja je povezana sa cvorom i. Korak "Uzmi Sivi cvor j"
se moze raditi na dva nacina:
breadth-rst-search (BFS) : uzeti cvor koji je pronaen najranije. Ovo znaci da se
najprije obrauju svi cvorovi povezani sa startnim cvorom zatim cvorovi na distanci
2 itd.
depth-rst-search (DFS) : uzeti cvor koji je pronaen najkasnije. Ovo znaci da se
najprije istrazuju cvorovi koji su na dugackom lancu (sve dok se ne doe do kraja
lanca)
2
Denisati nizove cc [:] i boja [] duzine n
numCC 0
ZaSvaki (cvor i)
{
Obojiti Bijelo
}
ZaSvaki

Cvor i od 1 do n
{
AkoJe(boja [i]=Bijelo)
{
numCC numCC + 1
cc [i] numCC
boja [i] Sivo
SveDokJe (Postoji cvor Sivo)
{
Uzmi Sivi cvor j
Obojiti sve njegove Bijele susjede Sivo
cc [j] numCC
boja [j] Crno
}
}
}
Ova dva pristupa se bitno razlikuju po slozenosti i dinamici pretrazivanja i oba pristupa
imaju puno prakticnih primjena.
Prvi od njih ima slozenost O(n
2
) jer se koristi kvadratna matrica. Svaka ivica (grana)
se pretrazuje najvie dva puta. Algoritam ima prednosti ako je ema "rijetka". Putanja
koja se formira zove se stablo. Ako je graf pritom povezan to stablo se zove minimalno
razapinjuce stablo.
Drugi algoritam koristi strukturu koja se zove stek (engl. stack). Realizuje se operacijama
"stavi" (engl. push), koja dodaje element na kraj niza (lanca koji se pretrazuje) i "uzmi"
(engl. pop), koji uklanja element sa kraja. Ovo je struktura podataka koja se zove LIFO
(Last-In-First-Out). Postoji i struktura FIFO (First-In-First-Out), koja se ne koristi u
ove svrhe. Kompleksnost ovog algoritma je O(n + m).
Primjena druge verzije ovog algoritma nije odmah ocigledna. Meutim, moze se razmil-
jati kao o skupu cvorova od kojih svaki ima nekoliko konekcija na sebe tako da svaki tako
stvoren lanac ima odreena svojstva "separabilnosti".
Primjer. Neka je data mreza racunara. Potrebno je naci sve kompjutere koji, ako se
uklone, cine da se mreza raspada.
1.3 Algoritmi najkraceg puta
Ocigledna generalizacija problema najkraceg puta ima izvor u cinjenici da grane (ivice)
imaju razlicite "tezine". Formalno, potrebno je imati nacin na koji se "tezine" dodjelju
ivicama. To se cini putem sljedece denicije.
3
Denicija. Tezinski graf je graf G = (V ; E) zajedno sa funkcijom w : E R. Kaze se
da je w(i; j) = ako (i; j) = E.
Slicno se formalizuje problem "najkraceg puta".
Denicija. Putanja
x = x
0
; x
1
; :::; x
m
= y
je najkraci put od x do y ako ta putanja minimizira
m1
X
i=0
w(x
i
; x
i+1
)
Duzina najkraceg puta od x do y se oznacava sa d (x; y).
Sada se problem najkraceg puta lako formulie.
Problem. Za dati tezinski graf G i dva cvora x i y naci d (x; y). Pretpostavka je
w(i; j) > 0.
1.3.1 Dijkstra algoritam
Ovaj algoritam je namijenjen trazenju najkraceg puta u usmjerenim grafovima. Pret-
postavlja se da ivice grafa imaju svoje vrijednosti i cilj je naci najkrace putanje iz jednog
cvora u sve cvorove grafa.
Distanca izmeu dva cvora u i v, u oznaci (u; v), je minimalna duzina putanje od u do
v.
Problem najkraceg puta iz jednog cvora (single source shortest path) se denie na sljedeci
nacin. Dat je usmjeren graf sa nenegativnim tezinama ivica G = (V ; E) i izdvojenim
pocetnim cvorom s V . Problem je odrediti distancu pocetnog cvora do svakog cvora u
grafu.
Moguce je imati grafove sa negativnim tezinama ivica ali kako bi najkraci putevi bili
dobro denisani potrebno je dodati zahtjev da uopte nema ciklusa cija je ukupna tezina
negativna (inace bi se mogao napraviti beskonacno kratak put kretanjem zauvijek u tom
ciklusu). Ovdje se naglaava posao racunanja minimalne distance od pocetnog cvora
do svakog cvora. Racunanje stvarne duzine je dosta lagano proirenje problema. Za
svaki cvor se formira pointer pred (v) koji ukazuje na prethodnika. Slijedeci pointere
prethodnika unazad od bilo kojeg cvora konstruie se reverzna slika najkraceg puta do v.
Osnovna struktura Dijkstra algoritma je odrzavanje procjena najkraceg puta za svaki
cvor, u oznaci d [v]. Intuitivno gledano, d [v] ce biti duzina najkraceg puta od s do v koji
je poznat algoritmu. Ova vrijednosti je uvijek veca ili jednaka sa stvarno najkracim putem
od s do v. Inicijalno, putevi su nepoznati tako da je d [v] = . Inicijalno je d [s] = 0 a
svi ostali d [v] su postavljeni na . Kako algoritam napreduje i kako se ukljucuje vie
cvorova azurira se d [v] za svaki cvor u grafu sve ove vrijednosti ne konvergiraju ka stvarno
najkracoj distanci.
4
Proces kojim se vri azuriranje procjene se zove relaksacija. Intuitivno gledano, ako nije
postignuta optimalna vrijednost ona je bliza ka optimumu. Posebno, ako se otkrije put
od s do v koji je kraci od d [v] tada se vri azuriranje te vrijednosti. Ovaj metod je
zajednicki za veliki broj algoritama optimalizacije.
Posmatra se ivica od cvora u do cvora v cija je tezina w(u; v). Pretpostavka je da postoje
procjene za d [u] i d [v]. Poznato je da postoji put od s do u sa tezinom d [u]. Ako se uzme
ta putanja i ako se slijedi ivica (u; v) dobija se putanja do v duzine d [u] + w(u; v). Ako
je ta putanja bolja od postojeceg puta do v duzine d [v] tada se d [v] azurira na vrijednost
d [u] +w(u; v). Potrebno je zapamtiti da najkraci put do v prolazi kroz u to se cini tako
da se azurira pointer prethodnika za v.
Primjer relaksacije
Treba primijetiti da kad god se d [v] postavi na konacnu vrijednost uvijek postoji trag
o putanji te duzine. Stoga je d [v] _ (s; v). Ako je d [v] = (s; v) tada naknadne
relaksacije ne mogu promijeniti tu vrijednost.
Nije teko vidjeti da ako se relaksacija provede nad svim ivicama grafa vrijednosti d [v]
obavezno konvergiraju konacnoj stvarnoj vrijednosti iz s. Cilj svakog dobrog algoritma
nalazenja najkraceg puta je da se azuriranja obavljaju na pametan nacin kako bi konver-
gencija bila to je moguce brza. Posebno, najbolji nacin bi bio da se operacije relaksacije
poredaju na nacin da se relaksacija za svaku ivicu provede tacno jednom. Tacno ovo radi
Dijkstra algoritam.
Dijkstra algoritam je zasnovan na izvravanju ponovljenih relaksacija. On radi tako da
odrzava podskup cvorova, S _ V , za koji se proglaava da "znamo" stvarnu distancu,
d [v] = (s; v). Inicijalno je S = , prazan skup i stavlja se d [s] = 0 a za sve ostale +.
Jedan po jedan cvor iz V S se dodaje u S.
Skup S moze biti implementiran koritenjem niza boja koje su dodijeljene cvorovima.
Inicijalno su svi cvorovi bijeli a boja [s] = crna kako bi se naznacilo da v S.
Dijkstra je prepoznao da je najbolji nacin relaksacije povecanje poretka distance od izvora.
Na taj nacin, kad god se provodi relaksacija moguce je zakljuciti da rezultat relaksacije
daje konacnu vrijednost distance. Za implementaciju ovog koncepta za svaki cvor u
V S se odrzava procjena distance d [u]. Pohlepni dio algoritma se odnosi na to da se
uzima cvor iz V S za koji je d [v] minimalno tj. uzima se neobraeni cvor koji je (prema
procjeni) najblizi ka s.
Kako bi se ova selekcija izvrila ekasno, cvorovi iz V S se stavlja u red prioriteta (tj.
heap - gomila) gdje je kljucna vrijednost svakog cvora u jednaka d [u]. Primjetna je
slicnost sa Primovim algoritmom iako se koriste razlicite vrijednosti. Za svaki cvor je
poznata lokacija u redu prioriteta i svaka stavka u redu prioriteta "poznaje" koji cvor
prezentira.
5
Prikaz Dijkstra algoritma
Zbog slicnosti sa Primovim algoritmom vrijeme izvrenja je jednako, (E log V ).
Drugi algoritmi kojima se rjeava problem najkraceg puta su :
- Floyd Warshall-ov algoritam
- Algoritam mravlje kolonije
1.4 Pohlepni algoritmi na grafovima
Uobicajeni problem u komunikacionim mrezama i dizajnu elektricnih kola je povezivanje
skupa cvorova (komunikacionih cvorova ili elemenata elektricnog kola) pomocu najkrace
moguce mreze, lija je duzina suma duzina pojedinih veza. Pretpostavlja se da je mreza
neusmjerena. Kako bi se minimizirala duzina mreze ne smije se dopustiti postojanje petlji.
Rezultat je graf koji je povezan, neusmjeren i aciklican i kao takav se zove slobodno stablo.
Racunski problem se zove problem minimalno razapinjuceg stabla (Minimum Spanning
Tree, krace MST). Formalnije, za dati povezani neusmjereni graf G = (V ; E) razapinjuce
stablo je aciklicni skup ivica T _ R koje povezuju sve cvorove. Pretpostavlja se da svaka
ivica w(u; v) grafa G ima numericku tezinu ili cijenu (koja moze biti negativna ili nula)
cijena stabla T se denie kao suma ivica razapinjuceg stabla
w(T) =
X
(u;v)2T
w(u; v)
Minimalno razapinjuce stablo je ono koje ima minimalnu tezinu. Ovo stablo ne mora biti
jedinstveno. Ako sve ivice imaju razlicitu tezinu tada su minimalna razapinjuca stabla
razlicita (ovo jo nije dokazano vec cinjenica koja se koristi.
6
Slika prikazuje tri razapinjuca stabla za isti graf. U sredini i desno su su dva minimalna
razapinjuca stabla.
Postoje dva pohlepna algoritma, Kruskalov i Primov, za nalazenje minimalnog razapin-
juceg stabla. Podsjetimo se da je pohlepni algoritam onaj koji rjeenje nalazi ponavljan-
jem selekcije najjetinije (ili generalno lokalno optimalnog izbora) od raspolozivih opcija
na svakoj etapi. Vazna karakteristika pohlepnih algoritama je da prave izbor koji ne
opozivaju. Prije prezentacije potrebne su neke bitne cinjenice o slobodnim stablima.
Lema.
Slobodno stablo sa n cvorova ima tacno n 1 ivica
Postoji jedinstveni put izmeu bilo koja dva cvora slobodnog stabla
Dodavanje bilo koje ivice kreira jedinstveni ciklus. Prekidanje bilo koje ivice tog
ciklusa obnavlja slobodno stablo
Neka je G = (V; E) neusmjeren povezan graf cije ivice imaju numericke vrijednosti tezine
(pozitivne, negativne ili nula). Intuicija u pozadini pohlepnih MST algoritama je jednos-
tavna : odrzava se podskup ivica A koji je inicijalno prazan i dodaje se jedna po jedna
ivica sve dok A ne postane MST. Kaze se da je S _ E most (prelaz) ako je podskup ivica
nekog MST (ne moze se reci MST jer nije neophodno i jedinstven). Kaze se da je ivica
(u; v) EA sigurna ako je A ' (u; v) prelaz. Drugim rijecima, izbor (u; v) je siguran
izbor tako da A jo uvijek moze formirati MST. Ako je A prelaz ne moze sadrzavati
ciklus. Izvorni (genericki pohlepni algoritam radi tako da dodaje sigurne ivice na tekuce
razapinjuce stablo. Potrebno je voditi racuna da je prelaznost svojstvo podskupa ivica a
sigurnost svojstvo pojedine ivice.
Neka je S podskup cvorova S _ V . Podjela (cut) (S; V S) je particija cvorova u dva
disjunktna podskupa. Ivica (u; v) prelazi podjelu ako je jedna njena krajnja tacka u S a
druga u V S. Za dati podskup ivica A se kaze da podjela potuje A ako ne postoje ivice
u A koje prelaze podjelu. Nije teko vidjeti zato je potovanje podjele vazno za ovaj
problem. Ako je formiran djelimicni MST i ako se zeli znati koje ivice koje mogu biti
dodate i koje ne formiraju ciklus u tekucem MST, bilo koja ivica koja prelazi potujucu
podjelu je moguci kandidat.
Ivica u E je lagana ivica koja prelazi podjelu ako ima minimalnu duzinu od svih ivica
koje prelaze podjelu. Lagana ivica moze ne biti jedinstvena. Prema intuiciji, s obzirom
7
da sve ivice koje prelaze potujucu podjelu ne formiraju ciklus tada je lagana ivica koja
prelazi podjelu prirodan izbor.
MST Lema. Neka je G = (V; E) povezan neusmjereni graf sa ivicama realnih vrijednosti.
Neka je A prelazni podskup od E (odnosno podskup nekog MST) i neka je (S; V S) bilo
koja podjela koja potuje A i neka je (u; v) lagana ivica koja prelazi podjelu. Tada je
(u; v) sigurna za A.
1.4.1 Kruskalov algoritam
Kruskalov algoritam radi tako da se ivice dodaju na A u rastucem redoslijedu tezina
(najprije lake ivice). Ako naredna ivica ne formira ciklus unutar tekuceg skupa ivica
tada se dodaje u A. Ako formira ciklus tada se ivica proputa i razmatra se sljedeca
ivica u poretku. Kako algoritam odmice formira se uma (stablo) u cvorovima. Tokom
algoritma ova stabla se udruzuju sve dok se ne dobije stablo koje sadrzi sve cvorove.
Ova strategija vodi ka korektnom algoritmu. Uzmimo npr. ivicu (u; v) koja se treba
dodati i pretpostavimo da ta ivica ne formira ciklus u A. Neka je A
0
stablo u umi A
koje sadrzi cvor u. Posmatra se Podjela (A
0
; V A
0
). Svaka ivica koja prelazi podjelu nije
u A tako da ta podjela potuje A i (u; v) je lagana ivica preko podjele (jer su sve laganije
ivice iskoritene ranije u algoritmu). Stoga je (u; v) sigurna ivica.
Teki dio algoritma je kako ekasno detektovati da li dodavanje ivice kreira ciklus u A.
Moze se provesti pretrazivanje podgrafa koji je kreiran ivicama iz skupa A ali to uzima
jako puno vremena. Potreban je brz i pouzdan test koji nam daje odgovor na pitanje
da li je u ili v u istom stablu A. Ovo se moze uraditi putem strukture podataka koja
se zove Unija-Trazenje (Union-Find) dva disjunktna skupa. Ova struktura podrzava tri
operacije:
KreiratiSet(u) : Kreiranje skupa koji sadrzi stavku u.
NaciSet(u) : Nalazenje skupa koji sadrzi datu stavku u.
Union(u;v) : Spojiti skup koji sadrzi u i skup koji sadrzi v u zajednicki skup.
Svaka od ovih operacija se izvrava u O(log n) vremenu na skupu velicine n. Ova struk-
tura je zanimljiva jer se niz od n operacija izvrava mnogo brze od O(nlog n).
U ovom algoritmu cvorovi grafa su elementi pohranjeni u skupove a skupovi su cvorovi
u svakom stablu A. Skup A moze biti pohranjen kao jednostavna lista ivica. Primjer je
pokazan na narednoj slici.
8
Kruskalov algoritam. Svaki cvor je oznacen u skladu sa skupom u kojem je sadrzan
Analiza. Koliko dugo traje Kruskalov algoritam ? Kao i obicno, neka je V broj cvorova
i E broj ivica. S obzirom da je graf povezan moze se uzeti da je E _ V 1. Za sortiranje
ivica potrebno je (E log E). Petlja se ponavlja E puta a svaka iteracija ukljucuje
konstantan broj pristupa Union-Find strukturi na skupu od V stavki. Stoga, za svaki
pristup treba (V ) vremena a skupa (E log V ). Stoga je ukupno vrijeme izvrenja
jednako njihovoj sumu koja je ((V + E) log V ). S obzirom da V u asimptotskom smislu
nije vece od E slijedi da je vrijeme izvrenja (E log V ).
1.4.2 Primov algoritam
Primov algoritam je drugi pohlepni algoritam za minimalno razapinjuce stablo. Od
Kruskalovog algoritma se razlikuje samo u nacinu odabira naredne sigurne ivice koja
se dodaje na svakom koraku. Vrijeme izvrenja je potpuno jednako kao za Kruskalov
algoritam. Ovaj algoritam pokazuje da postoji vie od jednog nacina da se rijei ovaj
problem. Osim toga, veoma je slican drugom pohlepnom algoritmu, Dijkstra algoritmu,
kojim se rjeava potpuno druga vrsta problema : najkraci put u mrezi.
Kruskalov algoritam radi tako da sortira ivice i umece ih jednu po jednu u razapinjuce
stablo vodeci racuna da se nikada ne formira ciklus. Intuitivno gledano, Kruskalov algo-
ritam radi tako da spaja dva stabla ili ih razdvaja sve dok se sve ivice ne nau u istom
stablu.
Za razliku od njega, Prim-ov algoritam gradi stablo dodavanjem po jednog lista na tekuce
stablo. Startuje se sa korijenskim cvorom r koji moze biti bilo koji. U bilo koje vrijeme
podskup ivica A formira jedno stablo (u Kruskalovom algoritmu se formira uma). Trazi
se dodavanje cvora kao lista na stablo. Proces je ilustrovan na narednoj slici.
9
Prim-ov algoritam
Ako se posmatra skup cvorova S koji je dio stabla i njegov komplement tada postoji
podjela grafa i tekuci skup ivica A potuje tu podjelu. MST lema kaze da je sigurno
dodavanje lagane ivice. Na slici to je ivica tezine 4 koja ide u cvor u. Stoga se u dodaje
u cvorove skupa S i dijeli izmjene. Treba primijetiti da neke ivice koje vie ne sijedu
podjelu koju su presijecale podjelu prije ovog koraka nestaju a javljaju se nove koje nisu
presijecale tu podjelu.
Lako je vidjeti da je za ekasnu implementaciju Prim-ovog algoritma kljucno ekasno
azuriranje podjele i brzo odreivanje lagane ivice. Da bi se to ucinilo koristi se struktura
podataka prioritetnog reda (priority queue) koja se koristi u Heap sortu. Ova struktura
cuva skup stavki u kojoj je svaka stavka povezana sa vrijednosti koja se zove kljuc.
Naredna slika ilustruje Prim-ov algoritam. Strelice indiciraju pointere (pokazivace) sljed-
nika a numericka vrijednost u svakom cvoru je vrijednost kljuca.
Ilustracija Prim-ovog algoritma
10
Za analizu Prim-ovog algoritma racuna se vrijeme potroeno na svakomcvoru nakon to se
preuzme iz reda prioriteta (priority queue). Ova aktivnost uzima O(log V ) vremena. Za
svaku ivicu se potroi oko O(log V ) vremena kako bi se smanjio kljuc susjednih cvorova pa
je vrijeme O(log V + deg (u) log V ). Ostali koraci azuriranja se obavljaju u konstantnom
vremenu. Na osnovu ovoga je
T (V; E) =
X
u2V
(log V + deg (u) log V ) =
X
u2V
(1 + deg (u)) log V
= log V
X
u2V
(1 + deg (u)) = (log V ) (V + 2E) = ((V + E) log V )
S obzirom da je G povezan V asimptotski nije veci od E tako da je rezultat (E log V ).
To je tacno jednako sa procjenom za Kruskalov algoritam.
11
1.5 Zadaci
Zadatak. Kruskalovim algoritmom naci minimalno razapinjuce stablo na sljedecem
grafu.
Rjeenje je dato na narednoj tabeli.
Korak Raspolozivo Uzeto
1 (c,d) (c,d)
2 (d,e), (c,e) (d,e)
3 (b,c) (b,c)
4 (a,d) (a,d)
Table 1: Graf 01
Dobijeno je stablo na narednoj slici.
Zadatak. Kruskalovim algoritmom naci minimalno razapinjuce stablo na sljedecem
grafu.
12
Rjeenje. Postupak rjeavanja je prikazan na narednoj tabeli.
Korak Raspolozivo Uzeto
1 (c,g), (e,i), (k,l) (c,g)
2 (e,i), (k,i) (e,i)
3 (k,l) (k,l)
4 (a,e), (b,c), (c,d), (d,g), (f,j), (j,k) (a,e)
5 (b,c), (c,d), (d,g), (f,j), (j,k) (b,c)
6 (c,d), (d,g), (f,j), (j,k) (c,d)
7 (f,j), (j,k) (f,j)
8 (j,k) (j,k)
9 (b,f), (e,j), (i,j) (b,f)
10 (e,j), (i,j) (e,j)
11 (h,l) (h,l)
Table 2: Graf 02
Dobijeno je stablo na narednoj slici.
Zadatak. Primovim algoritmom naci minimalno razapinjuce stablo na sljedecem grafu.
13
Rjeenje. Postupak rjeavanja je dat na narednoj tabeli.
Korak

Cvorovi Raspolozivo Uzeto
1 a (a,b), (a,e), (a,f) (a,e)
2 a, e (a,b), (a,f), (e,f), (e,i), (e,j) (e,i)
3 a, e, i (a,b), (a,f), (e,f), (e,j), (i,j) (e,j)
4 a, e, j (a,b), (a,f), (e,f), (j,f), (j,g), (j,k) (j,f)
5 a, f, j (a,b), (f,b), (f,c), (f,g), (j,g), (j,k) (j,k)
6 a, f, j, k (a,b), (f,b), (f,c), (f,g), (j,g), (k,g), (k,l) (k,l)
7 a, f, j, k, l (a,b), (f,b), (f,c), (f,g), (j,g), (k,g), (l,g), (l,h) (f,b)
8 b, f, j, k, l (b,c), (f,c), (f,g), (j,g), (k,g), (l,g), (l,h) (b,c)
9 c, f, j, k, l (c,d), (c,g), (f,g), (j,g), (k,g), (l,g), (l,h) (c,g)
10 c, g, l (c,d), (g,d), (g,h), (l,h) (c,d)
11 d, g,l (d,h), (g,h), (l,h) (l,h)
Table 3: Graf 02
Dobijeno je stablo na narednoj slici.
U ovom slucaju je dobijeno stablo identicno onome iz prethodnog zadatka. Ovo ne mora
uvijek biti slucaj.
Zadatak. Dijkstra algoritmom naci najkraci put u sljedecem grafu.
14
Rjeenje. Postupak je dat na sljedecoj tabeli.
Korak

Cvorovi Veze Uzeto
1 a b(10), e(2), f(8) (a,e)
2 a, e b(10), f(8), i(3), j(5) (e,i)
3 a, e, i b(10), f(8), j(5) (e,j)
4 a, e, j b(10), f(7), g(11), k(7) (f,j)
5 a, f, j b(10), c(12), g(10), k(7) (j,k)
6 a, f, k b(10), c(12), g(10), l(8) (k,l)
7 a, f, l b(10), c(12), g(10), h(13) (a,b)
8 b, f, l c(12), g(10),h(13) (f,g)
9 b, g, l c(11), d(12), h(13) (c,g)
10 c, g, l d(13), h(13) (d,g)
11 d, g,l i(22), h(8) (l,h)
Table 4: Graf 02
Dobijena je putanja na sljedecoj slici.
Zadatak. Dijkstra algoritmom naci najkraci put u sljedecem grafu.
15
Postupak je dat na sljedecoj tabeli.
Korak

Cvorovi Veze Uzeto
1 a b(10), d(5) (a,d)
2 a, d b(8), c(14), e(7) (d,e)
3 a, d, e b(8), c(13) (d,b)
4 b, d, e c(9) (b,c)
Table 5: Graf 02
Dobijena je putanja na sljedecoj slici.
1.6 Zadaci za samostalni rad
Na sljedecim grafovima odabranim algoritmom naci minimalno razapinjuce stablo i na-
jkraci put. Za pocetni uzimati cvor a.
16
17
.
18

You might also like