13
Visoka poslovna škola strukovnih studija Blace Seminarski rad iz predmeta Algoritmi i strukure podataka Grafovi Profesor Student dr Branislav Jevtović Igor Stoiljković 2009.

50076136 Algoritmi i Strukture Podataka Grafovi

Embed Size (px)

Citation preview

Page 1: 50076136 Algoritmi i Strukture Podataka Grafovi

Visoka poslovna škola strukovnih studijaBlace

Seminarski rad iz predmetaAlgoritmi i strukure podataka

Grafovi

Profesor Studentdr Branislav Jevtović Igor Stoiljković

2009.

Page 2: 50076136 Algoritmi i Strukture Podataka Grafovi

Sadržaj:

Uvod ............................................ 3 Istorijski pregled ........................... 4 Šta je graf? ................................... 5 Predstavljanje grafova u memoriji računara ....................................... 8 Predstavljanje grafova uz pomoć povezanih listi .............................. 9 Obilazak garafa u širinu (BFS) ........ 9 Obilazak grafa u dubinu (DFS) ...... 12 Literatura .................................... 13

2

Page 3: 50076136 Algoritmi i Strukture Podataka Grafovi

Uvod

Teorija grafova je oblast matematike, veoma zastupljena i u informatici, čija je oblast istraživanje osobina grafova. Neformalno govoreći, grafovi su sastavljeni od tačaka, odnosno čvorova (vrhova), i linija među njima, odnosno grana.

Veoma je česta upotreba grafova za opis modela ili struktura podataka. Struktura jedne veb prezentacije se može predstaviti slikovito upotrebom grafa. Čvorovi tog grafa su pojedine stranice a grane grafa su veze kojima se može sa jedne stranice prelaziti na drugu.

Proučavanje algoritama koji rešavaju probleme upotrebom grafova predstavlja veoma značajan deo informatičke nauke. Mreže imaju mnogo primena u proučavanju praktičnih aspekata teorije grafova i to se zove analiza mreža. Analiza mreža je posebno značajna za probleme modeliranja i analiziranje mrežnog saobraćaja, recimo interneta.

3

Page 4: 50076136 Algoritmi i Strukture Podataka Grafovi

Istorijski pregledTemelje teoriji grafova postavio je dobro poznati švajcarski

matematičar Leonhard Euler (Leonard Ojler) (1707.–1783) koji je 1736. godine rešio problem konigsberških mostova. Naime, stari pruski grad Konigsberg, današnji Kalinjingrad u Rusiji, smešten je na obalama reke Pregel. Deo grada nalazi se na dve ade (rečna ostrva), koje su povezane s kopnom i međusobno sa sedam mostova (vidi sliku ispod).

Građani Konigsberga voleli su šetati po mostovima, ali nerviralo ih je to što niko nije mogao pronaći način da prošeta gradom tako da svih sedam mostova pređe samo jednom i zatim se vrati kući. Za pomoć su se obratili Ojleru koji je u to vreme radio u Petrogradu. Ojler je vrlo brzo pokazao da je takva šetnja nemoguća.

Pretpostavimo da je takva šetnja moguća. Tada se ona završava u komponentama kopna A, B, C ili D, eventualno tamo gde je započela. Primetimo da svaka komponenta kopna u kojoj šetnja nije započela i nije se završila mora biti spojena sa parnim brojem mostova, jer za svaki most preko kojeg se dolazi na tu komponentu mora postojati i most preko kojeg se odlazi sa te komponente. Zato svaka komponenta koja je spojena s neparnim brojem mostova mora biti ili početak ili kraj šetnje. Ali u slučaju Konigsberga svaka komponenta A, B, C i D ima neparan broj mostova s kojima je povezana, a kako najviše dve komponente mogu biti početak, odnosno kraj šetnje, zaključujemo da takva šetnja nije moguća.

Ako komponente A, B, C i D prikažemo kao tačke ili vrhove, a mostove koji ih spajaju kao grane, dobijamo pojednostavljenu šemu vrhova i njihovih grana, tj. graf.

4

Page 5: 50076136 Algoritmi i Strukture Podataka Grafovi

Problem šetanja po konigsberškim mostovima ekvivalentan je problemu obilaska ovog grafa tako da krenemo iz jednog vrha i sve grane pređemo tačno jedanput.

Šta je graf?Definicija 1. Graf G je uređeni par G = (V,E), gde je V

neprazan skup čvorova, a E je skup grana. Svaka grana e ∈ E spaja dva čvora u, v ∈ V koji se zovu krajevi grane e. Grana čiji se krajevi podudaraju zove se petlja, a ako dve ili više grana povezuju isti par čvorova, zovu se višestruke grane. Ako graf sadrži višestruke grane, zove se multigraf, a ako nema ni petlje ni višestruke grane, zove se jednostavan graf. Broj čvorova u grafu označavamo sa V(G), a broj grana sa E(G).

Prim er 1. Graf sa slike pored definiše se na sledeći način:

G = (V,E)V = {a, b, c, d, e, f}E = {e1, e2, e3, e4, e5}e1 = {a, b}e2 = {b, c}e3 = {d, e}e4 = {b, f}e5 = {f, a}

5

Page 6: 50076136 Algoritmi i Strukture Podataka Grafovi

U prikazanom grafu grane su neusmerene, tj. po svakoj grani se može “ići u oba smera”. Drugim rečima, u primeru 1 se iz vrha a moglo doći u vrh b isto kao i iz vrha b u vrh a. Ali ponekad su grafovi usmereni pa grane imaju svoj smer. Na slikama se smer označava strelicama.

Prim er 2. (Slika pored) Kod zapisivanja koji su čvorovi pridruženi kojoj grani više ne koristimo vitičaste, nego okrugle zagrade jer kod usmerenih grafova postaje bitno koji čvor je prvi naveden.

e1 = (a, b)e2 = (b, c)e3 = (d, e)e4 = (b, f)e5 = (f, a)

Definicija 2. Stepen dG(u) čvora u je broj grana s kojima je čvor spojen, tj. koji su incidentni datom čvoru. Čvor stepena 1 se naziva list (izolovan čvor). Najmanji i najveći stepen čvora imaju posebne oznake

(G)=min dG(u) i ∆(G)=max dG(u).uєV uєV

Graf G je regularan ako svi čvorovi imaju isti stepen tj. ako je (G) = ∆(G). Kod usmerenih grafova izlazni stepen je broj grana koje “izlaze” iz čvora, a ulazni stepen je broj grana koje “ulaze” u čvor.

Definicija 3. Pod okolinom NG(u) čvora u grafa G = (V,E) podrazumevamo skup svih suseda čvora u:

NG(u)={v є V : {u, v} є E}.

Okolina NG(U) skupa čvorova U c V je skup čvorova iz V koji su susedi sa bar jednim čvorom iz U.

6

Page 7: 50076136 Algoritmi i Strukture Podataka Grafovi

Vrlo često se javlja potreba da svakoj grani e grafa G pridružimo realan broj w(e) koji zovemo težina grane e. Takav graf zovemo težinski graf. Na primer, ako čvorovi grafa predstavljaju gradove neke države, a grane putevi koje ih povezuju, težina grane može predstavljati dužinu puta, ili putarinu koju vozač mora da plati da se vozi tim putem.

Put u grafu je sekvenca čvorova i grana koja počinje čvorom i završava se čvorom, a za svaku granu su poznati završni čvorovi. Put dužine n od čvora u do čvora v se definiše kao sekvenca od n+1 čvorova (v0, v1, ... vn) tako da je v0 = u , vn = v. I za svaki čvor "i" između 1 i k važi da su čvorovi vi i vi+1 susedni (dužina puta jednaka je broju grana na putu). Prost put je put kod koga su svi čvorovi i grane različiti.

Ako postoji put nenulte dužine između čvorova vi i vj kaže se da je čvor vj dostižan iz čvora vi.

Definicija 4. Povezani graf je ako i samo ako postoji prost put između bilo koja dva njegova čvora. Strogo povezani graf je ako i samo ako postoji samo po jedan put iz svakog čvora do svih ostalih čvorova. Graf je kompletan ako je svaki čvor u susedan sa svakim čvorom v iz grafa. Kompletan graf sa n čvorova imaće n*(n-1)/2 grana.

Stepen čvora b je 3.

Stepen čvora a je 3, izlazni stepen je 2,

a ulazni stepen je 1.

7

Page 8: 50076136 Algoritmi i Strukture Podataka Grafovi

Predstavljanje grafova u memoriji računara

Jedan način predstavljanja grafa sa n čvorova je uz pomoć matrice susedstva dimenzija n x n (svaka vrsta i kolona odgovaraju po jednom čvoru grafa). Ukoliko postoji veza između čvorova vi i vj

tada se u vrsti koja odgovara čvoru vi i koloni koja odgovara čvoru vj je 1 . (adj[vi, vj] = 1, ako (vi, vj) ivica u G).

Ukoliko je e ukupan broj ivica grafa, tada će u matrici postojati 2e elemenata matrice koji su jednaki 1, ako je G neorijentisan graf. Ako je G usmeren graf, samo e elemenata matrice će biti 1.

Primeri predstavljanja grafova uz pomoć matrice susedstva su dati na sledećim slikama:

8

Page 9: 50076136 Algoritmi i Strukture Podataka Grafovi

Predstavljanje grafova uz pomoć povezanih listi

Za razliku od matrice susedstva koja čuva informaciju o svakoj mogućoj grani, reprezentacija zasnovana na listama susednosti čuva informacije samo o postojećim granama. Za svaki čvor konsturišemo povezanu listu koja sadrži sve čvorove susedne datom čvoru.

Ulančana reprezentacija grafa ima formu niza od n ulančanih listi, gde je po jedna ista predviđena za svaki čvor grafa. Svaki element liste odgovara jednoj grani. Ukoliko je graf težinski, element liste sadrži i dodatno polje u kojem se smešta težina odgovarajuće grane w(u, v).

Obilazak garafa u širinu (BFS)BREADTH-FIRST SEARCH koristi sistemsko pretraživanje koje

traži sve čvorove datog grafa počev od datog (izvornog) čvora koji se nalazi u nultom nivou. Pored otkrivanja svakog čvora koji je dostižan iz izvornog čvora, BFS algoritam može računati i rastojanje

9

Page 10: 50076136 Algoritmi i Strukture Podataka Grafovi

izvornog čvora do svakog čvora do kojeg postoji put iz izvornog čvora. Prilikom izvršavanja

10

Page 11: 50076136 Algoritmi i Strukture Podataka Grafovi

ovog algoritma u prvom koraku otkrivamo čvorove grafa iz prvog nivoa, zatim u narednom čvorove grafa iz drugog nivoa, i tako redom, sve dok ne otkrijemo sve čvorove datog grafa. Izvršenjem algoritma možemo konstruisati tako zvano BFS stablo koje će sadržati sve čvorove datog grafa koji su dostižni iz izvornog čvora. Algoritam se može primeniti na orijentisane i na neorijentisane grafove.

BFS algoritam boji čvorove grafa u belo, sivo ili crno. (Beli su svi čvorovi grafa pre početka izvršenja algoritma, sivi su čvorovi koje obilazimo, a crni su čvorovi čiji su svi susedni čvorovi obiđeni.)

BFS možemo iskoristi za rešavanje sledećih problema: Testiranje da li je graf povezan, izračunavanje povezane sume za graf, izračunavanje za svaki čvor u grafu put sa minimalnim brojem grana od izvornog čvora do tog čvora, ili obaveštenje ukoliko taj put ne postoji, izračunavanje ciklusa u grafu ili obaveštenje da ciklus nepostoji.

11

Page 12: 50076136 Algoritmi i Strukture Podataka Grafovi

Obilazak grafa u dubinu (DFS)DFS algoritam, pretražuje graf i otkriva njegoe čvorove sve

"dublje". Kod DFS algoritma pretražujemo granu koja napušta čvor v i a zatim i sve garedne grane. Kada završimo sa pretragom svih grana koje napuštaju čvor v vraćamo se unazad da bi smo nastavili sa pretragom grana koje napuštaju čvor iz kojeg smo stigli u čvor v. Postupak nastavljamo dok ne otkrijemo sve čvorove koji su dostižni iz izvornog čvora. Ako su ostali neki neotkriveni čvorovi, jedan od njih proglašavamo za izvorni čvor i pretražujemo dostižna stabla na isti način. Postupak se završava kada otkrijemo i poslednji čvor.

Razlika između BFS-a i ovog pretraživanja je u tome što prilikom DFS-a možemo dobiti više stabla, jer pretraga se može ponoviti iz više različitih izvora. Opet je inicijalno svaki čvor j ebeo, siv je kada ga otkrijemo, a crn je kada su svi njegovi susedi otkriveni.

Upotreba DFS-a: ako predstavimo otkrivanje čvora U sa levom zagradom "(U" i predstavimo završetak otkrivanja sa desnom zagradom "U)", onda istoriju otkrivanja čvorova predstavlja dobro napisan izraz sa dobro postavljenim zagradama.

12

Page 13: 50076136 Algoritmi i Strukture Podataka Grafovi

Literatura

"Introduction To Algorithms" (2nd Edition), McGraw Hill

"Introduction to Algorithms(Instructor's Manual)" , Thomas H. Cormen

"Algorithms", Robert Sedgewick

"Algoritmi i Strukture Podataka 2008_09" , dr Branislav Jevtović

www.wikipedia.com

13