Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 14

SADRZAJ

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.

1.0 Orijentisan i neorijentisani graf


Prethodna definicija odnosi se na takozvani orijentisani graf(digraf)Ukoliko se skup grana
E definiše kao skup parova čvorova,E = { {u,v}| u,v ∈V ∧ u ≠ v }, graf je neorijentisan.

 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.

Matrice susedstva i incidencije imaju osobinu da njihovi stepeni daju informaciju o


susedstvu čvorova i šetnjama proizvoljnih dužina.

Teorema:
Ako je A matrica grafa G, k  N  0 , gde su u, v , čvorovi, onda element Au ,v jednak
k

broju šetnji dužine k od u do v.

Put dužine 0 sastoji se samo od jednog čvora.


1, u  v
w0  u, v    , A0  I  w0  u , v  .
 0, u  v

Ovo je jedan od načina da se odredi rastojanje između čvorova.

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.

Matrica susedstva grafa G   V , E  je kvadratna matrica V  V , za koju važi


1,  u , v  E
A
0,  u , v  E
Matrica susedstva je kvadratna matrica simetrična u odnosu na glavnu dijagonalu.

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

Inicijalno, matrica najkraćih puteva postavlja se na vrednosti težina grana.

Flojdov algoritam zatim računa matrice D1, D2, ... DV, korišćenjem sledeće
formule:

kojom se za svaki par čvorova (v,w) proverava da li je rastojanje D(v,w),


koje predstavlja najkraći put od v do w koji ne prolazi kroz vi+1 duže od
zbira najkraćih rastojanja od v do vi+1 i od vi+1 do w. Ako jeste, novo
najkraće rastojanje predstavlja sumu najkraćih puteva preko čvora vi+1.

2.2 Osnovne operacije nad grafom


• findNode - pronalazi zadati čvor u grafu, ukolikopostoji,
• insertNode - dodaje novi čvor,
• deleteNode - briše zadati čvor, ukoliko postoji,
• findEdge - pronalazi zadati poteg u grafu, ukolikopostoji,
• insertEdge - dodaje poteg između dva zadatačvora i
• deleteEdge - briše poteg između dva zadata čvora,ukoliko postoji

 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:

template <class T, class W>


class LinkedNode
{
public:
T node; // Kreiramo čvor tipa T
Edge<T,W>* adj; // Kreiramo granu
LinkedNode<T,W>* next; // Pokazivac na susedni čvor
int status; // Status ( moze biti 0 – smešten, 1 – obrađuje se, 2 – obrađen)
inline LinkedNode() // Konstruktor klase LinkedNode
{
adj=NULL; next=NULL; status=0; //vrsimo inicijalizaciju promenljivih
}
inline LinkedNode(T nodeN) // Konstruktor s prosleđenim parametrom kojim
// postavljamo vrednost čvora
{
node=nodeN; adj=NULL; next=NULL; status=0;
}

inline void Visit()


{
cout << node << endl; // ovom funkcijom štampamo vrednost čvora
}
};

10
 Implementacija grane:

template <class T, class W>


class Edge
{
public:
LinkedNode<T,W>* dest; //pokazivač na odredišni čvor
Edge<T,W>* link; // pokazivač na sledeću granu (kod lančane
// reprezentacije za prelazak na sledeću granu)
W weight; // tezina grane (kod tezinskih grafova)
inline Edge() //Konstruktor klase Edge
{
dest=NULL; link=NULL; //inicijalizujemo promenljive
}
//Konstruktor sa prosleđenim parametrima kojima postavljamo
pokazivač //na čvor i narednu granu
inline Edge(LinkedNode<T,W>* destN,Edge<T,W>* linkN)
{
dest=destN; link=linkN;
}

};

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
}

 //Dodavanje grane u graf

template <class T, class W>


bool GraphAsLists<T,W>::insertEdge(T a, T b)
{
LinkedNode<T,W>* pa = findNode(a); //Trazimo čvor „a”
LinkedNode<T,W>* pb = findNode(b); //Trazimo čvor „b”
if(pa == NULL || pb == NULL)
return false; //Ukoliko ne postoje vraćamo false
Edge<T,W>* ptr = new Edge<T,W>(pb,pa->adj); //Ukoloko postoje dodajemo
//granu između ta dva
čvora
if(ptr == NULL) return false; //Ukoliko nije uspelo dodavanje grane vraćamo
// false
pa->adj = ptr; //Postavljamo ovu novu granu kao prvu granu čvora a
return true; // Sve je prošlo bez greške, vraćamo true
}

13
Literatura

1. Vojislav Petrović "Teorija grafova"Univerzitet u Novom Sadu,PMF


1998
2. . Igor Dolinka, Kratak uvod u analizu algoritama, Univerzitet u
Novom Sadu, Novi Sad, 2008
3. A. Bondy, U.R.S. Murty, Graph Theory, Graduate Texts in
Mathematics, Springer, 2007
4. Douglas B. West, Introduction to Graph Theory, 2nd Ed, Prentice
Hall, 2001.
5. http://www.is.pmf.uns.ac.rs/skrbics/download/PetnicaGrafoviIMatrice.pdf
6. http://elib.mi.sanu.ac.rs/files/journals/nm/208/nm413407.pdf
7. http://sr.wikipedia.org/sr-el/Граф_(структура_података)

14

You might also like