19
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 Implementaci ja čvora _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _11 Implementacija grane _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 12

implementacija grafova

Embed Size (px)

Citation preview

Page 1: implementacija grafova

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

Implementaci ja čvora _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

_ _ _11

Implementacija grane _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

_ _ 12

Implementacija grafa _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

_ _ 13

Dodavanje čvora u graf_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __

_ _ 14

Page 2: implementacija grafova

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)

2

Page 3: implementacija grafova

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.

Graf G je par skupova ( V, E), gde je V konacan ne prazan skup, a skup Epredstavlja 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 grafPrethodna 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 ).

3

Page 4: implementacija grafova

• 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 dodeljenitežinski koeficijenati granama

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

4

Page 5: implementacija grafova

Za svaki čvor grafa G=(V,E) lista susedstva sadrži sve čvorove koji su susedni sa nim u G,

Primer:Grafu sa slike odgovara sledeća lista susedstva

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 , 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

5

b

a

c

d

, ,

,

,

lu

b c da

ab

a dc

a cd

b

a

c

d2e

1e

3e4e

1 2 3 4

1 1 1 0

1 0 0 0

0 0 1 1

0 1 0 1

e e e e

a

b

c

d

,l v V u v E

Page 6: implementacija grafova

Matrice incidencije mogu da se koristite i kod grafova sa petljama

Primer:Grafu sa petljama sa slike odgovara sledeća matrica incidencije

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, , gde su , čvorovi, onda element jednak

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

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

.

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

Primer:

6

b

a

c

d2e 1e

3e4e

5e 1 2 3 4 5

1 1 1 0 0

1 0 0 0 0

0 0 1 1 0

0 0 0 1 0

e e e e e

a

b

c

d

Page 7: implementacija grafova

Uočimo matricu .

Uočimo na primer da je

Kako je i pošto su , postoji grana od čvora 1 do čvora 4 i na isti 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 ako postoji pu dužine 2 od čvora i do čvora j.

Ali za

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 je kvadratna matrica , za koju važi

Matrica susedstva je kvadratna matrica simetrična u odnosu na glavnu dijagonalu.

Primer:Grafu sa slike odgovara sledeća matrica susedstva

7

b

a

c

d2e

1e

3e4e

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

a b c d

a

b

c

d

Page 8: implementacija grafova

Kako oznake čvorova u većini slučajeva nisu važne, matrica se piše bez oznaka

Primer:Usmerenom grafu sa slike odgovara matrica susedstva

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

8

0 1 1 1

1 0 0 0

1 0 0 1

1 0 1 0

ba

c

0 1 1

1 1 1

0 0 0

a b c

a

b

c

Page 9: implementacija grafova

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.

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ćeformule:

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 odzbira najkraćih rastojanja od v do vi+1 i od vi+1 do w. Ako jeste, novo

9

Page 10: implementacija grafova

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)

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

Implementaci ja čvora:

template <class T, class W>

10

Page 11: implementacija grafova

class LinkedNode {public:

T node; // Kreiramo čvor tipa TEdge<T,W>* adj; // Kreiramo granu LinkedNode<T,W>* next; // Pokazivac na susedni čvorint 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}

};

Implementacija grane:

template <class T, class W>

11

Page 12: implementacija grafova

class Edge{public:

LinkedNode<T,W>* dest; //pokazivač na odredišni čvorEdge<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 granuinline Edge(LinkedNode<T,W>* destN,Edge<T,W>* linkN) {

dest=destN; link=linkN; }

};

Implementacija grafa

12

Page 13: implementacija grafova

template <class T, class W>class GraphAsList protected:

LinkedNode<T,W>* start; // Pokazivac koji ukazuje na startni element grafa

// npr kad vrsimo obilazak grafalong nodeNum; //broj čvorova u grafu

public://Konstuktor kojim inicijalizujemo promenljiveinline GraphAsLists() {start ==NULL; nodeNum=0; } ~GraphAsLists(); // DestruktorLinkedNode<T,W>* findNode(T pod); // Funkcija za trazenje

čvoraEdge<T,W>* findEdge(T a, T b); // Funkcija za traženje granebool insertNode(T pod); // Funkcija za dodavanje čvorabool deleteNode(T pod); // Funkcija za brisanje čvorabool insertEdge(T a, T b); Funkcija za dodavanje granebool deleteEdge(T a, T b); // Funkcija za brisanje granelong breadthTrav(T a); // Obilazak po širinilong depthTrav(T a); // Obilazak po dubinilong topologicalOrderTrav(); // Topološki obilazakvoid print(); // Štampanje svih elemenata grafa

protected:void deleteEdgeToNode(LinkedNode<T,W>* ptr); // Brisanje

grane ka zadatom // čvoru}

13

Page 14: implementacija grafova

//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 startninodeNum++; // uvećavamo ukupan broj čvorovareturn 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 falseEdge<T,W>* ptr = new Edge<T,W>(pb,pa->adj); //Ukoloko postoje dodajemo //granu između ta dva čvoraif(ptr == NULL) return false; //Ukoliko nije uspelo dodavanje

grane vraćamo // falsepa->adj = ptr; //Postavljamo ovu novu granu kao prvu granu

čvora areturn true; // Sve je prošlo bez greške, vraćamo true

}

14

Page 15: implementacija grafova

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/Граф_(структура_података)

15