Professional Documents
Culture Documents
Implementacija Grafova
Implementacija Grafova
Uvod _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 3
1.0Orijentisan i neorijentisani graf _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4
Terminologija _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_4
2.0 Predstavljanje grafa pomocu racunara _ _ _ _ _ _ _ _ _ _ _ _ _
5
LISTA SUSEDSTVA _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _5
MATRICA INCIDENTNOSTI _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 6-7
MATRICA SUSEDSTVA _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 8-9
2.1 Flojdov algoritam _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _10
2.2 Osnovne operacije nad grafom _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _10
Ostale operacije _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _10
2.3 Implementacija grafova u programskom jeziku C++ _ _ _ 11
Implementacija čvora _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_11
Implementacija grane _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 12
Implementacija grafa_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 13
Dodavanje čvora u graf_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _
14
Dodavanje grane u graf_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
14
Zakljucak _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 15
Uvod
Grafovi se mogu koristiti za rešavanje mnogih praktičnih problema. Takve probleme
rešavamo pomoću računara. Iz tih razloga potrebno je na adekvatan način predstaviti
grafove. Ne postoji neka unverzalna reprezentacija grafova koja bi rešila sve različite
probleme u kojima se oni koriste. Jedan od uobičajenih načina je pomoću listi susedstva,
matrica incidencije i susedstva.
Grag je apstraktni matematicki objekat, a crtez koji se sastoji od tacaka i linija je samo
geometrijska predstava grafa. Medjutim, uobicajno je da se takva slika naziva grafom. Pa
posto je graf sastavljen iz tacaka i linija,koje spajaju po dve tacke, onda je odatle moguce
izvesti i formalnu definiciju grafa .
Graf primenjujemo ne samo u matematici, vec i u informatici,elektrotehnici i tehnici
uopste,a takodje i u hemiji, ekonomiji i u mnogim drugim oblastima.
Teorija grafova je oblast matematike, veoma zastupljena u informatici, cija je oblast
istrazivanje osobina grafova. Neformalno govoreci , grafovi su sastavljeni od tacaka,
odnosno cvorova, i linija medju njima, odnosno grana .
Sastoje se od:
Čvorova (tacaka)
Grane (linije,rub)
Definicija
• Graf (engl. graph) je uređeni par G = (V,E) , gde je V konačan neprazan skup
elemenata koji se nazivajučvorovi ili temena (engl. node), a E konačan skup uređenih
parova čvorova, tj. E ⊆ V ×V. Elementiskupa E nazivaju se grane ili potezi (engl.
edge)grafa.
2
Graf G je par skupova ( V, E), gde je V konacan ne prazan skup, a skup E
predstavlja binarne relacije elemenata skupa V.
Elementi skupa V se nazivaju cvorovi, a elementi skupa E grane.
Broj elemnata skupa V se naziva red grafa.
U realnim problemima cvorovi predstavljaju objekte, a grane odnose izmedju
njih.
Terminologija
• Granu e orijentisanog grafa izvire iz čvora v akose čvor v javlja kao prvi čvor u
uređenom parukoji definiše dati poteg e = (v,u), a ukoliko senalazi kao drugi član
uređenog para e = (u,v), kazese da uvire u dati čvor.
• Izlazni stepen nekog čvora je broj potega kojiizvire iz njega, a ulazni stepen, broj
potega kojiuviru u njega. Stepen čvora je zbir ulaznog i izlaznog stepena.
• Put P u usmerenom grafu G = (V,E) je neprazanniz čvorova P = (v1, v2, ... vk) takvih
da važi:( ∀vi∈V ) ( 1≤ i ≤ k ⇒ (vi, vi+1)∈E ).
• Dužina puta P je k-1, odnosno, broj potega kojetreba preći da bi se iz prvog stiglo u
poslednji čvortog puta.
• Čvor vi+1 naziva se sledbenik čvora vi, a čvor vi-1prethodnik.
• Put jeprost ako i samo ako važi:( ∀(vi,vj)∈V ) ( 1 ≤ i < j ≤ k ⇒ vi ≠ vj )
• Ciklus je put kod koga se poklapaju prvi iposlednji čvor, tj. važi: v1 = vk.
• Ciklus je prost ako zadovoljava uslovjednostavnog puta.
• Ciklus dužine 1 naziva se petlja.
• Usmereni graf koji ne sadrži cikluse naziva seusmereni aciklični graf. (Primer takvog
grafa jestablo)
• Težinski grafovi - grafovi kod kojih su dodeljeni
težinski koeficijenati granama
3
2.0 Predstavljanje grafa pomocu racunara
Predstavljanje grafova
Postoje dva standardna nacina za predstavljanje grafa G =( V, E ):
Kolekcija lista povezanosti
Matrica povezanosti
i jedan i drugi nacin su primenjivi i na usmerene i na neusmerene grafove . Predstavljanje
grafa pomocu lista povezanosti omogucava kompaktno cuvanje retkih (razudjenih)
grafova, kod kojih je broj veza | E | mnogo manji od kvadrata broja cvorova | V |.
Koriscenje matrice povezanosti se sa druge strane koristi u slucaju gustih grafova, gde je
broj veza | E | priblizan broja cvorova | V | ili kada je potrebno brzo doci do informacije
da li izmedju neka dva cvora postoji veza.
Predstavljanje grafa G = ( V, E ) pomocu lista povezanosti sastoji se od niza Adj, koji
sadrzi | V | lista, po jednu za svaki cvor iz skupa V . Za svaki cvor u V, lista povezanosti
Adj [u] sadrzi sve cvorove v takve da postoji veza ( u, v ) ∈ E. To Zapravo znaci da lista
Adj [ u ] sadrzi sve cvorove grafa G koji su povezani sa cvorom u . Cvorovi u listi
povezanosti su obicno poredjani projzvoljnim redosledom.
LISTA SUSEDSTVA
Za svaki čvor grafa G=(V,E) lista susedstva sadrži sve čvorove koji su susedni sa nim u
G,
l v V u, v E
Primer:
Grafu sa slike odgovara sledeća lista susedstva
b u l
a b, c, d
d
a b a
c a, d
d a, c
c 4
Lista susedstva je sa memorijskih resursa najekonomičnija reprezentacija grafova.
Svaka grana grafa ili digrafa predstavlja se sa 2 memorijske jedinice, jedna za početni
čvor, a druga za krajnji čvor grane. Dakle graf je reprezentovan sa 2m lokacija ( m je
broj grana) Međutim ova reprezentacija nije uvek pogodna, pogotovo kod grafova
kod kojih je potrebno utvrđivati susednost čvorova.
MATRICA INCIDENTNOSTI
Ako (a,b) predstavlja granu, a čvorovi a i b su krajnje tačke grane, za granu (a,b) se kaže
da je incidentna čvorovima a i b.
Neka je G=(V,E) graf. Matrica B čije su vrste obeležene čvorovima grafa a kolone
granama grafa naziva se matrica incidencije. Element bij , jednak je 1 ako je i-ti čvor
incidentan j-toj grani , a jednak nuli u protivnom.
Primer:
Grafu sa slike odgovara sledeća matrica incidencije
b
e1 e 2 e3 e4
e1 a 1 1 1 0
d
b 1 0
e2
a 0 0
e3 e4 c 0 0 1 1
c d 0 1 0 1
Matrice incidencije mogu da se koristite i kod grafova sa petljama
Primer:
Grafu sa petljama sa slike odgovara sledeća matrica incidencije
b
e2 e1 e5 e1 e2 e3 e4 e5
a 1 1 1 0 0
a d b 1 0 0 0 0
e3 e4 c 0 0 1 1 0
5
c d 0 0 0 1 0
Matrica incidencije za neorijentisane grafove se definiše tako što ako je i-ti čvor susedan
ili incidentan sa j-tom granom pišemo 1, inače je 0. Kod digrafova na preseku i-te vrste i
j-te kolone stoji -1 ili 1 ako u i-ti čvor ulazi, odnosno izlazi j-ta grana, inače je 0. Ova
reprezentacija je veoma neekonomična ( u svakoj koloni bez obzira na graf nalaze se
samo dva ne nulta elementa ) i ređe se koristi.
Teorema:
Ako je A matrica grafa G, k N 0 , gde su u, v , čvorovi, onda element Au ,v jednak
k
Primer:
1 0 0 1 1 0 0 1
1 0 1 0 1 0 1 0
Uočimo matricu A
2
.
0 0 0 1 0 0 0 1
1 1 1 0 1 1 1 0
Uočimo na primer da je
a12 2 a11 a21 a12 a22 a13 a32 a14 a42
1 0 0 0 0 0 1 1 0 0 0 1 1
Kako je a12 1 i pošto su a14 1, a42 1 , postoji grana od čvora 1 do čvora 4 i na isti
2
način od čvora 4 do čvora 2. Na osnovu toga postoji put dužine 2 od čvora 1 do čvora 2.
Tada možemo zaključiti da ja Aij 1 ako postoji pu dužine 2 od čvora i do čvora j.
2
Ali za
6
a34 2 a31 a14 a32 a24 a33 a34 a34 a44
0 1 0 0 0 1 1 0 0 0 0 0 0
I zaključujemo da ne postoji put dužine 2 od čvora 3 do čvora 4.
MATRICA SUSEDSTVA
Neka je G=(V,E) graf . Matrica A čije su vrste obeležene čvorovima grafa, a kolone
istim tim čvorovima u istom poretku, se zove matrica susedstva. Element Adj ,
jednak je 1 ako postoji grana od i-tog čvora do j-tog čvora , a jednak nuli u protivnom.
Primer:
Grafu sa slike odgovara sledeća matrica susedstva
b
a b c d
e1 a 0 1 1 1
e2b 1d 0 0 0
a
e3 c 1 0 0 1
e4
d 1 0 1 0
c
Kako oznake čvorova u većini slučajeva nisu važne, matrica se piše bez oznaka
0 1 1 1
1 0 0 0
1 0 0 1
1 0 1 0 7
Primer:
Usmerenom grafu sa slike odgovara matrica susedstva
a b c
a 0 1 1
a b b 1 1 1
c 0 0 0
c
Matrica susedstva je najčešća matrična interpretacija grafova. Ova reprezentacija
zahteva ( n je broj čvorova ) memoriskih jedinica u računaru i veoma je nepraktična
za grafove sa malim brojem grana što je u praksi čest slučaj. Sa druge strane ona
može da se koristi i za grafove, i multigrafove ( digfraove ). Tada , na poziciju
preseka i-te vrste i j-te kolone treba staviti broj grana koje spajaju i-ti čvor sa j-tim
čvorom. U slučaju da je graf neorijentisan skoro 50% memoriskih jedinica možemo
uštedeti ako se pamte samo elementi ispod ili iznad glavne dijagonale, zato što je
matrica simetrična. Ali tada se usporava brizna rada jer je potrebno izvršiti testiranja
koja se nameću.
Težinska matrica je matrica kod koje na poziciju preseka i-te vrste i j-te kolone treba
staviti težinu wij grane koje spajaja i-ti čvor sa j-tim čvorom. Ako neka grana ne
postoji, tada se na pomenutu poziciju stavlja neki poseban simbol . U slučaju
bestežinskih grafova, za postojeće grane se podrazumeva težina 1, dok za nepostojeće
grane koristi se 0. Težinska matrica je neka vrsta generalizacije matrice susedstva.
8
2.1 Flojdov algoritam
Flojdov algoritam zatim računa matrice D1, D2, ... DV, korišćenjem sledeće
formule:
Ostale operacije
• obilazak grafa (po širini - breadthTrav idubini - depthTrav),
• topološko uređenje(topologicalOrderTraversal),
• provera postojanja ciklusa (isCyclic),
• povezanost grafa (connectionLevel) i
• nalaženje najkraćeg puta (findShortestPath)
9
2.2 Implementacija grafova u programskom jeziku C++:
Navedeni kod je rađen preko templejtskih klasa da bi lako mogli da menjamo tip podatka
čvora (int ,double...).
Implementacija čvora:
10
Implementacija grane:
};
11
Implementacija grafa
template <class T, class W>
class GraphAsList
protected:
LinkedNode<T,W>* start; // Pokazivac koji ukazuje na startni element grafa
// npr kad vrsimo obilazak grafa
long nodeNum; //broj čvorova u grafu
public:
//Konstuktor kojim inicijalizujemo promenljive
inline GraphAsLists() {start ==NULL; nodeNum=0; }
~GraphAsLists(); // Destruktor
LinkedNode<T,W>* findNode(T pod); // Funkcija za trazenje čvora
Edge<T,W>* findEdge(T a, T b); // Funkcija za traženje grane
bool insertNode(T pod); // Funkcija za dodavanje čvora
bool deleteNode(T pod); // Funkcija za brisanje čvora
bool insertEdge(T a, T b); Funkcija za dodavanje grane
bool deleteEdge(T a, T b); // Funkcija za brisanje grane
long breadthTrav(T a); // Obilazak po širini
long depthTrav(T a); // Obilazak po dubini
long topologicalOrderTrav(); // Topološki obilazak
void print(); // Štampanje svih elemenata grafa
protected:
void deleteEdgeToNode(LinkedNode<T,W>* ptr); // Brisanje grane ka zadatom
// čvoru
}
12
//Dodavanje čvora u graf
template <class T, class W>
bool GraphAsLists<T,W>::insertNode(T pod)
{
LinkedNode<T,W>* newNode= new LinkedNode<T,W>(pod, NULL,
start, 0); //Pravimo novi čvor pozivanjem konstruktora klase LinkedNode i saljemo //
//parametre (postavljamo vrednost čvora na „pod” , granu na NULL, postavljamo čvor
//startni i status na 0(neobradjen)
if(newNode == NULL) return false; //ukoliko se ne kreira čvor vraćamo false
start=newNode; //kazemo da je novi čvor startni
nodeNum++; // uvećavamo ukupan broj čvorova
return true; //uspesno dodavanje, vraćamo true
}
13
Literatura
14