Professional Documents
Culture Documents
Algoritmi I Strukture Podataka-Grafovi
Algoritmi I Strukture Podataka-Grafovi
Algoritmi I Strukture Podataka-Grafovi
Blace
Grafovi
Profesor Student
dr Branislav Jevtović Igor Stoiljković
2009.
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
Uvod
3
Istorijski pregled
Temelje 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).
4
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).
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
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.
e1 = (a, b)
e2 = (b, c)
e3 = (d, e)
e4 = (b, f)
e5 = (f, a)
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.
6
Stepen čvora a je 3, izlazni stepen
Stepen čvora b je je 2,
3. a ulazni stepen je 1.
7
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).
8
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.
9
izvornog čvora do svakog čvora do kojeg postoji put iz izvornog
čvora. Prilikom izvršavanja
10
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.)
11
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.
12
Literatura
"Introduction To Algorithms" (2nd Edition), McGraw Hill
www.wikipedia.com
13