Professional Documents
Culture Documents
Teorija grafova
Niš, 2021.
Sadržaj
1. Uvod...........................................................................3
2. Tipovi grafikona............................................................5
3. Neusmereni graf...........................................................5
4. Usmereni graf..............................................................5
5. Ponderisani grafikoni.....................................................6
6. Specijalni grafikoni........................................................7
7. Drvo (stablo)................................................................7
8. Ukorenjeno stablo.........................................................7
18. Mostovi........................................................................13
25. Literatura.....................................................................31
2
Uvod
3
Primer kanonske teorije grafova je društvena mreža prijatelja. Ovo
omogućava zanimljiva pitanja poput: koliko prijatelja osoba x ima? Ili
koliko stepena razdvajanja postoji između osobe x i osobe y?
4
TIPOVI GRAFIKONA
Neusmereni graf
Neusmereni graf je graf u kome ivice nemaju orijentaciju. Ivica
(u, v) je identična ivici (v, u)
Usmereni graf
Usmereni graf ili diagraf je graf u kome ivice imaju orijentacije. Na
primer, ivica (u, v) je ivica od čvora u do čvora v
5
Ponderisani grafikoni
Mnogi grafovi mogu imati ivice koje sadrže određenu težinu (vrednost)
i mogu da predstavljaju proizvoljnu vrednost kao što su cena,
udaljenost, količina itd
6
Specijalni grafikoni
Drvo (stablo)
Drvo (stablo) je usmereni graf bez krugova. Ekvivalentno, to je
povezani graf sa N čvorovima i N -1 ivicama.
Ukorenjeno stablo
Ukorenjeno stablo je stablo sa naznačenim korenskim čvorom gde
svaka ivica pokazuje ili od ili prema korenovom čvoru. Kada se ivice
usmeravaju od korena, grafikon se naziva arborescencija (izvan
stabla-out tree) a prema korenu anti-arborescencija (ka stablu-in
tree). Cesce se koristi out-tree.
7
Dvoparni graf
Dvoparni graf je onaj čija temena se mogu podeliti u dve nezavisne
grupe U, V tako da se svaka ivica povezuje između U i V
Postoje i druge definicije kao što su: Grafikon je dvobojan ili ne postoji
ciklus neparne dužine.
Kompletni grafikoni
Kompletan graf je onaj gde postoji jedinstvena ivica između svakog
para čvorova. Kompletni graf sa n vrhom označava se kao graf Kn.
8
Predstavljanje grafikona
Matrica susednosti
Matrica susednosti m je vrlo jednostavan način predstavljanja grafa.
Ideja je da ćelija m [i] [j] predstavlja težinu ivice koja ide od čvora i
do čvora j.
Napomena: Često se pretpostavlja da ivica koja ide sa čvora na samu
sebe vredi nula
Prednosti Mane
Prostor efikasan za predstavljanje Zahteva 0 (V2) prostora
gustog grafa Iteriranje preko svih ivica traje 0
Pregled težine ivica je 0 (1) (V2) vremena
Najjednostavniji prikaz grafikona
Lista susednosti
Lista susednosti je način predstavljanja grafa kao mape od čvorova do
liste ivica, gde pratimo dve stvari, cvor gde idemo i vrednost potrebna
da stignemo do njega
Prednosti Mane
9
Prostor efikasan za predstavljanje Manje efikasan prostor za gušće
proređenih grafova grafove
Iteriranje preko svih ivica je efikasno Pregled težine ivica je 0 (E)
Nešto složeniji prikaz grafa
Lista ivica
Lista ivica je način da se grafikon predstavi jednostavno kao
neuređena lista ivica. Pretpostavimo da oznaka za bilo koji triplet (u,
v, v) znači: trošak od čvora u do čvora v je w
Ova reprezentacija se retko koristi zbog nedostatka u strukturi.
Međutim, konceptualno je jednostavan i praktičan u dosta algoritama
Prednosti Mane
Prostor efikasan za predstavljanje Manje efikasan prostor za gušće
proređenog grafa grafove
Iteriranje preko svih ivica je efikasno Pregled težine ivica je 0 (E)
Vrlo jednostavna struktura
Povezanost
Da li postoji putanja između čvora A i čvora B? Nije nam bitan
minimalan trosak, vec da li uopste moze da se dodje iz jednog cvora u
drugi.
11
Čvrsto povezane komponente se mogu smatrati samostalnim
ciklusima unutar usmerenog grafa gde svaki vrh u datom ciklusu
može doći do svakog drugog vrha u istom ciklusu
Algoritmi:Tarjan’s, Kosaraju’s
Mostovi
Most / presečena ivica je bilo koja ivica na grafikonu čije uklanjanje
povećava broj povezanih komponenata
12
Mostovi (koji su na grafikonu oznaceni roze) su važni u teoriji grafova
jer često nagoveštavaju slabe tačke, uska grla ili ranjivosti na
grafikonu
Problem artikulacije
Tačka artikulacije / izrezani vrh je bilo koji čvor na grafikonu čije
uklanjanje povećava broj povezanih komponenata
13
Drvo minimalnog raspona je podskup ivica povezanog grafa,
ponderisanih ivica koji povezuje sve temene zajedno, bez ikakvih
ciklusa i sa najmanjom mogućom ukupnom vrednosti ivice
Algoritmi:Kruskal’s, Prims’s-Boruvka’s,
Pretraga u dubinu
15
Pretraga u dubinu (na engleskom Depth-first search - DFS) je
algoritam za pretragu struktura podataka (stabla i grafova). Početak
algoritma je u korenu stabla (kod grafa se neki čvor odredi za koren),
a zatim se pretražuje duž svih grana koliko god je to moguće pre
povratka u koren.
Primer stabla
Formalna definicija
Obilazak započinje iz proizvoljnog zadatog čvora r, korena pretrage u
dubinu. Koren se označava kao posećen. Zatim se bira proizvoljni
neoznačeni čvor r1, susedan sa r, pa se iz čvora r1 rekurzivno startuje
pretraga u dubinu. Iz nekog nivoa rekurzije izlazi se kad se naiđe na
čvor u kome su svi susedi (ako ih ima) već označeni. Ako su u
trenutku završetka pretrage iz r1, svi susedi čvora r označeni, onda se
pretraga za čvor r završava. U protivnom, bira se sledeći proizvoljni
neoznačeni sused r2 čvora r, izvršava se pretraga polazeći od r2, itd.
16
pretraga u dubinu počinje od čvora A, uz pretpostavku da se leve ivice
biraju pre desnih ivica grafa i da pretraga pamti prethodno posećene
čvorove pa ih neće ponavljati. Čvorovi će biti posećeni u sledećem
redosledu: A, B, D, F, E, C, G. Grane kroz koje se prošlo formiraju
Trémaux stablo, strukturu sa važnim primenama u teoriji grafova.
Isto pretraživanje bez pamćenja prethodno posećenih čvorova izgleda
ovako: A, B, D, F, E, A, B, D, F, E, itd. zauvek, zapetljano u A, B, D, F,
E ciklus. Ovakva pretraga nikad neće posetiti čvorove C i G.
Pseudokod algoritma
Ulaz: graf G i njegov čvor v, Izlaz: graf pretrage u dubinu
1 funkcija PretragaUDubinu(G,v):
2 označi v kao posećen
3 for sve grane e u G.obižnjeGrane(v) do
4 if grane e je neposećena then
5 w ← G.obižnjiČvor(v,e)
6 if čvor w je neposećen then
7 označi e kao posećen
8 rekurzivan poziv PretragaUDubinu(G,w)
9 else
10 označi e kao zadnju granu
17
Ne rekurzivna implementacija pretrage u dubinu:
1 funkcija PretragaUDubinu-iterativno(G,v):
2 označi v kao posećen
3 neka S bude stek
4 S.push(v)
5 while S nije prazan
6 t ← S.top
7 if t ono što tražimo:
8 return t
9 for sve grane e u G.obližnjeGrane(t) do
10 if grana e već označena
11 continue sa sledećom granom
12 w ← G.obližnjiČvor(t,e)
13 if čvor w nije otkriven i nije posećen
14 označi e kao ivicu stabla
15 označi w kao otkriven
16 S.push(w)
17 continue at 5
18 else if čvor w is otkriven
19 označi e kao zadnja ivica
20 else
21 // čvor w je posećen
22 označi e kao napred ili kros ivica
23 označi t kao posećen
24 S.pop()
Primene
Neki algoritmi koji koriste pretragu u dubinu kao gradivni element:
18
Pronalaženje povezanih komponenti
Topološko sortiranje
Pronalaženje dve (grane ili čvora) povezane komponente.
Pronalaženje tri (grane ili čvora) povezane komponente.
Pronalaženje mostova grafa
Pronalaženje snažno-povezanih komponenti
Rešavanje zagonetki sa samo jednim rešenjem (npr. lavirint)
Generisanje lavirinata
Komponente povezanosti
19
Graf sa tri povezane komponente.
Relacija ekvivalencije
Alternativni način da se definiše povezana komponenta uključuje klase
ekvivalencije od relacije ekvivalencije koja je definisana na čvorovima grafa. U
neusmerenom grafu, čvor v je dostižan od čvora u ako postoji put od u do v. U
ovoj definiciji, jedan čvor se računa kao put dužine nula, a isti čvor može da se
pojavi više od jednog puta u obilasku. Dostizanje je relacija ekvivalencije, pošto
je:
-Refleksivna: Postoji trivijalni put od dužine nula od bilo kog čvora do samog
sebe.
-Tranzitivna: Ako postoji put od u do v i put od v do w, ova dva puta mogu biti
spojena zajedno tako da formiraju put od u do w.
20
Broj komponenti povezanosti
Broj komponenti povezanosti je važna topološka varijanta grafa. U topološkoj
teoriji grafova, broj komponenti povezanosti može da se interpretira kao nulti
Betijev broj grafa. U algebarskoj teoriji grafova broj komponenti povezanosti je
jednak višestrukosti 0 kao sopstveni vektor od grafa Laplasove matrice. Takođe
je i indeks prvog koeficijenta različitog od nule od hromatskog polinoma grafa.
Broj komponenti povezanosti igraju ključnu ulogu u Tutovoj teoremi
karakterišući grafove koji imaju savršeno poklapanje, i u definiciji težine grafova.
Algoritmi
Jednostavno je da se izračunaju komponente povezanosti grafa u linearnom
vremenu (u pogledu broja čvorova i puteva grafa) korišćenjem bilo pretrage u
širinu ili pretrage u dubinu. U bilo kom slučaju, pretraga koja počinje u nekom
određenom čvoru v pronaći će celokupnu povezanu komponentu koja sadrži v (i
ne više) pre povratka. Da bismo pronašli sve povezane komponente grafa, idemo
petljom kroz čvorove, započinjući novu pretragu u širinu ili dubinu kad god
petlja dostigne čvor koji već nije uključen u prethodno pronađenoj komponenti
povezanosti.
21
Pretraga u širinu
Pretraga u širinu (BFS; Breadth-first search) je algoritam za
pretraživanje ili kretanje kroz stablo ili graf strukturu podataka.
Počinje iz proizvoljnog zadatog čvora r koji se označava kao posećen i
dodaje kao jedini element reda. Potom se ponavljaju sledeći koraci,
dok god red ne postane prazan: čvor sa početka reda se briše i svaki
neposećeni sused ovog čvora se označava kao posećen i dodaje na
kraj reda.
Skica rešenja:
1. Polazni čvor x grafa G.
o Smesti se u red.
o Poseti se.
o Označi se kao posećen.
o Upišu se susedi čvorova x na kraj reda.
2. Poseti se sledeći čvor iz reda, označi kao posećen, njegovi
neposećeni susedi se upišu na kraj reda.
3. Ponavlja se korak 2 dok ima neposećenih čvorova u redu.
4. 1 /* a = матрица суседства, n= број чворова графа G */
5. 2 void BFS (int a[][50], int n )
22
6. 3 {
7. 4 int x; /* чвор графа */
8. 5 int m[50]; /* m је низ означених чворова графа */
9. 6 /* иницијализација низа означених чворова на 0, јер
су на почетку сви непосећени */
10. 7 for (x = 0 ; x < n ;
x++ )
11. 8 m[x] = 0;
12. 9 /* посета графа
почев од првог непосећеног чвора */
13. 10 for (x = 0 ; x <
n ; x++ )
14. 11 if (!m[x] )
15. 12 poseti (x, a,
n, m )
16. 13 }
17. 14 /* s = пролази чвор
претраге по ширини, a = матрица суседства */
18. 15 /* n = број чворова
графа, m = низ посећених чворова */
19. 16
20. 17
21. 18 void poseti(int s, int
a [][50], int n, int m[] )
22. 19 {
23. 20 int i, k; /*
бројачи у циклусу */
24. 21 int v; /* чвор
графа */
25. 22 int red[50]; /*
низ чворова графа поређаних у поретку BFS претраге */
26. 23
/*иницијализација низа m, ред у односу на полазну чвор
претраге s */
27. 24 m[s] = 1;
28. 25 red[0] = s;
29. 26 k = 1;
30. 27 /* обилазак
непосредних суседа чвора s, разлика од DFSа */
23
31. 28 for (i = 0 ; i < k ;
i++ )
32. 29 {
33. 30 s = red[i];
34. 31 for (v = 0 ; v <
n ; v++ )
35. 32 if(!m[v] &&
a[s][v] )
36. 33 {
37. 34 m[v] = 1;
38. 35 red[k++]
= v;
39. 36 }
40. 37 }
41. 38 /*испис -{BFS}-
поретка*/
42. 39 for (i = 0 ; i < k ;
i++ )
43. 40 printf("%d" ,
red[i] );
44. 41 }
Svaka grana pregleda se tačno dva puta, jednom sa svakog kraja.
Prema tome, vremenska složenost je proporcionalna broju grana. S
druge strane, broj rekurzivnih pokretanja algoritma je V, pa se
složenost algoritma može opisati izrazom O(|V|+|E|). Ako je
korišćeno matrično predstavljanje, imamo vremensku složenost od
O(|V|²), a ukoliko je korišćeno ulančano predstavljanje, složenost je
O(|V|+|E|). Ulančano predstavljanje daje bolje vremenske
performanse.
24
Primer pretrage u sirinu (dupli klik za pocetak animacije)
Korišćenje reda
25
BFS algoritam koristi strukturu podataka redosleda da bi pratio koji
čvor treba sledeći da poseti. Po dolasku do novog čvora algoritam ga
dodaje u red da bi ga kasnije posetio. Struktura podataka o redu radi
isto kao i redovi iz stvarnog sveta, kao što je cekanje u redu u
restoranu. Ljudi mogu ili da uđu u red (enqueue) ili da sednu
(dequeue).
Motivacija
Mnogi problemi u teoriji grafova mogu se predstaviti pomoću mreže.
Mreža je forma implicitnog grafa, jer se mogu odrediti susedni čvorovi
na osnovu naše lokacije unutar mreže.
Vrsta problema koja uključuje pronalaženje puta kroz mrežu je
rešavanje lavirinta:
26
Još jedan primer može biti rutiranje kroz prepreke (drveće, reke,
stene itd.) da bi se dobila lokacija:
27
Jednom kada imamo listu / matricu susedstva, možemo pokrenuti bilo
koji specijalizovani algoritam grafikona da bismo rešili naš problem,
kao što su: najkraći put, povezane komponente itd.
Međutim, transformacije između prikaza grafikona obično se mogu
izbeći zbog strukture mreže.
Vektori smera
Zbog strukture mreže, ako smo na crvenoj kugli u sredini, znamo da
se možemo kretati levo, desno, gore i dole da bismo došli do susednih
ćelija:
29
Problem tamnice
Pretpostavimo da ste zarobljeni u 2D tamnici i treba da pronađete
najbrži izlaz! Tamnica je sastavljena od jedinstvenih kockica koje
mogu ili ne moraju biti ispunjene kamenom. Potreban je jedan minut
za pomeranje bilo na sever, jug, istok ili zapad. Ne možete se kretati
dijagonalno, a lavirint je sa svih strana okružen čvrstim kamenjem.
30
Koristili smo red za čuvanje tačaka koje ćemo kasnije posetiti na
grafikonu. I ovde koristimo isto. Počinjemo od ćelije (0,0) i dodajemo
je u naš red. Jednom kada je posetimo, u red dodajemo sve susede
posećene ćelije. Ćelija (0,0) ima dva suseda, (0,1) i (1,0). Red
čekanja postaje veći i veći kako ga posećujemo i dodajemo više
suseda u red, iterativno. Ovaj proces zaustavljamo kada ispunimo
izlazni uslov, tj. posetimo izlaznu ćeliju E (4,3). Tada se mozemo
vratiti istim putem, od izlaza do starta.
31
Literatura
1. https://www.youtube.com/watch?v=09_LlHjoEiY
2. https://towardsdatascience.com
32