Transcript
Page 1: seminarski rad - grafovi i njihova primena

I Uvod

Osnovni pojmovi

U računarstvu se susrećemo s dva osnovna pojma:

strukture podataka - “statički” aspekt nekog programa. Ono sa čime se radi.

algoritmi - “dinamički” aspekt programa. Ono što se radi.

Strukture podataka i algoritmi su u neraskidivoj vezi: nemoguće je govoriti o jednom a da

se ne spomene drugo.

Struktura podataka je skup varijabli u nekom program i veza među tim varijablama

Algoritam je konačni niz instrukcija, od kojih svaka ima jasno značenje i može biti

izvršena u konačnom vremenu. Iste instrukcije mogu se izvršiti više puta, pod pretpostavkom da

same instrukcije ukazuju na ponavljanje.

ALGORITAM + STRUKTURA PODATAKA = PROGRAM

U programiranju je važno definisati još neke elementarne pojmove – tip podatka i apstaraktni tip podatka (ATP).

Tip podataka - skup vrednosti koje neki podatak može poprimiti (npr. podatak tipa int

može imati samo vrednosti iz skupa celih brojeva koji se mogu predstaviti u računaru).

Apstraktni tip podataka (ATP) - zadaje se navođenjem jednog ili više tipova podataka,

te jedne ili više operacija (funkcija). Opertori i rezultati navedenih operacija su podaci navedenih

tipova. Među tipovima postoji jedan istaknuti po kojem celi apstraktni tip podataka dobija ime.

1

Page 2: seminarski rad - grafovi i njihova primena

PROBLEM REŠENJE

Iz ovog dijagrama vidi se uloga apstraktnih tipova podataka, struktura podataka i

algoritama u postupku rešavanja problema.

Takođe se vidi da se programiranje u podjednakoj meri sastoji od razvijanja struktura

podataka kao i od razvijanja algoritama.

1. Strukture podataka

Struktura podataka se sastoji od manjih celina koje se udružuju u veće i međusobno

povezuju vezama. Uvodimo posebne nazive za celine, načine udruživanja i načine povezivanja.

Takode, uvodimo pravila kako se strukture prikazuju dijagramima.

Ćelija je varijabla koju promatramo kao zasebnu celinu.To je relativan pojam (nešto se u

jednom trenutku može smatrati ćelijom, a kasnije se može gledati unutrašnja građa iste celine).

Svaka ćelija ima svoj tip i adresu.

2

Matematički model

Apstraktni tipovi

podataka

Strukture podataka

Neformalno opisani globalni

algoritam rešavanja problema

Globalni algoritam zapisan u

pseudokoodu (poziva funkcije

iz ADT)

Globalni algoritam zapisan

u prog. jeziku (operacije iz ADT

pretvorene u funkcije)

Page 3: seminarski rad - grafovi i njihova primena

Polje (array) je mehanizam udruživanja manjih delova strukture u veće. Polje čini više

ćelija istog tipa sačuvanih na uzastopnim adresama. Broj ćelija je unaprijed zadat i nepromjenljiv.

Jedna ćelija se zove element polja i jednoznačno je određena pripadajućom vrijednošću indeksa.

Zapis - (slog). Takođe mehanizam udruživanja manjih dijelova strukture u veće. Zapis

čini više ćelija, koje ne moraju biti istog tipa, ali koje su sačuvane na uzastopnim adresama. Broj,

redosled i tip ćelija je unapred zadat i nepromenjiv. Pojedina ćelija se zove komponenta zapisa.

Polja i zapisi se mogu kombinovati. Na primer, možemo imati polje zapisa, zapis čije pojedine

komponente su polja, polje od polja, zapis čija komponenta je zapis, i slično.

Pointer - služi za uspostavljanje veze između delova strukture. Pointer je ćelija koja

pokazuje na neku drugu ćeliju. Sadržaj pointera je adresa ćelije na koju pokazuje.

Kursor - takođe služi za uspostavljanje veze između delova strukture. Kursor je ćelija

tipa int koja pokazuje na element nekog polja. Sadržaj kursora je indeks elementa na koji

pokazuje.

Strukture podataka možemo podeliti:

1) Prema relacijama elemenata na:

Linearne ( jedan element je u vezi sa još najviše dva elementa, primer nizovi I

liste )

Nelinearne ( jedan element može biti u vezi sa više elemenata, primer stabla I

grafovi )

2) Prema mogućnosti promene veličine na:

3

Page 4: seminarski rad - grafovi i njihova primena

Statičke ( nizovi, sa prethodno definisanim brojem elemenata )

Dinamičke ( pokazivači – reference )

2. Nelinearne strukture podataka

Kada jedan element strukture može biti u vezi sa više od dva druga elementa, takva

struktura podataka je nelinearna (višedimenzionalna) struktura. Memorijska reperezentacija

ovakvih struktura je najčešće ulančana, ali može biti i sekvencijalna. Nelinearne strukture su

stable I grafovi.

3. Grafovi I njihova primena

Grafovi su matematički objekti koje veoma često srećmo u svakodnevnom životu. Ako

posmatramo neku geografsku mapu sa mnoštvom gradova koji su povezani nekim putevima

dobijamo jedan graf. U skupu ljdi na nekom predavanju neki se međusobno poznaju, a neki ne pa

ako sve ljude predstavimo tačkicama, a samo one koji se poznaju spojimo linijama dobćemo

jedan graf, koji nam daje dobru sliku poznanstva meuđu ljudima na tom predavnju.

Zbog velikog spektra primena, kao i izuzetno jednostavne veze definicije i osnovnih

svojstava, grafovi su našli i veliku primenu ne samo u drugim matematičkim oblastima poput

kombinatorike, kombinatorne optimizacije, operacionih istraživnja, linearne algebre, kompleksne

analize, nego i u drugim (nematematičkim) naukama kao što su elektrotehnika, računarstvo,

hemija, fizika, biologija, sociologija, vojne nauke...

4

Page 5: seminarski rad - grafovi i njihova primena

3.1. Teorije grafova

Prvi problem i njegovo rešenje izneseni na način koji je drugačiji u odnosu na prethodne i

može se smatrati pretečom teorije grafova jeste rad Leonarda Ojlera pod nazivom Sedam mostova

Kenigsberga1, objavljen 1736.

Keningsberg, danas poznat pod nazivom Kalinjingrad je ruska enklava na Baltiku

smeštena između Poljske i Litvanije. Sam grad je u prošlosti imao sedam mostova koji su

povezivali dva ostrva unutar grada s ostatkom grada. Postavljeno je pitanje – Je li moguće preći

preko svakog od mostova samo jednom i vratiti se na početnu tčku?2 Ovo je pitanje

zainteresovalo Leonarda Ojlera koji je 1763. godine i dao konačan odgovor na ovo pitanje.

Slika 1. Ostrva Keninsberga

Kako bi došao do svog rešenja, Ojler je celi problem predstavio u obliku teorije grafova.

Prvo je izbacio sve karakteristike terena osim samih kopnenih masa i mostova koji ih povezuju.

Nakon toga, svaku je zemljanu masu predstavio tačkom koja se naziva čvor, i svaki most s

linijom, nazvanom luk ili veza (link). Dobijena matematička struktura se naziva grafom.

Frensis Gutri je 1852. godine je izložio problem četiri boje koji postavlja pitanje da li je

moguće obojiti zemlje na geografskoj karti sa samo četiri boje, a da se ne pojave dve susedne

1 Do današnjih dana su se održala samo dva mosta iz Eulerovog vremena. Dva su mosta uništena tijekom savezničkog uništavanja

Koeningsberga u Drugom svjetskom ratu, druga dva su uništili Rusi i zamijenili ih autocestama. Jedan su most tijekom 1935.

godine ponovno izgradili Njemci.

2 Inače, postoji urbana legenda kako su oko 1750. godine brojni ugledni stanovnici tadašnjeg Keningsberga nedeljom u svojim

popodnevnim šetnjama pokušavali preći mostove na opisani način.

5

Page 6: seminarski rad - grafovi i njihova primena

zemlje obojene istom bojom. Ovaj problem su rešili tek 1976. godine Kenet Apel i Volfgang

Heken, ali se postavljanje ovog problema smatra rođenjem teorije grafova. Tokom pokušaja

rešavanja ovog problema otkrivene su mnoge teoreme i postavljeni mnogi teoretski pojmovi i

koncepti.

3.2. Definicija grafa

Graf je apstraktni matematički objekat. Neformalno govoreći, grafovi su sastavljeni od

tačaka, odnosno čvorova (vrhova) i linija među njima, odnosno grana.

Slika 2. Grafička predstava grafa

Skup čvorova možemo obeležiti sa V, a skup grana sa E.

Definicija

Graf G je uredeni par G = (V,E), gdje je V neprazan skup čvorova, a E je skup grana.

Svaka grana e ∈ E spaja dva čvora u, v ∈ V koji se zovu krajevi od e. Grana čiji se

krajevi podudaraju zove se petlja, a ako dve ili više grane povezuju isti par čvorova, zovu se

višestruke grane. Ako graf sadrži višestruke grane, zove se multigraf, a ako nema ni petlji ni

6

Page 7: seminarski rad - grafovi i njihova primena

višestrukih grana, zove se jednostavan graf. Broj čvorova u grafu označavamo sa v(G), a broj

grana sa e(G).

Stepen čvora je broj grana s kojima je čvor spojen, tj. koji su incidentni čvoru. Kod

usmerenih grafova izlazni stepen je broj grana koje “izlaze” iz čvora, a ulazni stepen je broj grana

koje “ulaze” u čvor.

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.

Graf je povezan (engl. connected) ako se svaka dva čvora mogu povezati nekim putem. U

suprotnom, on je nepovezan (engl. disconnected).

Potpuni graf (engl. complete graph) je onaj u kome su svi čvorovi međusobno povezani

tačno jednom granom. Retko, u potpunom grafu može izostati grana koji povezuje čvorove sa

njima samima. Razlikujemo guste (engl. dense) i retke (engl. sparse) grafove. Oni grafovi koji su

skoro potpuni samtraju se gustim, a oni u kojima je svakom čvoru susedno svega nekoliko grana

smatramo retkim.

Za graf kažemo da je izomorfan (engl. graph isomorphism) ako važi sledeće: Neka za

zadata dva grafa (G1 i G2) postoji bijektivna funkicija f koja svakom čvoru G1 pridružuje čvor

G2. Osim toga, mora važiti da je broj grana koje povezuju neka dva čvora x i y iz G1 jednak

broju čvorova koji povezuju čvorove f(x) i f(y) u G2. Jednostavnije rečeno, ako dva grafa G1 i

G2 nacrtani mogu dati istu sliku, smatramo da su oni izomorfni.

Graf je planaran (engl. planar graph) ako se može nacrtati u ravnini bez da mu se grane

seku.

Grafovi se mogu podeliti na usmerene i neusmerene. Osnovna razlika između

usmerenih i neusmerih grafova je u tome što je grana u usmerenom grafu uređeni par čvorova.

Usmereni grafovi često se nazivaju i digrafovima. Stoga, za granu X = (A, B) kažemo da

povezuje čvor A sa čvorom B, ali ne nužno i obrnuto. Kažemo da grana X počinje u čvoru A, a

7

Page 8: seminarski rad - grafovi i njihova primena

završava u čvoru B. Usmereni aciklički graf je onaj graf koji u sebi ne sadrži ciklus. Graf sa

slike 3 primer je takvog grafa.

Slika 3. Primer usmerenog grafa

3.3. Predstavljanje grafa na racunaru

Kako ni u jednom od najpopularnijih programskih jezika graf ne postoji kao tip podatka,

ako želimo da ga predstavimo moramo to uraditi preko postojećih tipova, pri čemu je bitno da što

efikasnije opišemo topologiju grafa – incidentnost ivica sa čvorovima.

Čvorovi grafa se najčešće prikazuju kao celi brojevi, recimo u intervalu od 0 do n-1.

Ukoliko su originalno čvorovi označavani na neki drugi način, recimo nazivima (stringovima) ili

korišćenjem bilo kog kompleksnog tipa, uvek je moguće izvršiti mapiranje niza takvih naziva u

gore navedeni niz 0 ... n-1 tako da ćemo njega uzeti kao podrazumevano obeležavanje čvorova.

Kod predstavljanja ivica se već javlja dilema. Postoje 2 najčešća predstavljanja, dok

ostala koja se retko koriste uglavnom mogu da se smatraju kompromisom njihovih osobina. To

su:

1) matrica susednosti

2) liste susednosti

3.3.1. Matrica susednosti

8

Page 9: seminarski rad - grafovi i njihova primena

Ako imamo graf G = (V, E) sa n čvorova njegov skup ivica E se može prikazati

kvadratnom matricmo dimanezije n×n čije svako polje ei,j ima vrednost 1 ukoliko ivica (i, j)

pripada skupu ivica E, dok u suprotnom ima vrednost 0. Tako bi za 2 data primera grafa imali

sledeće matrice susednosti:

Slika 4. Matrice susedstva I grafovi

Primetimo da je za neusmereni graf, kao recimo onaj na slici levo, matrica susednosti

simetrična u odnosu na svoju glavnu dijagonalu, odnosno da je E = Et.

Ovakav vid predstavljanja skupa ivica zauzima O(n2) prostora. Preciznije, ako je za 1

polje potreban 1 b onda je za celu matricu potrebno n2 / 8 B prostora. Pošto su grafovi najčešće

retki, odnosno imaju mnogo manje od n2 ivica, potrošnja prostora je neopravdano velika, dok za

9

Page 10: seminarski rad - grafovi i njihova primena

veliko n predstavljanje preko matrice susednosti postaje neizvodljivo. Sa druge strane ako je graf

relativno gust, odnosno broj ivica mu je blizu n2, ovakvo predstavljanje je optimalno.

3.3.2. Liste susednosti

Kao što smo videli matrice susednosti čuvaju 0/1 vrednost za svaku moguću ivicu grafa,

pa kada imamo redak graf ove matrice zauzimaju neopravdano mnogo prostora čuvajući 0 za sve

moguće neprisutne ivice. Da bi se ova loša osobina otklonila, došlo se na ideju da se ne čuvaju

informacije o prisutnosti svih mogućih ivica, već da se vezano za svaki čvor pamti po lista

prisutnih ivica koje izlaze iz njega (lista susednosti). U ovim listama ivice mogu da budu

navedene u proizvoljnom poretku, ali je često zgodno da budu sortirane po 2. Čvoru da bi se time

olakšalo pretraživanje. Liste susednosti za 2 prethodno data primera grafa bi izgledale ovako:

Slika 5. Liste susednosti za date grafove

Некад се уместо листа суседности користе листе инциденције7, које за сваки чвор

чувају по листу ивица (уређених парова) које излазе из њега, уместо листе суседа (2.

чланова тих уређених парова). Овакав приступ је више објектно-оријентисан и уводи

ивице као објекте, самим тим олакшавајући манипулисање и додавање разних атрибута. Са

друге стране заузима се мало више простора.

10

Page 11: seminarski rad - grafovi i njihova primena

Као што је већ речено листе суседности у највећем броју случајева заузимају

значајно мање простора од матрице суседности. Ако је n број чворова а e број ивица графа,

оне троше O(n+e) простора. Конкретно, на 32-битној архитектури, користећи за

обележавање чворова као и за показиваче једна реч (4 B), а користећи најосновнију

имплементацију листе, листе суседности узимају (4n + 8e) B.

3.3.3. Poređenje performansi pri predstavljanju matricom I listama

Kada se govorilo o ova 2 predstavljanja skupa ivica grafa uglavnom se pominjala

potrošnja memorijskog prostora. Sada ću se detaljnije pozabaviti pitanjem prostorne složenosti,

ali ću otvoriti i pitanje vremenske složenosti nekih najčešćih osnovnih operacija koje se sprovode

nad grafovima.

POTROŠNJA PROSTORA

Kao što je već izneto, matrično predstavljanje ima složenost O(n2) a ulančano O(n+e). Uz

gore navedene pretpostavke o načinu implementacija ova 2 predstavljanja dobijene su konkretne

referentne vrednosti n2 / 8 B i (4n + 8e) B respektivno. Očigledno je za retke grafove povoljnije

ulančano predstavljanje, a za guste matrično. Sada se postavlja pitanje kolika je granična gustina

grafa preko koje matrično predstavljanje postaje povoljnije od ulančanog. Da bismo odgovorili na

ovo pitanje potrebno je prvo da uvedemo gustinu grafa sa d = e / n2.8 Ako izjednačimo 2

konkretne referentne vrednosti i izvršimo potrebne aproksimacije dobijamo da je kritična gustina

preko koje matrično predstavljanje postaje povoljnije d ≈ 1/64. Ovaj rezultat treba uzeti okvirno

zbog navođenja konkretnih implementacija. Treba imati još jednu dosetku u vidu. Naime, za jako

guste grafove (sa konkretnim implementacijama za d > 63/64) se umesto matrice susednosti

mogu koristiti liste nesusednosti koje se od listi susednosti razlikuju po tome što za svaki čvor

postoji po lista čvorova sa kojima on nije povezan.

Kao zaključak može se reći da je naizgled matrično predstavljanje prostorno povoljnije za

znatno širi opseg gustina grafova nego što je to slučaj sa ulančanim. Međutim, pošto je većina

11

Page 12: seminarski rad - grafovi i njihova primena

grafova koji modeliraju objekte iz realnog sveta upravo jako redak, ulančano predstavljanje se

znatno češće pokazuje kao bolje rešenje što se potrošnje prostora tiče.

VREMENSKE PERFORMANSE

Pored prostorne složenosti predstavljanja bitna je i vremenska složenost raznih osnovnih

operacija nad grafovima predstavljenim na ova 2 načina.

Kao što se može i pretpostaviti, predstavljanje preko lista susednosti se bolje pokazuje

bilo kakvoj vrsti obilaska grafa kao i nizu drugih popularnih algoritama. Tada se za ulančano

predstavljanje samo prođe kroz odgovarajuću listu suseda, dok se kod matričnog predstavljanja

mora proći kroz ceo odgovarajući red (O(n)).

Sa druge strane, predstavljanje preko matrice susednosti je nadmoćno onda kada je

potrebno pronaći konkretnu ivicu (u, v) - random access. Takva potreba se javlja opet u

pristojnom broju popularnih algoritama. Tada se za matrično predstavljanje indeksiranjem mesto

tražene ivice pronalazi u konstantnom vremenu (O(1)), dok je za ulančano predstavljanje

potrebno prolaziti kroz listu susednosti 1. čvora, a to je vremenski srazmerno dužini te liste.

Zaključak može biti da predstavljanje treba izabrati u skladu sa algoritmima koje

nameravamo da sprovodimo nad datim grafom jer ne postoji univerzalno bolje predstavljanje.

3.4. Obilazak grafa

U radu sa grafovima se često javlja potreba da se na sistematičan način po tačno jedan put

posete svi njegovi čvorovi. Ovakav obilazak se može početi iz unapred zadatog čvora, ili se

početni čvor može izabrati na slučajan način. Obilazak se odvija iterativno, a do novih čvorova se

dolazi prateći ivice koje izlaze iz već posećenih čvorova, pri čemu se do tada posećeni čvorovi ne

posećuju nanovo.

Redosled obilaska čvorova osim pravila izbora narednog čvora za obilazak zavisi i od

izbora početnog čvora. To je najočiglednije kod nepovezanih ili usmerenih grafova, gde se

nekada praćenjem ivica koje izlaze iz posećenih čvorova ne mogu naći novi neposećeni čvorovi

12

Page 13: seminarski rad - grafovi i njihova primena

iako oni postoje. U tom slučaju postupak obilaska treba ponoviti uzimajući neki od neposećenih

čvorova kao početni.

Obilaskom grafa dobija se stablo obilaska koje sadrži sve čvorove grafa kao i one ivice

preko kojih su se pronalazili i posećivali novi čvorovi. U odnosu na ovo stablo ivice grafa se dele

u 4 kategorije:

• Ivica stabla (u, v) je ona ivica preko koje se prvi put tokom obilaska otkriva I posećuje

čvor v; čvor v je direktni sledbenik čvora u u stablu obilaska.

• Ivica unapred (u, v) je ona ivica gde je čvor v sledbenik, ali ne direktni čvora u u stablu

obilaska.

• Povratna ivica (u, v) je ona ivica gde je čvor v prethodnik čvora u u stablu obilaska.

• Poprečna ivica (u, v) je ona ivica gde u i v nisu u direktnoj liniji nasleđivanja u stablu

obilaska.

Kao što je već uočeno algoritmi obilaska grafa se razlikuju po pravilu izbora narednog

čvora za obilazak. Dva osnovna algoritma su:

• Obilazak po širini ( BFS )

• Obilazak po dubini ( DFS )

3.4.1. Obilazak ( pretraživanje ) u širinu

Za zadati graf G = (V,E), i početni vrh s, pretraživanje u širinu sistematično istražuje

grane grafa da bi “otkrilo” svaki čvor dostupan iz s. Ideja je da se iz čvora s prvo posete svi

susedni čvorovi od s, zatim “susedi suseda” itd. sve dok se ne posete svi čvorovi dostupni iz s.

Pritom se računa udaljenost (najmanji broj grana) od s do svih dostupnih čvorova (dakle, ovaj

algoritam usput rešava problem najkraćeg puta od s do ostalih čvorova).

Ime je dobio po tome što se granica između otkrivenih i neotkrivenih čvorova “širi” kroz

graf, tj. algoritam prvo otkriva čvorove na udaljenosti k od s, a tek onda one na udaljenosti k + 1.

Da bi pratio napredak, ovaj algoritam boji čvorove belom, sivom ili crnom bojom. Na

početku su svi čvorovi beli. Kad je neki čvor prvi put otkriven, on postaje siv, a kad sve njemu

susedne bele čvorove obojimo u sivo, postaje crn. Na taj način su svi susedi nekog crnog čvora

sivi ili crni, dok sivi čvor može imati bele čvorove među svojim susedima. Sivi čvorovi

predstavljaju granicu izmedu otkrivenih i neotkrivenih čvorova.

13

Page 14: seminarski rad - grafovi i njihova primena

Ovome odgovara struktura podataka red (queue) uz koju vežemo dve operacije: možemo

staviti nešto na kraj reda i uzeti nešto sa početka reda. U redu će uvek biti sivi čvorovi; uzećemo

jedan sivi čvor s početka reda, sve njegove bele susede staviti na kraj reda (pritom će oni postati

sivi) I obojiti čvor u crno.

Za reprezentaciju grafa koristićemo liste susedstva lista gde lista(x) predstavlja listu

susednih čvorova čvoru x. Sa d(x) ćemo označiti najmanji broj grana od s do x, a sa boja(x) boju

čvora x.

Algoritam pretraživanje u širinu glasi:

1. Za svaki čvor u ∈ V \ {s} postavi d(u) ← ∞ i boja(u) ← bela.

2. d(s) ← 0.

3. boja(s) ← siva.

4. Stavi s na kraj reda.

5. Dok je red neprazan radi sledeće:

5.1. Uzmi u s početka reda.

5.2. Za svaki čvor v ∈ lista(u), ako je boja(v) = bela, radi sledeće:

5.2.1. d(v) ← d(u) + 1.

5.2.2. boja(v) ← siva.

5.2.3. Stavi v na kraj reda.

5.3. boja(u) ← crna.

Algoritam radi na sledeći način - Korak 1. postavlja sve udaljenosti na nulu, kao i sve

boje na belu. Koraci 2.–4. postavljaju udaljenost početnog čvora na 0, boje ga u sivo (jer je on

otkriven na početku) i stavljaju ga u red. Petlja pod 5. korakom je glavni deo. Dok god ima sivih

čvorova, red je neprazan i sadrži čvorove koji su otkriveni, ali njihove liste susedstva još nisu

pregledane. Algoritam redom uzima sive čvorove s početka reda (korak 5.1.), pregledava čvorove

u njihovim listama susedstva (korak 5.2.) i, ako su beli, otkriva ih, boji u sivo, postavlja im

udaljenost d(v) na d(u)+1 i stavlja ih u red (koraci 5.2.1.–5.2.3.). Konačno, kad su svi čvorovi u

listi susedstva pregledani, čvor u postaje crn (5.3.).

14

Page 15: seminarski rad - grafovi i njihova primena

Slika 6. Pretraživanje grafa u širinu

Ako ovakvim obilaskom kroz graf G = (V,E) konstruišemo stablo (podgraf) T = (V,ET )

tako da za svaki beli susedni čvor v čvora u dodamo granu (u, v) u ET , dobićemo razapinjuće

stablo grafa G poznato pod nazivom breadth-first search tree. U ovom stablu jasno se vide

najkraći putevi od čvora s do ostalih čvorova; najkraći put u grafu G od čvora s do čvora u

odgovara putu od s do u u razapinjućem stablu T.

3.4.2. Obilazak ( pretraživanje ) u dubinu

Drugi algoritam za obilazak grafa je pretraživanje u dubinu. Ovaj algoritam takođe

sistematčcno pronalazi sve čvorove, ali na nečto drukčiji način od pretraživanja u širinu. Naime,

umesto da se širi u grafu, on nastoji uvek ići “dublje” u graf, tj. za svaki susedni čvor v čvora u

pretraživanje u dubinu se rekurzivno poziva i proverava susede čvora v pre nego se vrati i proveri

preostale susede čvora u.

Slično kao kod pretraživanja u širinu, i pretraživanje u dubinu boji čvorove kako bi pratilo

napredak. Svaki čvor je na početku beli, kad je otkriven postaje siv, a kad je završen (tj. kad su

mu svi čvorovi na listi susedstva otkriveni i provereni) postaje crn.

15

Page 16: seminarski rad - grafovi i njihova primena

Opet za reprezentaciju koristimo liste susedstva, a svakom čvoru v ćemo ovim

algoritmom pridružiti broj br(v) od 1 do v(G).

Algoritam pretraživanje u dubinu glasi:

1. Za svaki čvor u ∈ V postavi br(u) ← 0 i boja(u) ← bela.

2. i ← 0.

3. Poseti čvor s.

4. Počni proceduru Poseti čvor u.

4.1. boja(u) ← siva.

4.2. i ← i + 1.

4.3. br(u) ← i.

4.4. Za svaki čvor v ∈ lista(u), ako je boja(v) = bela, Poseti čvor v.

4.5. boja(u) ← crna.

Algoritam radi na sledeći način - U koracima 1. i 2. svi brojevi br(u) se postavljaju na

nulu, sve boje se postavljaju na belu i inicijalizuje se brojač i. U koraku 3. poziva se procedura

Poseti čvor u za početni čvor s. Korakom 4. započinje glavni deo algoritma—rekurzivna

procedura Poseti čvor u: u koracima 4.1.–4.3. boja čvora u postaje siva, brojač se uvećava za 1 i

pridružuje se varijabli br(u). Korakom 4.4. za svaki susedni čvor v čvora u procedura Poseti čvor

u se rekurzivno poziva. Konačno, poslednjim korakom 4.5. boja čvora u postaje crna, što znači da

su svi njegovi susedni čvorovi otkriveni i završeni.

Slično konstrukciji breadth-first search stabla kod pretraživanja u širinu, pretraživanjem u

dubinu može se konstruisati razapinjuće stablo depth-first search tree.

16

Page 17: seminarski rad - grafovi i njihova primena

Slika 7. Pretraživanje u dubinu

3.5. Neki specijalni grafovi

1) Potpun graf

Svaka dva čvora spojena su ivicom

2) Graf – ciklus

Ivice obrazuju ciklus

17

Page 18: seminarski rad - grafovi i njihova primena

3) Graf – put

Ivice obrazuju put

4) Nula graf

Graf sadrži samo čvorove

5) Potpuni biparitni graf - Skup čvorova se može podeliti na dva skupa, tako da čvorovi u istom skupu nisu spojeni, a svaka dva čvora iz različitih skupova su spojeni

6) Mreža – orijentisani graf koji ne sadrži ni jedan zatvoreni put niti petlju

18

Page 19: seminarski rad - grafovi i njihova primena

Literatura

1. Slajdovi sa predavanja

2. Dragoš Cvetković: Diskretne matematičke strukture; Naučna knjiga, Beograd, 1983.

3. Dragoš Cvetković, Teorija grafova i njene primene, Naučna knjiga, Beograd, 1990.

4. Vojislav Petrović, Teorija grafova, Novi Sad, 1998.

5. Wikipedia, free encyclopedia, http://sr.wikipedia.org

6. Internet http://imi.pmf.kg.ac.rs, http://www.raf.edu.rs i dr.

19

Page 20: seminarski rad - grafovi i njihova primena

Sadržaj :

Uvod – osnovni pojmovi …………………………………………………………1

1. Strukture podataka ……………………………………………………………..2

2. Nelinearne structure podataka …………………………………………………4

3. Grafovi I njihova primena ……………………………………………………..4

3.1. Teorija grafova …………………………………………………………….5

3.2. Definicija grafa .............................................................................................6

3.3. Predstavljanje grafa na računaru ...................................................................8

3.3.1. Matrica susednosti .................................................................................9

3.3.2. Liste susednosti ....................................................................................10

3.3.3. Poređenje performansi pri predstavljanju matricom I listama..............11

3.4. Obilazak grafa ..............................................................................................12

3.4.1. Obilazak ( pretraživanje ) u širinu ........................................................13

3.4.2. Obilazak ( pretraživanje ) u dubinu ......................................................15

3.5. Neki specijalni grafovi ..................................................................................17

Literatura .................................................................................................................19

20


Recommended