Upload
igor-persin
View
705
Download
15
Embed Size (px)
Citation preview
OSNOVE TEORIJE GRAFOVA
Neusmjereni grafovi
Neusmjereni graf je uređeni par skupova (V,E). Elementi skupa V nazivaju se čvorovi (vrhovi, točke), a elementi skupa E nazivaju se bridovi (grane, veze).
Brid grafa je par elemenata iz skupa V, odnosno, on povezuje dva čvora iz skupa V.
Kada se crta graf, sasvim je nebitan raspored čvorova i veza u prostoru, što je vidljivo i iz sljedeće slike.
Ove dvije slike predstavljaju isti graf
Osnovni pojmovi u teoriji grafova
Definicija 1 (definicija grafa): Jednostavan graf G sastoji se od nepraznog konačnog skupa V(G) čije elemente nazivamo vrhovi i konačnog skupa E(G), različitih parova elemenata iz V(G),koje nazivamo bridovi
Definicija 2: Za vrhove u i v kažemo da su susjedni ako postoji brid e=uv u tom grafu koji ih spaja. Za bridove ei f kaže se da su susjedni ako postoji vrh u tom grafu koji je njima zajednički.Definicija 3: Put u grafu G je konačan slijed bridova v1v2v3…vn-1vn u kojem su svaka dva brida susjedna i svi su vrhovi različiti, osim eventualno početni i krajnji.
Definicija 4: Za graf g kažemo da je povezan ako i samo ako postoji put između svaka dva vrha.
povezani grafovi
nepovezani grafovi
Graf se može prikazati tablicom incidencije u kojoj prvi redak i stupac predstavljaju vrhove grafa, a preostala polja u tablici predstavljaju težinu (vrijednost) brida koji spaja dotične vrhove. Težina obično predstavlja mjeru udaljenosti dva vrha.
Ako vrhovi nisu spojeni bridom tada se udaljenost među njima određuje s .
Dan je graf s označenim udaljenostima na slici
Za dotični se graf može formirati tablica incidencije
Ova je tablica simetrična obzirom na glavnu dijagonalu. Vrijednosti 0 na glavnoj dijagonali predstavljaju udaljenosti pojedinog vrha od sebe samog
Razapinjuća stabla
Minimalno razapinjuće stablo predstavlja graf u kojem između svaka dva čvora postoji put, ali da pritom u njemu ne postoji niti jedan ciklus.
Minimalna razapinjuća stabla mogu se dobiti uz pomoć dva jednostavna algoritma, a to su Primov algoritam i Kruskalov algoritam
Primov algoritam
Algoritam koji nam omogućava dobiti minimalno razapinjuće stablo je dan s:
Stablo =
Izaberi proizvoljan vrh iz V(grafa) i stavi ga u V(stablo). Dok je broj vrhova (stablo)<broj vrhova(graf) ponavljaj postupak
Izaberi vrh koji nije u V (stablo), a susjedan je nekom d vrhova iz V(stablo) i pri tome je težina brida koja ih spaja minimalna. Stavi taj vrh zajedno s njemu pripadajućim bridom u stablo
O
Tablični način provođenja Primovog algoritma
Kruskalov algoritam
Kruskalov algoritam koji nam omogućava dobiti minimalno razapinjuće stablo je dan s:
Stablo =
Bridove grafova poredaj u padajući niz.
Dok postoji brid čije dodavanje u stablo ne tvori ciklus ponavljaj postupak.Uzmi najmanji brid koji ne tvori ciklus s bridovima iz stabla i dodaj ga u stablo.
O
NAJKRAĆE UDALJENOSTI U GRAFU
Udaljenost u grafu definira se kao suma težine bridova koje čine put od početnog vrha do onog krajnjeg.
Za pronalaženje najkraćeg puta u grafu koristi se Dijkstrin i Floydov algoritam
DIJKSTRIN ALGORITAM
Dijkstrin algoritam predstavlja proširenje Primovog algoritma.
Dijkstrin algoritam glasi:Stablo = Stavi u stablo početni vrh i označi ga s udaljenošću 0.
Dok je broj vrhova za stablo< broj vrhova graf ponavljaj postupak. Za sve vrhove koji su susjedni nekom vrhu iz stabla izračunaj najmanju udaljenost od početnog vrha kao udaljenost vrha kojem je taj vrh susjedan + težina brida koja ih spaja. Od svih vrhova odaberi onaj koji ima najmanju vrijednost.
O
Tablični prikaz algoritma
Floydov algoritam za pronalaženje najkraćih puteva
Floydov algoritam je tipičan primjer dinamičkog programiranja. Njime se pronalaze najmanje udaljenosti između svih parova vrhova u grafu da bi se potom formirao graf optimalne strukture.
Matricu incidencije označavamo s G[i,j]
Floydov algoritam glasi
Za vrh_kroz = 1do broj_vrhova
Za vrh_od = 1 do broj_vrhova
Ako G[vrh_od, vrh_kroz]! = ∞ Za vrh_do=1 do broj_vrhova
Ako G [ vrh_kroz, vrh_do]!= ∞ Ako G [ vrh_od, vrh_do]!= ∞∞ ili
G [ vrh_od, vrh_do]> G[vrh_od, vrh_kroz]+ G [ vrh_kroz, vrh_do]
G [ vrh_od, vrh_do]=G[vrh_od, vrh_kroz]+ G [ vrh_kroz, vrh_do]
Primjer;
Krećemo od vrha A i kroz njega pokušavamo poboljšati put između ostalih vrhova te zapisujemo redom puteve koji se žele poboljšati
Kroz vrh A se matrica incidencije ne može poboljšati te ostaje ista, a mi prelazimo na vrh B te istim postupkom dobivamo
U trećem se koraku koristi vrh C pa se dobiva
Algoritam se nastavlja vrhom D te se dobiva:
Matrica incidencije koju dobivamo je:
Posljednji vrh koji koristimo je vrh E te dobivamo:
Konačna dobivena matrica incidencije je:
Prateći izvođenje algoritma mogu se rekonstruirati putevi na načina da se prati kako su se mijenjale težine u matrici incidencije kroz svaki korak te se dobiva: