Strukture podataka i algoritmi 13 TEINSKI GRAFOVI Teinski

  • Slides: 50
Download presentation
Strukture podataka i algoritmi 13. TEŽINSKI GRAFOVI

Strukture podataka i algoritmi 13. TEŽINSKI GRAFOVI

Težinski grafovi • Osnovni pojmovi i definicije • Minimalno povezujuće stablo • Kruskalov algoritam

Težinski grafovi • Osnovni pojmovi i definicije • Minimalno povezujuće stablo • Kruskalov algoritam • Primov algoritam • Najkraći putevi od jednog čvora • Dijkstrin algoritam • Najkraći putevi između svih čvorova • Flojdov algoritam Strukture podataka i algoritmi

Težinski grafovi • • • Prirodan model za predstavljanje problema gdje sve grane grafa

Težinski grafovi • • • Prirodan model za predstavljanje problema gdje sve grane grafa nisu ravnopravne već neke imaju veću „težinu“. Primjeri: računari kao čvorovi i komunikacioni linkovi između njih kao grane. Težinski grafovi su grafovi čijim granama je dodjeljena neka numerička vrijednost tzv. težina. Strukture podataka i algoritmi

Osnovni pojmovi i definicije • Težinski graf G = (V, E) je takav graf

Osnovni pojmovi i definicije • Težinski graf G = (V, E) je takav graf da svaka grana e u E ima dodijeljen broj w(e) koji određuje njenu težinu. Strukture podataka i algoritmi

Osnovni pojmovi i definicije • Običan graf se može smatrati težinskim čije su sve

Osnovni pojmovi i definicije • Običan graf se može smatrati težinskim čije su sve grane jednake (težine 1). • I težinski grafovi se mogu predstaviti pomoću matrice susjedstva i pomoću liste susjedstva. Strukture podataka i algoritmi

Matrica susjedstva za težinski graf • • Postojanje neke grane e i njena težina

Matrica susjedstva za težinski graf • • Postojanje neke grane e i njena težina w(e) zajedno se predstavljaju odgovarajućim elementom matrice w(e). Ako neka grana ne postoji u grafu odgovarajući element matrice susjedstva mora biti neka vrijednost koja nije moguća za grane (∞). Strukture podataka i algoritmi

Lista susjedstva za težinski graf • Na listi susjedstva za predstavljanje težinskog grafa se

Lista susjedstva za težinski graf • Na listi susjedstva za predstavljanje težinskog grafa se težina neke grane e priključuje elementu povezane liste koji određuje drugi kraj grane e. Strukture podataka i algoritmi

Minimalno povezujuće stablo • Primjer: graf sa čvorovima koji predstavljaju filijale neke kompanije u

Minimalno povezujuće stablo • Primjer: graf sa čvorovima koji predstavljaju filijale neke kompanije u različitim gradovima. • Grane sa numeričkim vrijednostima neka predstavljaju cijene iznajmljivanja telekomunikacionih linija između filijala. • Problem: odrediti najmanju cijenu iznajmljivanja telekomunikacionih linija između filijala. Strukture podataka i algoritmi

Minimalno povezujuće stablo • Rješenje ovog problema je podskup grana T datog grafa koji

Minimalno povezujuće stablo • Rješenje ovog problema je podskup grana T datog grafa koji ispunjava sledeće uslove: 1. grane T moraju povezivati sve čvorove, 2. zbir cijena grana u T mora biti najmanji, 3. rješenje T ne smije sadržavati ciklus. Strukture podataka i algoritmi

Minimalno povezujuće stablo • Minimalno povezujuće stablo T težinskog grafa G = (V, E)

Minimalno povezujuće stablo • Minimalno povezujuće stablo T težinskog grafa G = (V, E) je podgraf (V, T) grafa G čiji je zbir težina grana minimalan. • U slučaju povezanog težinskog grafa G, zbir težina grana u nekom povezujućem stablu T tog grafa se naziva cijena stabla T. Strukture podataka i algoritmi

Minimalno povezujuće stablo • Graf G može imati veliki broj povezujućih stabala čija struktura

Minimalno povezujuće stablo • Graf G može imati veliki broj povezujućih stabala čija struktura je potpuno različita. • Algoritmi za određivanje minimalnog povezujućeg stabla: - Kruskalov algoritam, - Primov algoritam. • Ovi algoritmi se zasnivaju na svojstvu podjele grafa. Strukture podataka i algoritmi

Svojstvo podjele grafa • • Neka je G = (V, E) povezan težinski graf

Svojstvo podjele grafa • • Neka je G = (V, E) povezan težinski graf i neka su V 1 i V 2 dva neprazna disjunktna podskupa njegovog skupa čvorova V takva da je V = V 1 U V 2. Ako je e jedinstvena grana najmanje težine u E takva da joj je jedan kraj u V 1 i drugi kraj u V 2, onda svako minimalno povezujuće stablo grafa G sadrži granu e. Strukture podataka i algoritmi

Kruskalov algoritam • • Radi konstruisanja minimalnog povezujućeg stabla težinskog grafa G = (V,

Kruskalov algoritam • • Radi konstruisanja minimalnog povezujućeg stabla težinskog grafa G = (V, E) polazi se od šume (V, 0) koja se sastoji od svih čvorova grafa G i nema nijednu granu. Redom se ispituju grane grafa u rastućem redoslijedu njihovih težina. Ako grana e povezuje dva čvora iz dva različita stabla do tada konstruisane šume onda se e dodaje skupu izabranih grana i ta dva stabla se objedinjuju u jedno stablo. Ako e povezuje dva čvora iz istog stabla onda se e odbacuje jer bi proizvela ciklus. Strukture podataka i algoritmi

Kruskalov algoritam Strukture podataka i algoritmi

Kruskalov algoritam Strukture podataka i algoritmi

Implementacija Kruskalovog algoritma • • Obrazovati običan niz od grana G sa pridruženim težinama.

Implementacija Kruskalovog algoritma • • Obrazovati običan niz od grana G sa pridruženim težinama. Sortirati taj niz u rastućem redoslijedu po težinama grana i neka je e[1], e[2], . . . , e[m] dobijeni niz sortiranih grana. Strukture podataka i algoritmi

Kruskalov algoritam // Ulaz: povezan težinski graf G // Izlaz: minimalno povezujuće stablo T

Kruskalov algoritam // Ulaz: povezan težinski graf G // Izlaz: minimalno povezujuće stablo T grafa G algorithm mst-kruskal(G) T = 0; // šuma T je početno stablo bez grana // svi čvorovi su stabla šume T for (svaki čvor v u grafu G) do ds-make(v); // od svakog čvora se formira po jedno stablo for i = 1 to m do e[i] = {u, v}; a = ds-find(u); // ime skupa kome pripada čvor u b = ds-find(v); // ime skupa kome pripada čvor v if (a != b) then // skupovi čvorova u i v nisu isti T = T + e[i]; // dodati granu ei šumi T ds-union(a, b); // objediniti skupove čvorova u i v return T; Strukture podataka i algoritmi

Zadatak - Kruskalov algoritam • Slikovito ilustrovati izvršavanje Kruskalovog algoritma: Strukture podataka i algoritmi

Zadatak - Kruskalov algoritam • Slikovito ilustrovati izvršavanje Kruskalovog algoritma: Strukture podataka i algoritmi

Primov algoritam • Minimalno povezujuće stablo se dobija tako što se početno najprostije stablo

Primov algoritam • Minimalno povezujuće stablo se dobija tako što se početno najprostije stablo postupno proširuje. • Početno stablo je neki proizvoljno izabran čvor s. • U svakom koraku se djelimično konstruisanom stablu dodaje novi čvor na drugom kraju grane najmanje težine koja izlazi iz stabla. Strukture podataka i algoritmi

Primov algoritam • U svakoj iteraciji se grana e = {u, v} za koju

Primov algoritam • U svakoj iteraciji se grana e = {u, v} za koju se postiže minimum i čvor v dodaju povezujućem stablu grafa G koje se konstruiše. Strukture podataka i algoritmi

Primov algoritam Strukture podataka i algoritmi

Primov algoritam Strukture podataka i algoritmi

Implementacija Primovog algoritma • • • Da bi se efikasno realizovao Primov algoritam mora

Implementacija Primovog algoritma • • • Da bi se efikasno realizovao Primov algoritam mora se pažljivo voditi evidencija o skupu čvorova S i skupu grana T koji pripadaju djelimično konstruisanom povezujućem stablu grafa G. Grane čiji je samo jedan kraj u skupu S moraju se organizovati tako da se od njih može brzo izabrati jedna grana minimalne težine. Da bi se brzo odredila sledeća grana koju treba dodati djelimičnom stablu koristi se red sa prioritetima čiji elementi su grane grafa G pri čemu jedno polje sadrži granu e = {u, v} a drugo polje njenu težinu w(e). Strukture podataka i algoritmi

Primov algoritam // Ulaz: povezan težinski graf G // Izlaz: minimalno povezujuće stablo T

Primov algoritam // Ulaz: povezan težinski graf G // Izlaz: minimalno povezujuće stablo T grafa G algorithm mst-prim(G) Proizvoljno izabrati čvor s u G; S = {s}; T = 0; // inicijalizovati djelimično stablo q = 0; // konstruisati prazan red sa prioritetima for (svaka grana e={s, x} u grafu G) do pq-insert(q, (w(e), e)); // u red sa prioritetima dodati granu while (q != 0) do e = pq-deletemin(q); // u redu se pronalazi najmanja grana Neka je e = {u, v}; T = T + e; // granu e dodati granama delimičnog stabla S = S + v; // drugi kraj v dodati čvorovima tog stabla for (svaka grana e={v, x} za koju x nije u S) do pq-insert(q, (w(e), e)); return T; Strukture podataka i algoritmi

Zadatak - Primov algoritam • Slikovito ilustrovati izvršavanje Primovog algoritma od početnog čvora b:

Zadatak - Primov algoritam • Slikovito ilustrovati izvršavanje Primovog algoritma od početnog čvora b: Strukture podataka i algoritmi

Najkraći putevi od jednog čvora • • Svaka grana u težinskom grafu G ima

Najkraći putevi od jednog čvora • • Svaka grana u težinskom grafu G ima pridruženu dužinu l(e) ≥ 0 koja predstavlja mjeru prelaska u jednom koraku od čvora u do čvora v. Za neki put P u grafu G, dužina tog puta l(P) je zbir dužina svih grana na putu P. Problem najkraćih puteva od jednog čvora sastoji se u tome da se za dati čvor s u težinskom grafu G odrede najkraći putevi od tog čvora s do svih ostalih čvorova u grafu G. Za rješenje ovog problema se koristi Dijkstrin algoritam. Strukture podataka i algoritmi

Dijkstrin algoritam • Problem nalaženja najkraćih puteva od jednog čvora se rješava pretragom u

Dijkstrin algoritam • Problem nalaženja najkraćih puteva od jednog čvora se rješava pretragom u širinu. • Najkraći putevi od datog čvora s do ostalih čvorova se otkrivaju u rastućem redoslijedu dužina najkraćih puteva. • U algoritmu se postupno konstruiše skup čvorova S takav da je za svaki čvor u u S određena dužina najkraćeg puta d(u) od čvora s. • To je skup riješenih čvorova grafa G. Strukture podataka i algoritmi

Dijkstrin algoritam • Na početku je S = {s} i d(s) = 0. •

Dijkstrin algoritam • Na početku je S = {s} i d(s) = 0. • Da bi se u narednoj iteraciji skup riješenih čvorova S proširio za jedan čvor, za svaki neriješen čvor u u V-S se određuje dužina najkraćeg specijalnog puta od s do v. • Specijalni put do čvora v je neki put koji počinje od čvora s, zatim prolazi samo kroz riješene čvorove i na kraju dolazi do nekog čvora u iz S i završava se jednom granom u čvoru v. Strukture podataka i algoritmi

Dijkstrin algoritam Strukture podataka i algoritmi

Dijkstrin algoritam Strukture podataka i algoritmi

Primjer izvršavanja Dijkstrinog algoritma • Najkraći putevi od čvora s: Strukture podataka i algoritmi

Primjer izvršavanja Dijkstrinog algoritma • Najkraći putevi od čvora s: Strukture podataka i algoritmi

Primjer izvršavanja Dijkstrinog algoritma • Najkraći putevi od čvora s: Strukture podataka i algoritmi

Primjer izvršavanja Dijkstrinog algoritma • Najkraći putevi od čvora s: Strukture podataka i algoritmi

Primjer izvršavanja Dijkstrinog algoritma Strukture podataka i algoritmi

Primjer izvršavanja Dijkstrinog algoritma Strukture podataka i algoritmi

Primjer izvršavanja Dijkstrinog algoritma Strukture podataka i algoritmi

Primjer izvršavanja Dijkstrinog algoritma Strukture podataka i algoritmi

Primjer izvršavanja Dijkstrinog algoritma Strukture podataka i algoritmi

Primjer izvršavanja Dijkstrinog algoritma Strukture podataka i algoritmi

Primjer izvršavanja Dijkstrinog algoritma Strukture podataka i algoritmi

Primjer izvršavanja Dijkstrinog algoritma Strukture podataka i algoritmi

Implementacija Dijkstrinog algoritma • Za težinski graf G sa n čvorova i m grana

Implementacija Dijkstrinog algoritma • Za težinski graf G sa n čvorova i m grana izvršava se n-1 iteracija dodavanja novog čvora x skupu S. • Da se ne bi nepotrebno u svakoj iteraciji ponovo izračunavale dužine najkraćih specijalnih puteva do čvorova u V-S, one se čuvaju u nizu d dužine n koji je indeksiran čvorovima grafa G. Strukture podataka i algoritmi

Implementacija Dijkstrinog algoritma • Nakon dodavanja izabranog čvora x skupu S mora se uzeti

Implementacija Dijkstrinog algoritma • Nakon dodavanja izabranog čvora x skupu S mora se uzeti u obzir da je čvor x riješen i da možda postoje kraći specijalni putevi koji vode do njegovih susjeda. • Zbog toga se mora provjeriti vrijednost d(v) za svaki neriješen čvor v koji je susjedan čvoru x. • Ova operacija podešavanja dužine najkraćeg specijalnog puta do neriješenog čvora se naziva popuštanje. Strukture podataka i algoritmi

Popuštanje u Dijkstrinovom algoritmu • • • Za svaki neriješen čvor v koji je

Popuštanje u Dijkstrinovom algoritmu • • • Za svaki neriješen čvor v koji je susjedan riješenom čvoru x, novi specijalni put do v prati put od s do x u novom S i završava se granom {x, v}. Taj novi specijalni put ima dužinu d(x)+l(x, v). Ako je ta dužina kraća od postojećeg najkraćeg specijalnog puta do v dužine d(v), ta stara vrijednost d(v) se mora ažurirati vrijednošću d(x)+l(x, v). Strukture podataka i algoritmi

Dijkstrin algoritam // Ulaz: težinski graf G, čvor s u G // Izlaz: niz

Dijkstrin algoritam // Ulaz: težinski graf G, čvor s u G // Izlaz: niz d dužina najkraćih puteva od s do svih čvorova G algorithm dijkstra(G, s) S = {s}; d(s) = 0; for (svaki čvor v različit od s u G) do if ({s, v} grana u G) then d(v) = l(s, v); // dužina grane između s i v else d(v) = ∞; // beskonačna dužina while (S je pravi podskup od V) do Odrediti čvor x u V-S za koji je d[x] najmanje; S = S + x; for (svaki čvor v u V-S koji je spojen granom sa x) do d[v] = min{d[v], d[x] + l(x, v) }; // popuštanje return d; Strukture podataka i algoritmi

Izvršavanje Dijkstrinog algoritma od početnog čvora s = 1 Strukture podataka i algoritmi

Izvršavanje Dijkstrinog algoritma od početnog čvora s = 1 Strukture podataka i algoritmi

Zadatak - Dijkstrin algoritam • Slikovito ilustrovati izvršavanje Dijkstrinovog algoritma za izvorni čvor a:

Zadatak - Dijkstrin algoritam • Slikovito ilustrovati izvršavanje Dijkstrinovog algoritma za izvorni čvor a: Strukture podataka i algoritmi

Najkraći putevi između svih čvorova • Problem najkraćih puteva između svih čvorova sastoji se

Najkraći putevi između svih čvorova • Problem najkraćih puteva između svih čvorova sastoji se u nalaženju najkraćih puteva između svaka dva čvora u težinskom grafu G. • Jedan način za rješavanje ovog problema jeste višestruko izvršavanje Dijkstrinog algoritma od svakog čvora grafa. • Drugi način je primjenjujući Flojdov algoritam. Strukture podataka i algoritmi

Flojdov algoritam • Neka je G = (V, E) težinski graf i neka su

Flojdov algoritam • Neka je G = (V, E) težinski graf i neka su svi čvorovi grafa G proizvoljno numerisani tako da je V = {v 1, v 2, . . . , vn}. • Flojdov algoritam se zasniva na ideji da se nalaženje najkraćeg puta između bilo koja dva čvora vi i vj podijeli na nalaženje dva najkraća puta: - jednog puta od vi do nekog posrednog čvora, - drugog puta od tog posrednog čvora do vj. Strukture podataka i algoritmi

Flojdov algoritam • Najkraći put od vi do vj određuje se koristeći na tom

Flojdov algoritam • Najkraći put od vi do vj određuje se koristeći na tom putu samo posredne čvorove iz skupa prvih k čvorova Vk = {v 1, v 2, . . . , vk}. • Taj postupak se ponavlja redom za svako k = 1, 2, . . . , n pri čemu se dužina najkraćeg puta D(i, j, k) izračunava pomoću izraza: D(i, j, k) = min {D(i, j, k-1), D(i, k, k-1) + D(k, j, k-1)} Strukture podataka i algoritmi

Izračunavanje D(i, j, k) u Flojdovom algoritmu Strukture podataka i algoritmi

Izračunavanje D(i, j, k) u Flojdovom algoritmu Strukture podataka i algoritmi

Flojdov algoritam // Ulaz: težinski graf G predstavljen matricom susjedstva M // Izlaz: matrica

Flojdov algoritam // Ulaz: težinski graf G predstavljen matricom susjedstva M // Izlaz: matrica D takva da je D(i, j, n) = d(v i, vj) algorithm floyd(G) for i = 1 to n do for j = 1 to n do D[i, j, 0] = M[i, j]; for k = 1 to n do for i = 1 to n do for j = 1 to n do D[i, j, k] = min {D[i, j, k-1], D[i, k, k-1]+D[k, j, k-1]}; return D; Strukture podataka i algoritmi

Izvršavanje Flojdovog algoritma Strukture podataka i algoritmi

Izvršavanje Flojdovog algoritma Strukture podataka i algoritmi

Izvršavanje Flojdovog algoritma Strukture podataka i algoritmi

Izvršavanje Flojdovog algoritma Strukture podataka i algoritmi

Zadatak - Flojdov algoritam • Slikovito ilustrovati izvršavanje Flojdovog algoritma: Strukture podataka i algoritmi

Zadatak - Flojdov algoritam • Slikovito ilustrovati izvršavanje Flojdovog algoritma: Strukture podataka i algoritmi

Zaključak • Težinski grafovi su grafovi čijim granama je dodjeljena neka numerička vrijednost tzv.

Zaključak • Težinski grafovi su grafovi čijim granama je dodjeljena neka numerička vrijednost tzv. težina. • Težinski grafovi se predstavljaju pomoću matrice susjedstva i pomoću liste susjedstva. • Minimalno povezujuće stablo T težinskog grafa G = (V, E) je podgraf (V, T) grafa G čiji je zbir težina grana minimalan. Strukture podataka i algoritmi

Zaključak 2 • Algoritmi za određivanje minimalnog povezujućeg stabla: Kruskalov algoritam i Primov algoritam.

Zaključak 2 • Algoritmi za određivanje minimalnog povezujućeg stabla: Kruskalov algoritam i Primov algoritam. • Problem najkraćih puteva od jednog čvora sastoji se u tome da se za dati čvor s u težinskom grafu G odrede najkraći putevi od tog čvora s do svih ostalih čvorova u grafu G - Dijkstrin algoritam. • Problem najkraćih puteva između svih čvorova sastoji se u nalaženju najkraćih puteva između svaka dva čvora u težinskom grafu G - Flojdov algoritam. Strukture podataka i algoritmi

Hvala na pažnji! Strukture podataka i algoritmi

Hvala na pažnji! Strukture podataka i algoritmi