8 Grafovi Teorija grafova posebna matematika disciplina Grafoidne
8. Grafovi Teorija grafova – posebna matematička disciplina Grafoidne (grafovske) strukture podataka – strukture podataka predstavljene preko grafova. Def 1. Neka je C neprazan skup i R skup parova (a, b), tako da a C i b C. Uređen para (C, R) naziva se graf. Elementi skupa C nazivaju se čvorovi grafa, a elementi skupa R grane (potezi) grafa. Čvorovi grafa se u ravni predstavljaju kružićima (ili tačkama), a grane linijama koje spajaju čvorove. Primer 1: Graf zadat na sledeći način: C={1, 2, 3, 4, 5} R={(1, 2), (1, 4), (2, 3), (2, 5), (3, 5), (4, 5) } može se predstaviti sledećom slikom. 4 1 3 5 2
Def 2. Graf G= (C, R) je orijentisan (ili usmeren) ukoliko R predstavlja skup uređenih parova. (Ukoliko je R skup neuređenih parova iz C, graf G je neorijentisan. ) Primer 2: Neka je: C={1, 2, 3, 4, 5} R={(1, 2), (1, 4), (2, 3), (2, 5), (3, 5), (4, 5) } Ako su u R uređenji parovi, dobijamo orijentisani graf ako na sledećoj slici: 4 1 3 5 4 2 1 Ako su u R neuređeni parovi (tj. Grane sudvostruko orijentisane ili neorijentisane), dobija se graf kao na sledećoj slici. 3 5 2
Ako je grana grafa zadata uređenim parom (x, y), onda kažemo da ona polazi iz čvora x, a završava se u čvoru y. Zadatak 1. Odrediti C i R, kao i vrstu grafa, za grafove zadate sledećim slikama: 2 4 a d 1 3 6 5 7 b c
Def 3. Put dužine n od čvora x do čvora y u grafu G je niz grana r 1, . . . rn sa sledećom osobinom: grana r 1 polazi iz čvora x, grana ri (i=2, . . . , n) počinje u onom čvoru u kojem se završava grana ri-1, grana rn se završava u čvoru y. Put može više puta da prolazi istom granom ili kroz isti čvor. Ukoliko put kroz svaki čvor grafa prolazi najviše jedanput, naziva se elemenatrni. Put je kružni (zatvoren) ako se završava u istom čvoru u kojem je i započeo.
Def 4. Neorijentisani graf je povezan ako se bilo koja dva njegova čvora mogu povezati putem. Ako postoje čvorovi koji se ne mogu povezati putem, graf je nepovezan. Def 5. Za teme x kažemo da je dostupno iz temena y ako postoji put od temena y do temena x. Teme x je neposredno dostupno iz temena y, a ko postoj grana iz temena y do temena x. U vezi sa grafovima postoji veliki broj zadataka. Osnovno je pitanje kao predstavit graf.
8. 1. Drveta (stabla) Drvo je specijalna vrsta grafa koja se najviše koristi u praksi. Sve što je rečeno o grafovima važi i za drveta, ali drveta imaju i niz dodatnih osobina. Def 6: Drvo (stablo) je povezan graf sa n čvorova i n-1 grana. Def 6’ (akternativna). Drvo (stablo) je konačan skup elemanata koji može biti prazan ili se sastojati iz jednog elementa nazvanog koren i nekoliko podskupova disjunktnih elemenata od kojih je svaki drvo za sebe.
Def 7. Čvor drveta iz kojeg ne polazi ni jedno neprazno poddrvo naziva se list drveta. Koren drveta Listovi drveta Strukture podataka predstavljene drvetima nazivaju se drvoidne (stabloidne) strukture podataka. Zbog rekurzivne prirode (definicije) drveta, pogodno je primenjivati rekurziju pri radu sa drvetima.
8. 1. 2. Binarna drveta Def 7. Drvo čiji svaki čvor ima najviše dva poddrveta naziva se binarno drvo. Ako su oba poddrveta (koja polaze iz jednog čvora) prisutna, onda se jedno naziva levo, adrugo desno podrvo. Struktura za implementaciju binarnog drveta je slična strukturi za implementaciju dvostruko povezane liste. I ona će sadržati dva pokazivača, koje sada možemo nazavati levi i desni.
Dakle, koristeći dinamičke strukture u Cu, binarno drvo možemo opisati ovako: typedef struct cvor{ ti. Sadrzaja sadrzaj; struct cvor *levi; struct cvor *desni; }Drvo; Konkretno: typedef struct cvor{ int broj; struct cvor *levi; struct cvor *desni; }bin. Drvo; Zadatak 1. Napisati program za: (a) formiranje binarsnog drveta čiji čvorovi sadrže celobrojne vrednosti; (b) prebrojavanje njegovih čvorova; (c) računanje sume u čvorovima; (d) računanje srednje vrednosti svih sadržaja čvorova drveta. Drvo 1. cpp
Zadatak 2. Napisati program za kreiranje binarnog drveta koje se sastoji iz niza celih, različitih brojeva. Ispitati da li se zadati broj nalazi u formiranom drvetu. Ako želimo završiti unos podataka u drvoidnu strukturu, unećemo broj -9999 koji se ne upisuje u drvo. Drvotrazi. cpp Zadatak 3. Napisati program za kreiranje binarnog drveta na isti način kao u zadatku 2, a zatim izvršiti sortiranje unetih podataka. Drvosort. cpp
8. 2. Predstavljanje grafova Nameće se ideja da se čvor predstavi sadžajem dinamičke promenljive, a grane odgovarajućim pokazivačima. Međutim, ovde bi bilo dosta NULL-pokazivača i nastaju problemi prilikom obrade. Ovde bi struktura trebalo nekako ovako da izgleda: 4 typedef struct cvor{ int sadrzaj; 1 struct cvor *levi; 3 struct cvor *srednji; struct cvor *desni; 5 2 }Graf; U ovom slučaju, čvor 5 bi imao 3 NULL-grane, čvor 4 dve itd.
Jedan od načina za predstavljanje grafova je da se koriste dve vrste povezanih listi. Elementi jedne liste su dinamičke promenljive sa dva pokazivača i sadržajem. Jedan pokazivač ukazuje na drugu vrstu povezane liste pomoću koje se predstavljaju grane koje polaze iz tog čvora. Drugi pokazivač pokazuje na sledeći čvor grafa. Sadržaj dinamičke promenljive određuje neku karakteristiku čvora, npr. redni broj, ime, . . 1 2 3 1 1. 2 2 2. 3 3. 1 3 1. 3 3. 2
- Slides: 12