seminarski rad - grafovi i njihova primena
Post on 01-Jul-2015
1.074 Views
Preview:
TRANSCRIPT
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
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)
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
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
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
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
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
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
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
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
Као што је већ речено листе суседности у највећем броју случајева заузимају
значајно мање простора од матрице суседности. Ако је 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
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
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
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
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
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
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
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
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
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
top related