Download as pdf or txt
Download as pdf or txt
You are on page 1of 50

Dr.

eljko Juri : Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehni kom fakultetu u Sarajevu

Predavanje 9. (akademska godina 2011/12)

Na kraju treba napomenuti jo jedan sitan detalj. injenicu da vjerovatno a nekog doga aja tei jedinici kad n tei u beskona nost, ne treba shvatiti kao tvrdnju da taj doga aj postaje siguran kad n tei u beskona nost. ak ni injenica da neki doga aj ima vjerovatno u 1 ne zna i da je taj doga aj siguran! Drugim rije ina, mada za sigurne doga aje vrijedi p(I) = 1, iz injenice da je p(A) = 1 ne slijedi da je doga aj A siguran. Tako er, iako za nemogu e doga aje vrijedi p(O) = 0, iz injenice da je p(A) = 0 ne slijedi da je doga aj nemogu . Mada ovo izgleda paradoksalno, stvari postaju jasnije ako uvidimo da postoje situacije u kojima je broj mogu ih doga aja beskona an. Neka, na primjer, treba potpuno nasumi no izabrati neki prirodan broj. Vjerovatno a da je izabrani broj jednak 137 jednaka je nuli (s obzirom da imamo samo jedan povoljan doga aj nasuprot beskona no mnogo mogu ih), mada doga aj nije nemogu (mogli smo izabrati upravo taj broj). Tako er, vjerovatno a da izabrani broj nije jednak 137 jednaka je jedinici (s obzirom da se radi o suprotnom doga aju prethodnog doga aja), mada doga aj nije siguran (moglo se desiti da se, iz itavog skupa , izabere ba taj broj).

Elementi teorije grafova


Osnovni pojmovi i oznake
Teorija grafova predstavlja vjerovatno najiru oblast diskretne matematike. Zapravo, gotovo da nema problema kojim se bavi diskretna matematika, a koji se ne bi mogao, nakon adekvatnog kodiranja, predstaviti kao problem teorije grafova. Stoga je teorija grafova nala veliku primjenu u ra unarskim naukama, na primjer za predstavljanje struktura podataka, opisivanje relacionih baza podataka, opisivanje sintakse i gramatike programskih jezika, itd. Dalje, grafovi se intenzivno koriste za opisivanje raznih komunikacionih mrea (recimo telefonskih mrea, mrea ra unara, mrea puteva u saobra aju, itd.). Pored toga, teorija grafova primjenjuje se u teoriji automata, elektrotehnici (npr. eme elektri nih mrea su u sutini grafovi), organizacionim naukama, automatici, fizici, hemiji (strukturne formule hemijskih jedinjenja su u osnovi grafovi), biologiji, ekonomiji, pa ak i u nekim naukama koje se obi no smataju potpuno nevezanim sa matematikom, kao to su npr. psihologija, sociologija, itd. U svom najop enitijem obliku, teorija grafova se moe posmatrati kao dio kombinatorike, preciznije kao dio teorije kombinatorinih struktura, iji je cilj, za razliku od enumerativne kombinatorike, ne samo da prebroji koliko postoji objekata koji rezultiraju iz neke kombinatorne strukture, nego da prou i i samu prirodu razmatrane kombinatorne strukture. Stoga se teorija grafova intenzivno primjenjuje u operacionim istraivanjima za rjeavanje raznih problema kombinatorne optimizacije i za potrebe mrenog planiranja. S obzirom da se moe re i da teorija grafova pokriva onoliko razli itih tema koliko sve druge oblasti diskretne matematike zajedno, jasno je da se u okviru ovog udbenika moemo ograni iti samo na najosnovnije pojmove i algoritme teorije grafova. Neformalno, pod grafom smatramo geometrijsku strukturu koja se sastoji od skupine objekata koji se nazivaju vorovi grafa i koji su me usobno povezani vezama koje se nazivaju grane grafa. to se ti e formalne definicije grafa, postoji vie razli itih definicija, koje se razlikuju kako po sloenosti, tako i po op enitosti (u smislu da prostije definicije ne dozvoljavaju formalan opis nekih struktura koje intuitivno tako er doivljavamo kao grafove). Jedna od naj e e koritenih definicija, koja predstavlja dobar kompromis izme u sloenosti i op enitosti, je definicija koja slijedi iz sljede eg razmatranja. vorove grafa formalno moemo predstaviti elementima nekog skupa X, dok grane grafa moemo predstaviti formalno elementima neke binarne relacije X2 u skupu X, pri emu vrijedi (xi, xj) ako i samo ako su, intuitivno posmatrano, elementi xi i xj povezani granom. Stoga graf moemo formalno definirati kao ure en par = (X, ) pri emu se elementi skupa X nazivaju vorovi grafa, dok se elementi relacije nazivaju grane grafa. Pri tome je bitno naglasiti da sama relacija nije dovoljna za potpunu specifikaciju grafa. Naime, graf moe imati izolirane vorove koji nisu spojeni niti sa jednim drugim vorom, tako da se takvi vorovi uop e ne pojavljuju u opisu relacije . Stoga, o postojanju takvih vorova ne moemo saznati nita iz poznavanja samo relacije . U zavisnosti od toga da li je skup X kona an ili beskona an, grafove moemo podijeliti na kona ne i beskona ne. U nastavku emo razmatrati samo kona ne grafove. Graf se naziva neusmjeren (neorjentiran) ukoliko je simetri na relacija, odnosno ukoliko iz injenice da postoji veza izme u vorova xi i xj (tj. ukoliko su oni spojeni granom) slijedi da postoji

Dr. eljko Juri : Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehni kom fakultetu u Sarajevu

Predavanje 9. (akademska godina 2011/12)

veza i izme u vorova xj i xi. Kod neusmjerenih grafova, grane se obi no crtaju kao linije bez strelica koje spajaju dva vora, pri emu se podrazumijeva da veza postoji u oba smjera. Graf se naziva usmjeren (orjentiran) ukoliko je antisimetri na relacija, odnosno ukoliko iz injenice da postoji veza izme u vorova xi i xj slijedi da veza izme u vorova xj i xi ne postoji, osim eventualno ukoliko su xi i xj isti vor. Ina e, grana koja povezuje vor sa samim sobom naziva se petlja. Kod usmjerenih grafova, grane se obi no crtaju kao linije sa strelicom koje su usmjerene u smjeru u kojem je uspostavljena veza izme u dva vora. Grane usmjerenih grafova obi no zovemo usmjerene (orjentirane) grane ili lkovi. Za grafove koji nisu ni usmjereni ni neusmjereni kaemo da su mjeoviti. Kod mjeovitih grafova izme u dva vora mogu postojati kako usmjerene (jednosmjerne), tako i neusmjerene (dvosmjerne) veze (odnosno grane). Jednosmjerne veze se uvijek crtaju kao linije sa strelicom, dok se dvosmjerne veze kod mjeovitih grafova mogu crtati na razli ite na ine. Nekad se crta samo linija bez strelica (tada se podrazumijeva da je veza dvosmjerna), nekad se crta linija sa strelicama na objema stranama, dok se nekad crtaju dvije linije izme u vorova gdje postoji dvosmjerna veza, sa suprotno orjentiranim strelicama. Ukoliko se koristi takva konvencija crtanja, obi no govorimo o digrafu. Kod neusmjerenih grafova grane se obi no ne broje dvostruko, odnosno smatra se da je grana koja povezuje neka dva vora xi i xj ista grana koja povezuje i vorove xj i xi. Stoga se neusmjereni graf esto ne posmatra kao ure eni par (X, ) gdje grane iz predstavljaju ure ene parove, ve kao ure eni par (X, U) gdje je U skup grana iji su elementi obi ni dvo lani skupovi oblika {xi, xj}, tako da je poredak vorova koji ine granu nebitan. Tako er, kod mjeovitih grafova, moemo smatrati da skup grana U moe sadravati kako ure ene parove oblika (xi, xj), koji odgovaraju usmjerenim granama, tako i neure ene parove oblika {xi, xj} koji odgovaraju neusmjerenim granama. Ova konvencija, izme u ostalog, omogu ava i da se napravi formalna razlika izme u digrafa i obi nog mjeovitog grafa, odnosno da se razlika ne svede samo na druga ije crtanje. Naime, dok skup grana obi nog mjeovitog grafa moe sadravati neure ene parove oblika {xi, xj}, dotle skup grana digrafa sadri isklju ivo ure ene parove, pri emu se umjesto neure enog para oblika {xi, xj} u skupu grana nalaze dva ure ena para (xi, xj) i (xj, xi). Kao rezime, po ovakvoj konvenciji, kod neusmjerenih grafova skup grana sadri isklju ivo neure ene parove, kod usmjerenih grafova skup grana sadri isklju ivo ure ene parove, pri emu ako par (xi, xj) pripada skupu grana, tada par (xj, xi) ne pripada skupu grana, osim eventualno ako je xi = xj, kod digrafova skup grana tako er sadri isklju ivo ure ene parove, ali bez prethodnog ograni enja, dok kod mjeovitih grafova skup grana moe sadravati kako ure ene, tako i neure ene parove. Bez obzira na izvjesne prednosti prethodne proirene definicije, definicija prema kojoj je skup grana relacija nad skupom vorova je znatno jednostavnija za rad. Stoga emo u nastavku, zavisno od potrebe, koristiti nekad jednu a nekad drugu konvenciju, ali u svakom slu aju, grane kod neusmjerenih grafova ne emo brojati dvostruko. Treba jo naglasiti da se u brojnoj literaturi o teoriji grafova susre u ne samo razli ite formalne definicije grafova, ve se esto susre u i izvjesne (obi no ne prevelike) razlike u definiciji mnogih drugih pojmova iz teorije grafova. Stoga je, prilikom koritenja literature iz teorije grafova, uvijek uputno provjeriti kakve se ta no definicije koriste u razmatranoj literaturi, da bi se izbjegli eventualni nesporazumi uzrokovani injenicom da je neki pojam u jednom literarnom izvoru definiran na jedan na in, a u nekom drugom literarnom izvoru na drugi na in. Mada razlike obi no nisu velike, njihovo neuvaavanje moe dovesti do problema. Bitno je napomenuti da u teoriji grafova prikaz grafa crteom predstavlja samo sredstvo da se lake uo i kako pristupiti rjeavanju nekog problema, dok se sam graf isklju ivo posmatra formalno kao par = (X, ) ili na neki drugi formalni ali ekvivalentni na in, o emu emo govoriti kasnije (sli na stvar vrijedi u teoriji skupova, gdje su Vennovi dijagrami obi no samo pomo no sredstvo za dokazivanje skupovnih identiteta). Razlog za to je injenica da se isti graf moe nacrtati na veoma mnogo razli itih na ina, a pored toga, crte grafa moe biti pregledan samo za grafove sa manjim brojem vorova i grana. Na primjer, posmatrajmo graf zadan kao = (X, ) gdje skup X sadri elemente xi, i = 1 .. 10, dok je relacija data sa = {(x1, x2), (x1, x5), (x1, x6), (x2, x1), (x2, x3), (x2, x7), (x3, x2), (x3, x4), (x3, x8), (x4, x3), (x4, x5), (x4, x9), (x5, x1), (x5, x4), (x5, x10), (x6, x1), (x6, x8), (x6, x9), (x7, x2), (x7, x9), (x7, x10), (x8, x3), (x8, x6), (x8, x10), (x9, x4), (x9, x6), (x9, x7), (x10, x5), (x10, x7), (x10, x8)}

10

Dr. eljko Juri : Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehni kom fakultetu u Sarajevu

Predavanje 9. (akademska godina 2011/12)

Prou avanjem strukture relacije vidimo da se radi o neusmjerenom grafu, tako da isti graf moemo formalno predstaviti = (X, U), gdje je U skup (neusmjerenih) grana dat kao U = {{x1, x2}, {x1, x5}, {x1, x6}, {x2, x3}, {x2, x7}, {x3, x4}, {x3, x8}, {x4, x5}, {x4, x9}, {x5, x10}, {x6, x8}, {x6, x9}, {x7, x9}, {x7, x10}, {x8, x10}} Ovaj graf naziva se Petersenov graf i u teoriji grafova je posebno interesantan zbog injenice da je posluio kao kontraprimjer za mnoga tvr enja u teoriji grafova za koja se dugo vremena mislilo da su ta na, a na kraju se ispostavilo da nisu. Postoji izuzetno mnogo vizualno posve razli itih na ina da se nacrta ovaj graf, a naredna slika prikazuje dva na ina koja se naj e e susre u u literaturi. Ovi na ini su toliko vizuelno razli iti da se tek nakon paljivog posmatranja i precizne identifikacije koji vorovi i koje grane ine grafove prikazane na slici uvi a da se zaista radi o jednom te istom grafu: x1 x10 x7 x6 x5 x10 x7 x2 x5 x8 x3 x4 x9 x6 x1 x3 x8 x2

x9 x4

U teoriji grafova esto se doputa mogu nost da par vorova bude povezan sa vie od jedne grane u istom smjeru. Takve tvorevine nazivaju se multigrafovi i na njih se na prirodan na in moe prenijeti ve ina pojmova koji se definiraju za obi ne grafove. Oni se ne mogu formalno predstaviti niti na jedan od dva dosad opisana na ina. Zaista, skupovi ne mogu modelirati viestruko ponavljanje elemenata, tako da se na opisane na ine ne moe modelirati ni viestruko ponavljanje grana. Jedan od izlaza iz ove situacije je koritenje multiskupova umjesto obi nih skupova. Recimo, multigraf moemo formalno definirati kao ure eni par (X, ), gdje je multiskup formiran od elemenata skupa X2 (ili, to je isto, neka kombinacija sa ponavljanjem skupa X). S obzirom na na in kako se multiskupovi mogu predstaviti kao skupovi ure enih parova, kao i na injenicu da vrijedi ((a, b), c) = (a, b, c), to moemo smatrati da je skup iji su elementi ure ene trojke, pri emu (xi, xj, n) intuitivno zna i da su vorovi xi i xj povezani sa n grana koje idu u smjeru od vora xi ka voru xj. Me utim, ni ova definicija nije posve bez prigovora, s obzirom da ona ne omogu ava da se razlikuju pojedine grane iz eventualnog mnotva grana koje spajaju neki par vorova. Problem se moe rijeiti tako da se svakoj grani pridrui odre eni identifikator (ili tag), koji jednozna no identificira granu. Na taj na in, grane se mogu modelirati kao ure ene trojke oblika (g, xi, xj), gdje je g identifikator grane. Pri tome se postavlja dopunsko ograni enje da ne postoje dvije ure ene trojke koje imaju istu prvu koordinatu (tj. dvije grane sa istim identifikatorom). Naravno, ovo je samo jedan od mnotva razli itih ali sutinski ekvivalentnih na ina na koje se mogu modelirati multigrafovi. Poznata je i formalizacija koja grafove i multigrafove modelira kao ure ene trojke oblika (X, G, ) gdje je X skup vorova, G skup grana ( iji elementi pri ovoj formalizaciji nemaju nikakvu precizno utvr enu strukturu), dok je : G X X tzv. funkcija incidencije koja svakoj grani iz G pridruuje ure eni par vorova iz X, koji respektivno predstavljaju po etni i krajnji vor grane. Pri ovoj formalizaciji, elementi skupa G zapravo predstavljaju identifikatore (tagove) grana. U mnogim primjenama korisno je pretpostaviti da je svakoj grani grafa pridruen neki realni broj. Na primjer, ukoliko graf modelira neku mreu puteva, tada broj pridruen nekoj grani moe predstavljati duinu puta koji je modeliran tom granom. Sli no, ukoliko grana ozna ava neku aktivnost, pridrueni broj moe predstavljati trokove koji su vezani za izvo enje te aktivnosti, itd. U takvim slu ajevima govorimo o teinskim ili ponderisanim grafovima, dok se broj pridruen grani naziva teina ili ponder grane (a esto i duina, pogotovo ukoliko pridrueni broj zaista ima interpretaciju duine). Pri formalizaciji prema kojoj se grafovi posmatraju kao ure eni parovi oblika (X, ), teinski grafovi se obi no definiraju kao ure ene trojke oblika (X, , f ) gdje su X i

11

Dr. eljko Juri : Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehni kom fakultetu u Sarajevu

Predavanje 9. (akademska godina 2011/12)

definirani kao u slu aju obi nih grafova, dok je f : funkcija koja svakoj grani iz pridruuje neki realni broj, odnosno njenu teinu. Nije teko zaklju iti kako bi se i druge opisane formalizacije mogle proiriti da uklju e i teinske grafove. Na primjer, pri formalizaciji u kojoj se grane modeliraju kao ure ene trojke oblika (g, xi, xj), teinski graf dobijamo ukoliko umjesto ure enih trojki posmatramo ure ene etvorke oblika (g, xi, xj, w), gdje w predstavlja teinu razmatrane grane. Sada emo razmotriti osnovne pojmove vezane za grafove. Neka je dat graf = (X, ) i neka je Y X. Graf koji nastaje izbacivanjem iz grafa svih vorova koji se ne nalaze u skupu Y i svih grana kojima se barem jedna krajnja ta ka ne nalazi u skupu Y, naziva se podgraf grafa indukovan (induciran) skupom Y. Formalno re eno, podgraf grafa = (X, ) indukovan skupom Y X je graf = (Y, Y2). Graf oblika (X, ) gdje je naziva se djelimi ni odnosno parcijalni graf grafa = (X, ). Drugim rije ima, djelimi ni graf nekog grafa dobija se zadravanjem svih njegovih vorova, a izbacivanjem pojedinih grana. Pored toga, svaki djelimi ni graf nekog podgrafa grafa naziva se djelimi ni podgraf grafa . Za dva vora neusmjerenog grafa kaemo da su susjedni ako su spojeni granom. Za neku granu i neki vor kaemo da su incidentni ukoliko je taj vor jedan od krajnjih ta aka te grane. Kaemo i da se ta grana sti e u tom voru. Ako u nekom grafu kod kojeg postoje orjentirane grane imamo granu koja spaja vorove xi i xj i orjentirana je u smjeru od xi ka xj, kaemo da ta grana izlazi iz vora xi, a ulazi u vor xj. Za petlje se po etni i krajnji vor poklapaju, tako da se smatra da one i ulaze i izlaze iz odgovaraju eg vora. Za svaki vor x definiramo njegov ulazni stepen dG(x) kao broj grana koje ulaze u taj vor i izlazni stepen dG+(x) kao broj grana koje izlaze iz tog vora, odnosno, formalno zapisano, dG(x) = #{ y | ( y, x) } dG+(x) = #{ y | (x, y) }

Kod neusmjerenih grafova se obi no ne definiraju posebno ulazni i izlazni stepeni (oni su tada zapravo jednaki), nego se samo govori o stepenu vora dG(x) kao broju grana koje se sti u u voru x. Me utim, kod neusmjerenih grafova koji sadre petlje, potreban je poseban oprez, zbog toga to ve ina formula teorije grafova za ovakve grafove daje ispravne rezultate jedino ukoliko se petlje broje dvostruko. Ovo naro ito vrijedi kada ra unamo stepen vora, odnosno prisustvo petlje nad nekim vorom pove ava stepen tog vora za 2 (a ne za 1). Ovo na prvi pogled moe izgledati neobi no, ako smo se navikli petlje posmatrati usmjereno (tj. smatrati da one na jednom kraju izlaze iz vora da bi na drugom kraju ponovo ule u njega). Me utim, kod neusmjerenih grafova i petlje se posmatraju neusmjereno, tako da svaka petlja na oba svoja kraja i izlazi i ulazi u vor, tako da je ukupni doprinos stepenu vora 2. Ovo je lako opravdati i formalnim putem. Naime, prisustvo svake neusmjerene grane oblika {xi, xj} pove ava za 1 kako stepen vora xi, tako i stepen vora xj. Sad, ukoliko stavimo da je xj = xi, jasno je da prisustvo takve grane mora pove ati stepen vora xi za 2, s obzirom da je drugi vor sada taj isti vor. Stepeni vorova kod neusmjerenih grafova imaju jedno interesantno svojstvo. Naime, posmatrajmo neusmjereni graf bez petlji koji ima m grana. Ako saberemo stepene svih vorova, moramo dobiti dvostruki broj grana, s obzirom da svaka grana ima kao krajnje ta ke dva vora, odnosno za neusmjerene grafove mora vrijediti relacija dG(x1) + dG(x2) + ... + dG(xn) = 2 m, gdje je n broj vorova. Ovaj rezultat esto se naziva teorema o rukovanju (engl. handshaking theorem) prema interpretaciji po kojoj ukoliko se u skupini od n ljudi svaki ovjek rukuje sa svim svojim poznanicima i ukoliko saberemo koliko svaki ovjek ima poznanika, ukupan broj rukovanja m jednak je ta no polovini tog zbira. Direktna posljedica ove injenice je da ma koji neusmjereni graf bez petlji moe imati samo paran broj vorova neparnog stepena. Izvedeni zaklju ci se esto mogu iskoristiti za dokazivanje nemogu nosti egzistencije izvjesnih kombinatornih konfiguracija. Za neusmjereni graf kaemo da je pravilan (ili regularan) stepena r ukoliko mu svaki vor ima stepen r. Na osnovu prethodnog razmatranja, slijedi da svaki pravilan graf stepena r sa n vorova mora imati m = n r / 2 grana, tako da ne mogu postojati pravilni grafovi stepena r sa n vorova u slu ajevima kada su oba broja n i r neparni. S druge strane, moe se pokazati da ukoliko je makar jedan od brojeva r ili n paran, uvijek postoji pravilan graf stepena r sa n vorova. Na sljede oj slici prikazana su tri pravilna grafa stepena 3.

12

Dr. eljko Juri : Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehni kom fakultetu u Sarajevu

Predavanje 9. (akademska godina 2011/12)

Za neusmjereni graf = (X, ) kaemo da je potpun ili kompletan ukoliko je = X2 \ , odnosno ukoliko je svaki vor spojen granom sa svakim drugim vorom, osim sa samim sobom (tako da petlje nisu dozvoljene). O igledno je svaki potpun graf sa n vorova ujedno i pravilan stepena n 1. Vrijedi i obrnuto: svaki pravilan graf stepena n 1 sa n vorova je potpun. Potpun graf sa n vorova ozna ava se sa Kn, i sadri ta no n (n 1) / 2 grana. Potpuni grafovi nazivaju se i klike (engl. clique). Ukoliko se kae klika nekog grafa , tada se zapravo misli na podgraf grafa koji je sam za sebe potpun graf, odnosno klika. Ako skup vorova X neusmjerenog grafa = (X, ) moemo podijeliti na dva disjunktna podskupa X1 i X2 ija unija ini skup X tako da svaka grana iz uvijek spaja jedan element iz X1 sa jednim elementom iz X2, odnosno ukoliko za svako (xi, xj) uvijek vrijedi xi X1 i xj X2 ili xi X2 i xj X1, takav graf nazivamo graf parova ili bipartitivni graf. Pri tome, par podskupova {X1, X2} nazivamo biparticijom (ili dvopodjelom) razmatranog bipartitivnog grafa. Bipartitivni graf kod kojeg je svaki element iz X1 spojen sa svakim elementom iz X2 naziva se potpuni graf parova ili bikompletan graf. Bikompletan graf u kojem skup X1 ima n elemenata a skup X2 m elemenata, ozna ava se sa Kn,m. Potpuni (kompletni) i bikompletni grafovi su jedinstveni do na ozna avanje vorova. Na sljede oj slici su prikazani grafovi K5 (lijevo) i K2,3 (desno).

Analogno se moe definirati i n-partitivni graf kao graf ija svaka grana uvijek spaja dva elementa iz dva razli ita podskupa skupa X koji tvore neku particiju skupa X od n podskupova, kao i n-kompletan graf kao graf u kojem je svaki element iz nekog podskupa koji tvori neku particiju skupa X spojen sa svakim elementom iz nekog drugog podskupa iste particije, a nikad sa elementom iz istog podskupa. Analogno ozna avanju bikompletnih grafova, n-kompletni grafovi ozna avaju se oznakom Kn1, n2, ..., nk gdje su n1, n2, ..., nk brojevi elemenata podskupova koji ine razmatranu particiju.

Putevi i povezanost grafova


Veliki dio teorije grafova zasniva se na pojmu puta i srodnim pojmovima. Pod putem u nekom grafu = (X, ) smatramo svaki niz grana (tj. elemenata iz ) g1, g2, ..., gk pri emu svaka grana gi, i = 2..k po inje u onom voru u kojem zavrava grana gi1. Po etni vor grane g1 i krajnji vor grane gk nazivaju se po etak i kraj puta. Putevi mogu prolaziti vie puta istom granom ili kroz isti vor. Ukoliko razmatrani put ne prolazi vie puta kroz isti vor, on se tada naziva elementarni put (u anglosaksonskoj literaturi, put op enito imenuje se pojmom walk, to bismo mogli prevesti kao etnja, dok se elementarni put naziva prosto path odnosno samo put). Put koji ne sadri vie puta istu granu naziva se staza (engl. trail). Niz grana koji bi eventualno bio put ukoliko bismo ignorirali orjentaciju grana naziva se lanac (engl. chain). Za puteve se uvijek smatra da su usmjereni (od po etka prema kraju), bez obzira da li je graf usmjeren ili ne. Zbog toga se formalne definicije puteva moraju neznatno modificirati ukoliko se graf modelira na neki na in koji uklju uje neusmjerene grane, jer u tom slu aju moe biti nejasno u kojem smjeru ide put i gdje mu je po etak a gdje kraj. Postoji vie na ina da se formalno definiraju putevi u takvim slu ajevima, u ije detalje ne emo ulaziti. U na elu, takve definicije za svaku neusmjerenu granu unutar puta moraju uklju iti dodatne informacije koji je vor takve grane po etni a koji krajnji u odnosu na smjer u kojem se kre e razmatrani put.

13

Dr. eljko Juri : Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehni kom fakultetu u Sarajevu

Predavanje 9. (akademska godina 2011/12)

Broj grana u putu naziva se duina puta. Ukoliko postoji put kojem su vorovi xi i xj po etak i kraj, kaemo da su vorovi xi i xj povezani, u suprotnom su nepovezani. Duina najkra eg puta sa po etkom u voru xi i krajem u voru xj naziva se rastojanje vorova xi i xj. Po konvenciji se uzima da za slu aj kada vorovi xi i xj nisu povezani, njihovo rastojanje iznosi . Za graf kaemo da je povezan ukoliko su mu svaka dva vora povezana, ina e je nepovezan. Put je zatvoren ukoliko mu se po etak i kraj puta poklapaju, ina e je otvoren. Zatvorena staza naziva se ciklus. Ciklus je elementarni ciklus ili kontura ukoliko ne sadri vie puta isti vor (osim po etnog i krajnjeg, koji se svakako poklapaju). Lako je uvidjeti da grane svake konture obrazuju pravilan graf stepena 2. Tako er, grane svakog povezanog pravilnog podgrafa stepena 2 nekog grafa obrazuju jednu konturu tog grafa. Za graf se kae da je acikli an ukoliko ne sadri niti jedan ciklus. Usmjereni acikli an graf naziva se dag (to je izvedeno iz engl. Directed Acyclic Graph). Neusmjereni povezani acikli ni graf naziva se stablo (engl. tree) dok se neusmjereni nepovezani acikli ni graf naziva uma (engl. forest). Svaki neusmjereni graf koji nije povezan u sutini se raspada na vie dijelova, koji se nazivaju njegove komponente povezanosti. Preciznije, svaki podgraf koji je obrazovan od svih vorova koji su povezani sa nekim izabranim vorom ini jednu komponentu povezanosti grafa. Kako je relacija biti povezan relacija ekvivalencije u skupu vorova nekog neusmjerenog grafa, komponente povezanosti grafa su zapravo njegovi podgrafovi inducirani elementima klasa ekvivalencije u odnosu na relaciju biti povezan. Tako er, ukoliko usvojimo terminologiju po kojoj je neki podgraf nekog grafa maksimalan u odnosu na neko svojstvo ukoliko on ima to svojstvo a niti jedan obuhvatniji podgraf nema to svojstvo, tada moemo re i da su komponente povezanosti nekog grafa njegovi maksimalni povezani podgrafovi. Bitno je uo iti da u slu aju usmjerenih grafova relacija biti povezan nije relacija ekvivalencije (s obzirom da nije nuno simetri na), tako da kod usmjerenih grafova komponente povezanosti ne moemo definirati preko klasa ekvivalencije. Na pitanje komponenti povezanosti usmjerenih grafova vrati emo se neto kasnije. Za povezane grafove definiramo stepen povezanosti po vorovima (engl. vertex-connectivity) i stepen povezanosti po granama (engl. edge-connectivity) kao minimalni broj vorova odnosno grana ije uklanjanje ini graf nepovezanim. Ukoliko razmatrani graf modelira neku komunikacionu mreu, tada stepen povezanosti po vorovima odnosno po granama predstavlja broj komunikacionih vorita odnosno komunikacionih veza ije otkazivanje dovodi do naruavanja funkcioniranja mree. Pod artikulacionim vorom nekog grafa podrazumijevamo vor ijim se udaljavanjem pove ava broj komponenti povezanosti grafa. Most je grana grafa ijim se udaljavanjem postie isti efekat. Vise a grana je grana kod koje jedan od vorova (po etni ili krajnji) ima stepen 1. Svaka vise a grana je uvijek ujedno i most. Sljede a slika prikazuje jedan graf, na kojem su oznakama a, m i v ozna eni artikulacioni vorovi, mostovi i vise e grane. v m a a a a m v m a a v m

m a m

Svaki maksimalni povezani podgraf nekog grafa koji ne sadri artikulacione vorove naziva se blok grafa. Sljede a slika prikazuje sve blokove grafa sa prethodne slike.

Pitanje povezanosti znatno je sloenije u slu aju usmjerenih nego u slu aju neusmjerenih grafova, zbog injenice da relacija biti povezan u skupu vorova usmjerenih grafova nije relacija ekvivalencije. Stoga se kod usmjerenih grafova definira vie vrsta povezanosti. Usmjereni graf je jako

14

Dr. eljko Juri : Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehni kom fakultetu u Sarajevu

Predavanje 9. (akademska godina 2011/12)

povezan (engl. strongly connected) ukoliko je povezan u smislu prethodno date definicije povezanosti. To zna i da za svaka dva vora xi i xj mora postojati kako put iz vora xi u vor xj, tako i put iz vora xj u vor xi (s obzirom da povezanost mora vrijediti za proizvoljan po etni i proizvoljan krajnji vor, ona mora vrijediti i kada vorovi me usobno zamijene uloge). Ukoliko se zahtijeva da za bilo koja dva vora xi i xj mora postojati povezanost samo u jednom smjeru (dakle, da postoji put bilo iz vora xi u vor xj, bilo iz vora xj u xi), kaemo da je graf jednosmjerno povezan. Kona no, ukoliko bi neki usmjereni graf postao povezan kada bismo u potpunosti ignorirali orjentaciju grana, kaemo da je taj graf slabo povezan (engl. weakly connected). Slabo povezani graf ne mora biti ak ni jednosmjerno povezan, jer se moe desiti da za neki par vorova xi i xj uop e ne postoji put iz vora xi u xj isklju ivo zbog pogrene orjentacije pojedinih grana, ali bi takav put postojao kada bismo promijenili orjentaciju spornih grana, odnosno kada bismo orjentaciju naprosto ignorirali. Pitanje komponenti povezanosti tako er se komplicira u slu aju usmjerenih grafova. Kod njih se mogu definirati razli ite vrste komponenti povezanosti. Recimo, ignoriramo li usmjerenja grana u grafu, tj. ukoliko graf posmatramo kao neusmjereno graf, dobijamo komponente slabe povezanosti. Me utim, za primjenu su mnogo zna ajnije tzv. komponente jake povezanosti. Da bismo definirali komponente jake povezanosti, definirajmo da su dva vora xi i xj jako povezani ukoliko postoji kako put iz vora xi u vor xj, tako i put iz vora xj u vor xi. Alternativno, moemo re i da su vorovi xi i xj jako povezani ukoliko xi i xj lee na nekom zatvorenom putu grafa. Po konvenciji se tako er uzima da je svaki vor jako povezan sa samim sobom. Uz ove konvencije, relacija biti jako povezan predstavlja relaciju ekvivalencije u skupu vorova grafa. Sada su komponente jake povezanosti nekog grafa njegovi podgrafovi inducirani elementima klasa ekvivalencije u odnosu na relaciju biti jako povezan. Prostije re eno, komponente jake povezanosti grafa ine podgrafovi koji su obrazovani od svih vorova koji su jako povezani sa nekim izabranim vorom grafa. Neka je, na primjer, dat (nepovezan) usmjeren graf kao na sljede oj slici:

Ovaj graf ima etiri komponente jake povezanosti (C1, C2, C3 i C4) koje su prikazane na sljede oj slici:

C2 C1

C3 C4

Lako se vidi da se iz jedne u drugu komponentu jake povezanosti moe prelaziti samo u jednom pravcu (ukoliko potujemo orjentaciju grana), odnosno kada jednom napustimo neku komponentu jake povezanosti, u nju se vie ne moemo vratiti. Naime, grana koja eventualno povezuje dvije komponente jake povezanosti ne lei ni na jednom zatvorenom putu. Stoga je komponente jake povezanosti mogu e konstruisati na sljede i na in. Iz grafa uklonimo sve grane koje se ne nalaze niti na jednom zatvorenom putu. Graf se tada raspada na posve odvojene dijelove koji nisu nita drugo nego upravo komponente jake povezanosti.

15

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 10. (akademska godina 2011/12)

Predavanje 10
Naini za reprezentaciju (predstavljanje) grafova
Za realizaciju raznih algoritama za rjeavanje tipinih grafovskih problema potrebno je imati reprezentaciju grafa u nekom obliku pogodnom za algoritamsku obradu. Naravno, ve sama formalna definicija grafa kao ureenog para (X, R ) daje jednu mogunost reprezentacije grafa, odnosno graf moemo opisati skupom vorova i grana. Meutim, takva reprezentacija obino nije pogodna za efikasno izvoenje algoritama sa grafovima. Neka je, na primjer, u nekom koraku algoritma potrebno testirati da li su vorovi xi i xj susjedni (tj. spojeni granom). U sluaju opisa grafa preko para (X, R ), izvoenje ovog algoritamskog koraka zahtijeva pretragu da li u skupu R postoji par (xi, xj), to u najboljem sluaju zahtijeva log2 m koraka, gdje je m broj grana (i to pod uvjetom da elemente skupa R uvamo u nekom sortiranom poretku i da za pretragu koristimo postupak polovljenja, odnosno binarne pretrage). Ukoliko se testiranje susjedstva vorova izvodi esto, algoritmi zasnovani na takvoj reprezentaciji grafa bili bi nedopustivo spori. Takoer, izvoenje mnogih drugih elementarnih algoritamskih koraka ne moe se efikasno izvesti sa reprezentacijom grafa u formi ureenog para (X, R ). Stoga su razvijeni mnogi pogodniji naini za reprezentaciju grafova koji omoguavaju efikasniju izvedbu elementarnih algoritamskih koraka. U nastavku emo spomenuti neke od najvanijih. est nain reprezentacije grafa je pomou njegove matrice susjedstva (adjacencije). Matrica susjedstva A grafa G = (X, R ) nije nita drugo nego relaciona matrica pridruena relaciji R (ovo podrazumijeva da smo u skup X uveli numeraciju elemenata, tako da se zna koji je element prvi, koji drugi, itd.). Drugim rijeima, za elemente aij matrice A vrijedi aij = 1 ako i samo ako su vorovi xi i xj spojeni granom, inae je aij = 0. Jasno je da je kod usmjerenih grafova matrica A simetrina. Pojam matrice susjedstva se lako poopava za sluaj multigrafova tako to se uzima da u tom sluaju vrijednost elementa aij predstavlja broj grana koje spajaju vorove xi i xj. Veoma slian pojam matrici susjedstva je teinska matrica W koja se definira za teinske grafove. Za njene elemente wij vrijedi da je vrijednost wij jednaka teini grane koja spaja vorove xi i xj. Za sluaj kada vorovi xi i xj uope nisu spojeni granom, vrijednost wij definira se ovisno od primjene, pri emu je za potrebe veine primjena u tom sluaju najpogodnije uzeti wij = . Matrica susjedstva je u mnogim primjenama vrlo praktian nain za reprezentaciju grafa. Na primjer, algoritamski korak testiranja da li su vorovi xi i xj susjedni izvodi se vrlo efikasno, jer se svodi na prosto testiranje da li je element aij matrice A jednak jedinici. Pored toga, mnogi algoritmi za rjeavanje grafovskih problema svode se na direktnu manipulaciju sa elementima matrice A. Na primjer, iz definicije produkta relacija neposredno slijedi da izmeu vorova xi i xj postoji put duine k ako i samo ako vrijedi (xi, xj) R k, gdje je R k k-ti stepen relacije R . Isto tako, put (ma koje duine) izmeu vorova xi i xj postoji ako i samo ako vrijedi (xi, xj) R +, gdje je R + tranzitivno zatvorenje relacije R . Slijedi da se testiranje da li izmeu vorova xi i xj postoji put duine k odnosno da li uope postoji put moe svesti na testiranje da li je element u i-tom redu i j-toj koloni matrice A< k > odnosno A+ jednak jedinici (podsjetimo se da je A< k > Booleov stepen matrice A). Takoer, element u i-tom redu i j-toj koloni matrice Ak gdje je Ak obini (a ne Booleov) matrini stepen matrice A daje broj puteva duine k koji postoje izmeu vorova xi i xj. Treba napomenuti da za prosto testiranje da li postoji ma kakav put izmeu vorova xi i xj postoje i mnogo efikasniji algoritmi od raunanja matrice A+ i testiranja elementa u i-tom redu i j-toj koloni (poput BFS pretrage, koju emo razmotriti neto kasnije). Meutim, ukoliko je potrebno testirati povezanost putem za mnogo razliitih parova vorova (xi, xj), isplati se jednom izraunati matricu A+ a zatim samo testirati njene elemente. Matrice susjedstva imaju dobrih svojstava, ali za neke primjene nisu osobito pogodne. Na primjer, neka je potrebno utvrditi da li je vor xi spojen granom makar sa jednim vorom. Ukoliko je graf opisan matricom susjedstva A, potrebno je testirati da li se u i-tom redu matrice A nalazi makar jedna jedinica, to u najgorem sluaju moe zahtijevati n testiranja, gdje je n broj vorova. Slian problem se javlja ukoliko je potrebno pronai neki (bilo koji) vor koji je spojen granom sa zadanim vorom xi (ovaj problem se svodi na pronalaenje neke jedinice u i-tom redu matrice A). U sluajevima kada je efikasno davanje odgovora na ovakva pitanja presudno, bolje je za prezentaciju grafova umjesto matrice susjedstva koristiti listu susjedstva (adjacencije). Lista susjedstva grafa G = (X, R ) je lista (ureena n-torka) L = (N1, N2, ..., Nn) pri emu Ni predstavlja skup svih vorova koji su susjedni voru
1

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 10. (akademska godina 2011/12)

xi (tj. koji su povezani granom sa vorom xi). Na primjer, za Petersenov graf, koji smo prikazali kao primjer u jednom od ranijih odjeljaka, lista susjedstva glasi: L = ({x2, x5, x6}, {x1, x3, x7}, {x2, x4, x8}, {x3, x5, x9}, {x1, x4, x10}, {x1, x8, x9}, {x2, x9, x10}, {x3, x6, x10}, {x4, x6, x7}, {x5, x7, x8}) Jasno je da se pomou listi susjedstva odgovor na oba prethodno postavljena pitanja moe dobiti vrlo efikasno (test da li je vor xi spojen granom makar sa jednim vorom svodi se na test da li je Ni prazan skup, dok za pronalaenje nekog vora spojenog sa vorom xi moemo prosto uzeti bilo koji element skupa Ni). S druge strane, lista susjedstva ne omoguava naroito efikasno testiranje da li je vor xi spojen sa vorom xj, jer je za tu svrhu potrebno testirati da li je xj Ni. Uz dobru implementaciju (koja ukljuuje uvanje elemenata skupova Ni u sortiranom poretku i koritenje binarne pretrage), ovo testiranje moe se izvesti u log2 ni koraka, gdje je ni broj vorova koji su spojeni sa vorom xi. U najgorem sluaju, ovaj broj koraka iznosi log2 n, gdje je n broj vorova. Treba napomenuti da se u mnogim raunarskim implementacijama uzima da elementi Ni liste susjedstva L nisu skupovi, nego takoer liste (tj. ureene kolekcije elemenata), s obzirom da je efikasna implementacija skupova na raunaru, to podrazumijeva efikasnu podrku pretraivanju, umetanju i brisanju elemenata, znatno komplikovanija od implementacije listi (s obzirom da efikasna implementacija skupova zahtijeva koritenje tzv. balansiranih binarnih stabala). Naalost, liste se mogu pretraivati iskljuivo sekvencijalno, tako da u tom sluaju testiranje da li se element xj nalazi u listi Ni moe u najgorem sluaju zahtijevati n koraka, to je drastino pogoranje u odnosu na log2 n koraka koje imamo ukoliko zaista koristimo (propisno implementirane) skupove, a ne liste. Interesantno je uporediti matrice susjedstva i liste susjedstva sa aspekta utroka memorije prilikom uvanja grafova u raunarskoj memoriji. Uzmimo da razmatrani graf ima m grana i n vorova. Sasvim je jasno da je za uvanje matrice susjedstva A potrebno zauzeti n2 bita, neovisno od broja grana, uz pretpostavku da kodiramo elemente matrice tako da jedan element zauzme jedan bit (to je mogue, s obzirom da element moe imati samo vrijednosti 1 ili 0). S druge strane, nije teko vidjeti da svi skupovi Ni, i = 1 .. n koji su elementi liste susjedstva L imaju zajedno m elemenata. Kako se svi indeksi i iz opsega od 1 do n mogu optimalno kodirati sa log2 n bita, to se itava lista susjedstva moe u najboljem sluaju kodirati u m log2 n bita. Sada situacija bitno ovisi od odnosa broja grana i broja vorova. Graf sa n vorova moe imati najvie n2 grana, dok povezan graf sa n vorova ne moe imati manje od n 1 grana. Ovo daje povod da uvedemo sljedee pojmove. Za graf iji broj grana m nije mnogo manji od n2 kaemo da je gust, dok za graf iji broj grana nije mnogo vei od n kaemo da je rijedak. Drugim rijeima, za guste grafove imamo m n2, dok za rijetke grafove imamo m n (razumije se da ovi pojmovi nisu precizni i obino se uzima da je m = n log2 n granica do koje se graf smatra rijetkim). Slijedi da za guste grafove lista susjedstva zahtijeva oko n2 log2 n bita, to je nepovoljnije nego u sluaju da se koristi matrica susjedstva. S druge strane, za rijetke grafove lista susjedstva zahtijeva oko n log2 n bita, to je mnogo povoljnije nego u sluaju da se koristi matrica susjedstva. Kao zakljuak moemo izvesti da je, sa aspekta utroka memorije, reprezentacija pomou matrice susjedstva isplativija u sluaju gustih grafova, dok je reprezentacija pomou liste susjedstva isplativija u sluaju rijetkih grafova. Nije na odmet napomenuti da reprezentacija grafa kao ureenog para (X, R ) uz dobro kodiranje zahtijeva 2 m log2 n bita, odakle slijedi da je takva reprezentacija inferiorna u odnosu na reprezentaciju pomou liste susjedstva i sa aspekta utroka memorije. Razumije se da provedene procjene memorijskog utroka vrijede samo pod uvjetom da je kodiranje elemenata obavljeno na optimalan nain, to zahtijeva izvjesnu programersku vjetinu. U suprotnom, memorijski utroak moe biti osjetno vei. Na primjer, ukoliko se matrica A kodira u nekom klasinom programskom jeziku na naivan nain, na primjer kao klasini dvodimenzionalni niz formata n n iji su elementi logikog tipa (recimo, tipa boolean u jeziku Pascal odnosno bool u jeziku C++), utroak memorije e se poveati ak 8 puta, s obzirom da veina klasinih programskih jezika iz praktinih razloga za kodiranje elemenata logikog tipa ne koristi jedan bit po elementu, nego itav bajt koji sadri 8 bita (programeri koji koriste programski jezik C++ su tu u prednosti u odnosu na programere u mnogim drugim programskim jezicima, s obzirom da tip vector<vector<bool> > u programskom jeziku C++ direktno implementira matrice iji svaki element zauzima samo jedan bit). Meutim, bez obzira na kvalitet kodiranja, zakljuak da je reprezentacija grafa pomou liste susjedstva znatno racionalnija od reprezentacije pomou matrice susjedstva za sluaj rijetkih grafova i dalje vrijedi. S

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 10. (akademska godina 2011/12)

druge strane, pri loem kodiranju, reprezentacija grafa pomou matrice susjedstva ne mora biti racionalnija od reprezentacije pomou liste susjedstva ak ni u sluaju veoma gustih grafova. U nekim primjenama teorije grafova (naroito u primjenama kod kojih se grafovi koriste za modeliranje elektrinih mrea) pogodna je reprezentacija grafova pomou matrica incidencije. Ovaj nain reprezentacije zahtijeva da izvrimo numeraciju ne samo vorova grafa, nego i grana grafa (tako da se tano zna koja je grana prva, koja druga, itd.). Neka imamo graf G = (X, R ) sa m grana i n vorova. Matrica incidencije B ovog grafa je matrica formata n m, pri emu se sami elementi bij matrice B definiraju na razliite naine za neusmjerene i usmjerene grafove. U oba sluaja je bij = 0 ukoliko vor xi nije incidentan sa granom gj. Pretpostavimo sada da grana gj nije petlja. U sluaju neusmjerenih grafova imamo bij = 1 ukoliko je vor xi incidentan sa granom gj, dok kod usmjerenih grafova uzimamo bij = 1 ukoliko grana gj izlazi iz vora xi, a bij = 1 ukoliko grana gj ulazi u vor xi. to se tie petlji, one su dosta problematine, s obzirom da svaka petlja i ulazi i izlazi iz nekog vora. Zbog toga se, u sluaju da je gj petlja nad vorom xi, obino za sluaj neusmjerenih grafova uzima da je bij = 2 (tj. 1 + 1), dok se za sluaj usmjerenih grafova uzima bij = 0 (tj. 1 1). Matrice incidencije oigledno zahtijevaju memoriranje m n elemenata, koji se ne mogu kodirati sa jednim bitom (s obzirom da mogu imati 3 vrijednosti) ve zahtijevaju barem 2 bita, to uz optimalno kodiranje daje utroak memorije od 2 m n bita. Ovaj utroak je vei od n2 ak i u sluaju vrlo rijetkih grafova, dok je reda veliine n3. Oigledno je da su matrice incidencije prilino neefikasne sa aspekta utroka memorije. S druge strane, mnogi algoritmi za rad sa teinskim grafovima, koji se koriste u praktinim primjenama, mogu se svesti na matrino mnoenje matrice incidencije ili nekih njenih submatrica sa teinskom matricom, ili nekim srodnim matricama. Pored toga, pojedini grafovski algoritmi, poput algoritama za nalaenje kontura unutar grafa, osjetno se pojednostavljuju u sluaju da je graf predstavljen matricom incidencije.

Izomorfizam grafova
Vidjeli smo ranije na primjeru Petersenovog grafa da se jedan te isti graf moe nacrtati na mnogo razliitih naina, koji su vizuelno posve razliiti. Meutim, jasno je da nain crtanja ne utie na formalnu reprezentaciju grafa, odnosno identini grafovi koji su razliito nacrtani imae iste reprezentacije, bez obzira na to koji se nain reprezentacije koristi. Situacija se znatno komplicira u sluaju da izvrimo promjenu obiljeavanja vorova grafa. Na taj nain moemo dobiti graf sa posve drugaijom reprezentacijom, iako se radi o sutinski istom grafu. Kao skoro trivijalan primjer, razmotrimo graf koji je formalno predstavljen kao G1 = ({x1, x2, x3}, {(x1, x1), (x1, x2), (x2, x3)}). Njemu odgovara sljedei crte: x1 x2 x3

Ukoliko sada promjenimo obiljeavanje vorova tako da vorovi x1, x2 i x3 dobiju respektivno oznake x2, x3 i x1, dobijamo graf iji se formalni model razlikuje od G1, odnosno dobijamo graf G2 = ({x1, x2, x3}, {(x2, x2), (x2, x3), (x3, x1)}). Posljedica je da se matrice susjedstva kao i sve druge reprezentacije grafova G1 i G2 takoer razlikuju, bez obzira to, sutinski gledano, G1 i G2 predstavljaju jedan te isti graf. Zaista, matrice susjedstva A1 i A2 za grafove G1 i G2 glase A1 = 0 0 1
0 0 0 1 1 0

A2 = 0 1 1
1 0 0

0 0 0

Prethodno rezonovanje navodi nas na sljedeu definiciju. Za dva grafa G1 i G2 kaemo da su izomorfni ukoliko oni sutinski predstavljaju jedan te isti graf, odnosno ukoliko se jedan od njih moe svesti na drugi uz pogodnu promjenu obiljeavanja vorova. Formalno definirano, grafovi G 1 = (X1, R 1) i G 2 = (X2, R 2) su izomorfni ukoliko postoji bijektivna funkcija f : X1 X2 takva da iz (u, v) R 1 slijedi (f (u), f (v)) R 2. Pri tome se sama funkcija f naziva izomorfizam sa G1 na G2. Izomorfizam predstavlja relaciju ekvivalencije u nekom skupu grafova. Za dva izomorfna grafa smatra se da su sutinski identini, ali predstavljeni na razliite naine.

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 10. (akademska godina 2011/12)

injenica da se izomorfni grafovi praktino ne razlikuju dovela je i do alternativnih definicija pojma grafa koje ne prave nikakvu razliku izmeu dva izomorfna grafa. Recimo, prema jednoj od takvih definicija, ono to smo mi dosada zvali grafom naziva se model grafa, dok se tada grafovima nazivaju klase ekvivalencije modela grafa u odnosu na relaciju izomorfizma. Na taj nain, jedan te isti graf moe imati vie meusobno izomorfnih modela. Mada takve definicije bolje odgovaraju onome to se intuitivno doivljava pod pojmom grafa, formalne manipulacije sa tako definiranim grafovima postaju znatno sloenije, s obzirom da treba baratati sa klasama ekvivalencije. Zbog toga, na ovom kursu neemo koristiti takve definicije. Oigledno je problem utvrivanja da li su dva grafa izomorfna ili ne od velike vanosti za teoriju grafova. Naalost, to je ujedno i vrlo teak problem. Vizuelna prezentacija grafa nije ni od kakve pomoi, s obzirom da se dva izomorfna grafa mogu nacrtati na naine koji ni najmanje nisu nalik jedan drugom. Dodue, u nekim sluajevima je veoma lako zakljuiti da grafovi nisu izomorfni. Na primjer, dva grafa sa razliitim brojem grana ili vorova sigurno nisu izomorfni. Takoer, dva grafa sa istim brojem grana i vorova ne mogu biti izomorfni ukoliko stepeni njihovih vorova nisu identini, tanije ukoliko skupovi sastavljeni od stepena njihovih vorova nisu jednaki. Meutim, ovo su sve samo potrebni, ali ne i dovoljni uvjeti za izomorfizam, s obzirom da dva grafa mogu imati jednak broj grana i vorova, i jednake stepene odgovarajuih vorova, ali da opet nisu izomorfni. Ipak, ukoliko pronaemo makar jedno svojstvo koje ne zavisi od naina obiljeavanja vorova a koje se razlikuje u dva posmatrana grafa (npr. ukoliko jedan graf sadri jednu konturu duine 3 a drugi graf dvije takve konture), to je siguran dokaz da grafovi nisu izomorfni. Primijetimo da u sluaju kada dva grafa jesu izomorfni, navoenje promjene obiljeavanja vorova koje jedan graf svodi na drugi predstavlja dovoljan i lako provjerljiv dokaz da su oni zaista izomorfni. S druge strane, ukoliko grafovi nisu izomorfni, za dokazivanje te injenice nije dovoljno samo rei da odgovarajua promjena obiljeavanja ne postoji (s obzirom da se takvo tvrenje ne moe lako provjeriti), nego je potrebna neka vrsta ubjedljive i provjerljive argumentacije, ija priroda varira od sluaja do sluaja. Siguran nain za provjeru da li su dva grafa izomorfna ili ne je testiranje da li se redovi i kolone matrice susjedstva jednog grafa mogu ispremjetati tako da se dobije matrica susjedstva drugog grafa. Naime, premjetanje redova i kolona matrice susjedstva odgovara promjeni numeracije vorova (pri tome je potrebno istovremeno premjetati kako redove, tako i odgovarajue kolone, s obzirom da razmjena vorova xi i xj dovodi do razmjene kako i-tog i j-tog reda, tako i i-te i j-te kolone matrice susjedstva). Nevolja je u tome to n vorova moemo razmjestiti na n! naina (s obzirom da mogui razmjetaji nisu nita drugo nego permutacije skupa vorova). Kako funkcija faktorijel raste enormno brzo sa porastom n, takvo testiranje je nemogue obaviti za iole vee n. Opisani kriterij izomorfizma moe se iskazati i analitiki. Naime, grafovi G1 i G2 sa matricama susjedstva A1 i A2 su izomorfni ako i samo ako postoji permutaciona matrica P takva da je P A1 = A2 P. Pri tome se permutaciona matrica definira kao kvadratna matrica koja u svakom redu i svakoj koloni ima tano jedan element jednak jedinici, dok su svi ostali jednaki nuli. S obzirom da permutacionih matrica sa n redova i kolona ima konano mnogo, mogue je opisani test izvesti u konano mnogo koraka. Nevolja je to je broj takvih permutacionih matrica takoer n!, tako da za iole vee n ovaj test nije mogue obaviti u razumnom vremenu. Problem izomorfizma grafova, mada izuzetno znaajan, nije do danas adekvatno rijeen, s obzirom da do sada nije naen niti jedan algoritam za testiranje izomorfizma grafova koji bi u opem sluaju traio manji broj koraka od eksponencijalne funkcije broja vorova n, odnosno nije poznat nikakav algoritam kojim bi se moglo u razumnom vremenu sa sigurnou utvrditi da li su dva iole vea grafa izomorfna ili ne, osim u nekim specijalnim sluajevima. Takva situacija je, inae, vrlo esta u teoriji grafova. Naime, s obzirom da su grafovski problemi u sutini kombinatorni problemi, za mnoge grafovske probleme ne vidi se nikakav drugi nain rjeavanja nego ispitivanje svih moguih varijanti koje se mogu javiti kao potencijalna rjeenja problema. Naalost, broj takvih varijanti obino strahovito raste sa porastom broja vorova ili grana grafa (ovaj problem naziva se kombinatorna eksplozija). Sreom, to ne vrijedi za sve grafovske probleme. Naime, za mnoge grafovske probleme postoje efikasni algoritmi, ak i za neke probleme koji na prvi pogled djeluju vrlo sloeno. Neobino je to je vrlo esto formulacija dva problema od kojih za jedan postoji a za drugi ne postoji efikasan algoritam za njihovo rjeavanje veoma slina. Problem izomorfizma grafova ipak nije toliko teak kao

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 10. (akademska godina 2011/12)

neki drugi grafovski problemi, s obzirom da je za njega postoji algoritam (poznat pod imenom NAUTY ) koji radi brzo u prosjeku, tj. daje rjeenje u prihvatljivom vremenu za veliki broj grafova. S obzirom na njegovu sloenost, ovaj algoritam ne moemo opisati u okviru ovog kursa.

Operacije sa grafovima
esto je potrebno od jednog ili vie grafova napraviti novi graf, prema odreenim pravilima. Kaemo da izvodimo odreenu operaciju sa grafovima. Ovdje emo opisati neke od najee koritenih operacija koje se primjenjuju sa grafovima. Ponimo sa operacijom komplementiranja. Neka je dat neusmjereni graf G = (X, R ) bez petlji. Pod komplementom grafa G podrazumijevamo graf G = (X, X2 \ (R J )), odnosno graf koji takoer ne sadri petlje, a u kojem su vorovi xi i xj susjedni ako i samo ako oni nisu susjedni u grafu G. Ukoliko je A matrica susjedstva grafa G, tada njegov komplement za matricu susjedstva ima matricu J A I, gdje je I jedinina matrica, a J matrica iji su svi elementi jedinice. Treba napomenuti da je uvijek barem jedan od grafova G i G povezan, tako da je komplement nepovezanog grafa uvijek povezan (primijetimo da to ne znai da je komplement povezanog grafa uvijek nepovezan, s obzirom da oba grafa G i G mogu biti povezani). Interesantno je da postoje grafovi koji su izomorfni sa svojim komplementom. Takvi grafovi se nazivaju samokomplementarni grafovi. Njihov broj vorova uvijek je ili djeljiv sa 4, ili daje ostatak 1 pri dijeljenju sa 4 (ovo je samo potreban, a ne i dovoljan uvjet za samokomplementarnost). Na sljedeoj slici prikazan je jedan samokomplementaran graf i njegov komplement. Nije teko uvidjeti da preslikavanje f dato sa f (x1) = x1, f (x2) = x4, f (x3) = x5, f (x4) = x3 i f (x5) = x2 izomorfizam sa grafa G na graf G. x1 x1 G G x2 x3 x2 x3

x4

x5

x4

x5

Ukoliko u nekom usmjerenom grafu G obrnemo orjentaciju svih grana, dobijamo graf G koji se naziva konverzni graf grafa G. Ukoliko je A matrica susjedstva grafa G, tada graf G za matricu susjedstva ima matricu AT, pri emu je AT transponirana matrica matrice A. Neka su sada data dva grafa G 1= (X1, R 1) i G 2= (X2, R 2). Unija grafova G 1 i G 2 je graf definiran kao G 1 G 2 = (X1 X2, R 1 R 2). Na primjer, svaki graf je unija svojih komponenti povezanosti. Spoj (ili, kako se ponekad naziva potpuni proizvod) grafova G 1 i G 2 je graf G 1 G 2 koji nastaje tako to najprije formiramo uniju G 1 G 2, a zatim svaki vor iz grafa G 1 spojimo sa svakim vorom grafa G 2. Ukoliko su pri tome skupovi vorova jednog i drugog grafa disjunktni, tj. ukoliko je X1 X2 = , tada za ove operacije vrijede pravila De Morganovog tipa G 1 G 2 = G 1 G 2 i G 1 G 2 = G 1 G 2. Takoer, pod istim uvjetom, ukoliko su A1 i A2 matrice susjedstva grafova G 1 i G 2 i ukoliko usvojimo numeraciju vorova takvu da u grafovima G 1 G 2 i G 1 G 2 svi vorovi grafa G 1 prethode vorovima grafa G 2, tada matrice susjedstva grafova G 1 G 2 i G 1 G 2 respektivno glase
A1 O O A 2 A1 J J A 2

pri emu je O matrica iji su svi elementi nule, a J matrica iji su svi elementi jedinice. Postoji mnogo vrsta operacija sa grafovima, kod kojih rezultirajui graf ima za skup vorova Dekartov proizvod X1 X2 skupa vorova prvog i drugog grafa. Takve operacije generalno se nazivaju proizvodi grafova, i u teoriji grafova je razmatrano ak 256 razliitih definicija proizvoda grafova, u zavisnosti ta se uzima da su grane takvog proizvoda grafova. Od svih tako definiranih proizvoda, praktinu primjenu je nalo moda desetak. Na ovom mjestu e biti opisano nekoliko najvanijih tipova proizvoda grafova. Neka su G 1= (X1, R 1) i G 2= (X2, R 2) dva grafa. Dva najee koritena proizvoda grafova su proizvodi od kojih se jedan naziva prosto proizvod grafova (bez ikakvog

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 10. (akademska godina 2011/12)

specifinog pridjeva) ili kategoriki (strogi) proizvod grafova, dok se drugi naziva suma grafova (naziv oito nije ba konzistentan s obzirom da se radi o proizvodu) ili Dekartov proizvod grafova (ni ovaj naziv nije ba najsretniji). Ovi proizvodi se obino obiljeavaju respektivno sa G 1 G 2 i G 1 +G 2, a a formalno su definirani kao G 1 G 2 = (X1 X2, R ) i G 1 +G 2 = (X1 X2, R +), gdje su relacije R i R + date kao R

= {((u1, v1), (u2, v2)) | (u1, u2) R 1 (v1, v2) R 2}

R + = {((u1, v1), (u2, v2)) | ((u1, u2) R 1 v1 = v2) (u1 = u2 (v1, v2) R 2)} Drugim rijeima, u grafu G 1 G 2 vorovi (u1, v1) i (u2, v2) su vezani granom ako i samo ako su vorovi u1 i u2 vezani granom u grafu G 1 i ako su vorovi v1 i v2 vezani granom u grafu G 2, dok su u grafu G 1 +G 2 vorovi (u1, v1) i (u2, v2) vezani granom ako i samo ako je v1 = v2 pri emu su vorovi u1 i u2 vezani granom u grafu G 1, ili ako je u1 = u2 pri emu su vorovi v1 i v2 vezani granom u grafu G 2. Za sumu grafova ponekad se umjesto oznake G 1 +G 2 koristi oznaka G 1 G 2. Pored ova dva proizvoda, u praksi su znaajni i tzv. jaki proizvod grafova, u oznaci G 1 *G 2 i leksikografski proizvod grafova, koji za razliku od ostalih proizvoda grafova, nije komutativan. Jaki proizvod grafova je definiran prosto kao unija kategorikog proizvoda i sume grafova G 1 i G 2, odnosno G 1 *G 2 = (G 1 G 2) (G 1 +G 2). Za jaki proizvod grafova ponekad se koristi i oznaka G 1 G 2. Konano, leksikografski proizvod grafova, u oznaci G 1 G 2, definiran je definiran je kao G 1 G 2 = (X1 X2, R ), gdje je relacija R data kao R = {((u1, v1), (u2, v2)) | (u1, u2) R 1 (u1 = u2 (v1, v2) R 2)} Na sljedeoj slici prikazana su kao primjer dva vrlo jednostavna grafa G 1 i G 2, kao i grafovi G 1 G 2, G 1 G 2, G 1 +G 2, G 1 *G 2 i G 2 G 1 (proizvod G 1 G 2 nije prikazan, jer je u ovom konkretnom primjeru on jednak proizvodu G 1 *G 2): G1 x1 x2 y2 x3 x3 G2 y1 x2 x1 G1G2 x1 y1 y1 x2 y1 y2 x3 y1 G 1 G 2 x1 y1 x1 y2 x2 y1 x2 y2 x3 y1 x3 y2 G 1 +G 2 x 1 y 1 G 1 *G 2 x 1 y 1 G 2 G 1 x1 y2 x1 y2 x1 y2 x2 y1 x2 y2 x3 y1 x3 y2 x2 y1 x2 y2 x3 y1 x3 y2 x2 y2 x3 y2

Na prethodnoj slici su, radi preglednosti, ureeni parovi poput (x1, y1) prikazani kratko samo kao x1y1. Uvedeni proizvodi grafova imaju veliku primjenu u praksi. Neka, na primjer, grafovi G 1 i G 2 modeliraju rad dvije maine M1 i M2, pri emu vorovi grafa predstavljaju mogua stanja u kojima se maine mogu nai, dok grane grafa predstavljaju dozvoljene prelaske iz stanja u stanje. Uz takav model, graf G 1 G 2 modelira paralelni rad maina, odnosno takav rad kod kojih maine M1 i M2 vre istovremene prelaske iz stanja u stanje, dok graf G 1 +G 2 modelira serijski rad maina, odnosno takav rad kod kojeg u jednom trenutku vremena samo jedna od maina M1 ili M2 vri prelaz iz stanja u stanje, dok druga maina zadrava postojee stanje. Jaki proizvod grafova ima velike primjene u teoriji kodiranja, dok leksikografski proizvod grafova ima primjene pri razmatranju problema vezanih za sortiranje. U sutini, ukoliko grafovi G 1 i G 2 modeliraju dvije relacije poretka R 1 i R 2 na skupovima X1 i X2, tada graf G 1 G 2 modelira leksikografski poredak na skupu X1 X2.

Planarni grafovi
Za praktine potrebe, od velikog su znaaja grafovi koji se mogu tako nacrtati u ravni da im se grane ne presjecaju. Takvi grafovi nazivaju se planarni grafovi. Na primjer, ukoliko se grafom modelira neka elektrina mrea, pri emu grane predstavljaju provodnike, od znaaja je utvrditi moe li se ta mrea prikazati bez presjecanja grana. Naime, presjecanje grana povlai presjecanje

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 10. (akademska godina 2011/12)

provodnika bez spoja na mjestu presjeka, to moe predstavljati komplikacije pri realizaciji (naroito ukoliko se koristi tzv. tehnologija tampanih veza). Takoer, mnogi algoritmi za rjeavanje grafovskih problema mogu se znatno uprostiti ukoliko se unaprijed zna da je graf planaran. S obzirom da je usmjeren graf planaran ako i samo ako je odgovarajui neusmjereni graf takoer planaran, u nastavku emo, radi jednostavnosti, razmatrati samo neusmjerene grafove. Bitno je istai da iz injenice da je graf nacrtan tako da mu se grane presjecaju ne slijedi da on nije planaran, jer to jo ne znai da ga nije mogue nacrtati drugaije, bez presjecanja grana. Na primjer, mada se graf K4 obino crta kao kvadrat kojem se dijagonale presjecaju, njega je lako mogue nacrtati i bez presjecanja grana, iz ega slijedi da je graf K4 planaran. Na sljedeoj slici prikazana su dva naina crtanja grafa K4, sa i bez presjecanja grana: x1 x2 x2

x1 x3 x4 x3 x4 Planarni grafovi, kada se nacrtaju bez presjecanja grana, dijele ravan na vie oblasti, od kojih su sve, osim jedne, konane. Te oblasti nazivaju se okca (susreu se i nazivi plohe odnosno strane). Ukoliko je graf povezan i ne sadri niti mostove, niti artikulacione vorove, tada granina linija okca predstavlja jednu konturu posmatranog grafa. Ponekad se pod okcima podrazumijevaju upravo takve konture, a ne same oblasti (s obzirom da je lake formalno opisati konturu nego oblast). Za planarne grafove vrijedi Eulerova teorema koja tvrdi da planaran graf sa m grana i n vorova, kada se nacrta tako da mu se grane ne preklapaju, dijeli ravan na f = m n + 2 oblasti. Ova teorema moe posluiti za izvoenje nekih neophodnih uvjeta za planarnost grafa. Na prvom mjestu, s obzirom da niti jedna oblast ne moe biti ograniena sa manje od tri grane i s obzirom da se svaka grana javlja po dva puta kao granica oblasti, slijedi da za sve planarne grafove mora biti ispunjena nejednakost 2 m 3 f. Iz ove nejednakosti i Eulerove teoreme slijedi da za sve planarne grafove mora vrijediti nejednakost m 3 n 6. Drugim rijeima, neispunjenje ove jednakosti odmah povlai da graf nije planaran. Recimo, iz ove nejednakosti neposredno slijedi da graf K5 nije planaran. tavie, odavde slijedi da niti jedan graf Kn za n 5 ne moe biti planaran. Takoer se na osnovu Eulerove teoreme lako pokazuje da niti jedan graf koji nema barem jedan vor stepena manjeg od 6 ne moe biti planaran. Naalost, ispunjenje nejednakosti m 3 n 6 nije nikakva garancija da je graf planaran. Na primjer, razmotrimo graf K3,3. Za njega je m = 9 i n = 6, tako da je prethodna nejednakost zadovoljena tako da bi tog aspekta ovaj graf mogao biti planaran. Meutim, za bipartitivne grafove se nejednakost 2 m 3 f moe zamijeniti znatno stroijom nejednakou 2 m 4 f, s obzirom da injenica da njihove grane uvijek spajaju vorove iz razliitih particija povlai da svaka oblast mora biti ograniena sa barem etiri grane. Na osnovu ove nejednakosti i Eulerove teoreme slijedi da za bipartitivne planarne grafove mora vrijediti nejednakost m 2 n 4, tako da njeno neispunjenje predstavlja siguran dokaz neplanarnosti za sluaj bipartitivnih grafova (naravno, njeno ispunjenje ne govori nita o eventualnoj planarnosti ili neplanarnosti grafa). Na osnovu ove nejednakosti zakljuujemo da graf K3,3 takoer nije planaran. Mada smo vidjeli da se neplanarnost nekih grafova lako moe utvrditi na osnovu nekih nejednakosti koje slijede iz Eulerove teoreme, to nije mogue za sve neplanarne grafove. Uzmimo kao primjer Petersenov graf. Mada intuivno nasluujemo da ovaj graf nije planaran, s obzirom da se ne vidi nikakav nain da se on nacrta bez presjecanja grana, takav zakljuak nije mogue izvesti na osnovu Eulerove teoreme. Sreom, postoji veoma openita teorema koja daje potrebne i dovoljne uvjete za planarnost ma kakvog grafa, koja je poznata pod nazivom teorema PontrjaginaKuratowskog. Da bismo formulirali ovu teoremu, uvedimo prvo pojam potpodjele grafa. Pod potpodjelom nekog grafa smatramo graf koji nastaje od nekog grafa tako da mu dodamo nove vorove stepena dva na neke od njegovih grana, ime efektivno dijelimo neke njegove grane na vie meusobno povezanih grana. Preciznije, potpodjela nekog grafa nastaje tako da se neke od grana grafa oblika (xi, xj) zamjenjuju nizom grana oblika (xi, u1), (u1, u2), (u2, u3), ..., (uk1, uk), (uk, xj) gdje su u1, u2, ..., uk novouvedeni vorovi koji nisu incidentni niti sa jednom granom osim grana ovog niza grana. Sada, teorema Pontrjagina-Kuratowskog tvrdi da je graf planaran ako i samo ako kao svoje djelimine podgrafove ne sadri niti graf K5, niti graf K3,3, niti neku od potpodjela grafova K5 ili K3,3.

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 10. (akademska godina 2011/12)

Kao primjer primjene teoreme Pontrjagina-Kuratowskog, pokazaemo da Petersenov graf nije planaran. Zaista, nije previe teko primijetiti da se u Petersenovom grafu kao djelimini podgraf nalazi jedna potpodjela grafa K3,3. Takva potpodjela prikazana je na sljedeoj slici. Mnogi na sljedeoj slici nee odmah prepoznati da se radi o potpodjeli grafa K3,3. Stoga su na slici svi vorovi podijeljeni u tri skupine. Jedna skupina vorova oznaena je oznakama iz skupa X = {x1, x2, x3}, druga skupina oznakama iz skupa Y = {y1, y2, y3}, dok trea skupina vorova nije oznaena i oni su prikazani svjetlijom nijansom. Ukoliko izbacimo sve svijetlo prikazane vorove i svake dvije grane koje su se sticale u tim vorovima zamijenimo jednom granom, dobijamo graf u kojem je svaki vor iz skupa X spojen sa svakim vorom iz skupa Y, i u kojem niti jedna grana ne spaja dva vora iz skupa X ili dva vora iz skupa Y. Na osnovu definicije bikompletnih grafova, vidimo da to nije nita drugo nego graf K3,3. Sada je jasno da je nacrtani graf zapravo potpodjela grafa K3,3, pri emu su svijetlo prikazani vorovi oni vorovi koji su ubaeni da bi se dobila potpodjela. x1 y2 y1 x2 y3

x3 Neto drugaiji potreban i dovoljan kriterij za planarnost nudi Wagnerova teorema. Moe se pokazati da je ova teorema u naelu ekvivalentna teoremi Pontrjagina-Kuratowskog, ali su njeni uvjeti esto jednostavniji za provjeru. Naime, ukoliko u proizvoljnom grafu uzmemo neku ivicu {xi, xj} i njene krajeve stopimo u jedan vor (tj. stavimo da je xj = xi) dobijamo novi graf za koji kaemo da je dobijen kontrakcijom polaznog grafa du ivice {xi, xj}. Sada, Wagnerova teorema tvrdi da je graf planaran ako i samo ako ne sadri nikakav podgraf koji se kontrakcijama moe svesti na graf K5 ili K3,3. Na primjer, pomou Wagnerove teoreme izuzetno se jednostavno pokazuje da Petersenov graf nije planaran. Zaista, ukoliko izvrimo kontrakcije Petersenovog grafa du ivica {x1, x6}, {x2, x7}, {x3, x8}, {x4, x9} i {x5, x10} (uz oznaavanje vorova kakvo je bilo koriteno u odjeljku 8.1), dobijamo upravo graf K5. Iz teoreme Pontrjagina-Kuratowskog i Wagnerove teoreme slijedi da su grafovi K5 i K3,3 najprostiji neplanarni grafovi i da se u svakom neplanarnom grafu na izvjestan nain krije ili graf K5 ili graf K3,3 kao njegova podstruktura (odnosno, grafovi K5 i K3,3 su, u neku ruku, generatori svih neplanarnosti). Ovo je interesantan i pomalo neoekivan rezultat. Takoer je interesantno napomenuti da je I. Far dokazao se svi planarni grafovi uvijek mogu nacrtati u ravni ne samo da mu se grane ne presjecaju nego je pored toga mogue postii i da se sve grane nacrtaju kao prave linije. Teorema Pontrjagina-Kuratowskog u naelu omoguava da za svaki graf sa sigurnou moemo utvrditi da li je planaran ili ne. Meutim, ona sama po sebi ne vodi ka efikasnom algoritmu za testiranje planarnosti, odnosno algoritmu koji bi se za iole vee grafove mogao izvriti u razumnom vremenu. Zaudo, mada problem testiranja planarnosti izgleda prilino teak, postoje sasvim efikasni algoritmi za testiranje planarnosti. Jedan od najvie koritenih je algoritam koji su predloili Auslander i Parter kod kojeg je broj operacija neophodnih za testiranje planarnosti u najgorem sluaju proporcionalan sa n3, gdje je n broj vorova grafa. Ovo se u veini primjena smatra zadovoljavajuom efikasnou. Postoje i efikasniji algoritmi za istu namjenu. Jedan posve dobar algoritam predloili su Demoucron, Malgrange i Pertuiset. Ovi algoritmi ne samo da testiraju planarnost, nego pored toga u sluaju da je graf planaran nalaze mogui razmjetaj vorova koji omoguava njihovo crtanje bez presjecanja vorova. Meutim, veliko iznenaenje je nastupilo kada su Hopcroft i Tarjan predloili izuzetno efikasan algoritam za testiranje planarnosti grafa, kod kojeg je broj operacija neophodnih za testiranje planarnosti proporcionalan sa brojem vorova n, to je zaista izvanredno. Svi pomenuti algoritmi su prilino sloeni i glomazni, tako da ih na ovom mjestu neemo opisivati. Pored toga, ovi algoritmi nisu posve jednostavni za programiranje, to je takoer prilino nesretna okolnost. Zainteresirani se upuuju na iru literaturu koja se dublje bavi teorijom grafova. S obzirom da se radi o dobro poznatim algoritmima, zainteresiranima nee biti problem u sluaju potrebe pronai njihov detaljan opis.

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 10. (akademska godina 2011/12)

Eulerovi i Hamiltonovi putevi


Za put u nekom grafu koji prolazi kroz sve grane grafa tano jedanput kaemo da je Eulerov put (ili Eulerova staza). Zatvoreni Eulerov put naziva se Eulerov ciklus. Za povezani graf u kojem postoji Eulerov ciklus kaemo da je Eulerov graf. Interesantno je da je problem ispitivanja da li graf posjeduje Eulerov ciklus ili ne prvi grafovski problem koji je ikada postavljen i rjeavan. Inspiracija za ovaj problem bio je tzv. problem Knigsberkih mostova. U ovom problemu postavlja se pitanje da li se grad Knigsberg (danas Kalinjingrad), koji se prostire na dvije rijene obale i dva rijena otoia koji su meusobno povezani sa 7 mostova, moe obii tako da se preko svakog mosta pree tano jedanput. Problem Knigsbergkih mostova se zapravo sastoji u ispitivanju da li jedan specifian graf (zapravo multigraf) sa 4 vora i 7 grana sadri Eulerov ciklus ili ne. Negativan odgovor na problem Knigsbergkih mostova dat je kroz Euler-Hierholzerovu teoremu, po kojoj je neusmjeren graf Eulerov graf ako i samo ako svaki njegov vor ima paran stepen, dok je usmjeren graf Eulerov graf ako i samo ako svaki njegov vor ima jednak ulazni i izlazni stepen (ova teorema vai ne samo za obine grafove, nego i za multigrafove). Direktna posljedica Euler-Hirholcerove teoreme je da neusmjereni graf sadri otvoreni Eulerov put ako i samo ako posjeduje tano dva vora neparnog stepena. Oigledno je posve lako utvrditi da li graf sadri ili ne sadri Eulerov put ili Eulerov ciklus. U sluaju pozitivnog odgovora na ova pitanja, ostaje problem da se pronae Eulerov put ili Eulerov ciklus. Razmotrimo prvo sluaj nalaenja Eulerovog ciklusa (pod uvjetom da je razmatrani graf Eulerov). Fleuryjev algoritam je konceptualno vrlo jednostavan, ali prilino neefikasan (kada se uzmu u razmatranje implementacioni detalji) algoritam za nalaenje Eulerovog ciklusa. Prema ovom algoritmu, izaberemo proizvoljan vor grafa (recimo, prvi) i krenemo du proizvoljno izabrane grane koja vodi iz posmatranog vora, pri emu pazimo da, ako je ikako mogue, biramo granu koja nije most grafa (odnosno, granu koja jeste most grafa biramo samo ako nam je to jedina mogunost). Konkretnije, pri klasinoj izvedbi Fleuryjevog algoritma, testira se jedna po jedna grana koja izlazi iz vora i bira prva grana koja nije most grafa, ukoliko takva postoji (naravno, u sluaju da su sve grane koje izlaze iz vora mostovi, moramo izabrati neki od njih, recimo prvi). Izabranu granu dopisujemo na kraj spiska grana (koji je na poetku algoritma prazan), nakon ega briemo razmatranu granu i nastavljamo isti postupak od vora u koji je vodila upravo izbrisana grana. Postupak nastavljamo sve dok se ne izbriu sve grane. Po zavretku algoritma, grane u spisku grana, posmatrane u redoslijedu kako su upisivane u spisak, formiraju traeni Eulerov ciklus. Na sljedeoj slici je prikazan primjer jednog Eulerovog grafa, kao i jedan od vie moguih Eulerovih ciklusa dobijen primjenom Fleuryjevog algoritma (s obzirom da Eulerov ciklus nije nuno jedinstven). Konkretnije, traeni Eulerov ciklus obrazuju grane obiljeene sa g1 g20, u rastuem poretku indeksa: g1 g20 g10 g9 g11 g19 g8 g18 g2 g12 g13 g7 g17 g16 g6 g3 g14 g4 g15 g5

Mada je Fleuryjev algoritam konceptualno vrlo jednostavan, u njemu se u svakom koraku javlja potreba da se testira da li neka grana predstavlja most ili ne, to je vremenski zahtjevno i ne ba jednostavno za izvesti. Naime, bez obzira to je vizuelno vrlo lako uoiti da li je neka grana most ili ne, to nimalo nije lako utvrditi samo iz formalnog opisa grafa. Zbog toga se u praksi obino koristi Hierholzerov algoritam, koji se moe posmatrati i kao randomizirana varijanta Fleuryjevog algoritma. Ovaj algoritam je mnogo jednostavniji za implementaciju i obino mnogo efikasniji od izvornog Fleuryjevog algoritma. Sutinska razlika izmeu ovog i izvornog Fleuryjevog algoritma je to se ovdje ne testira da li su grane mostovi, nego se u svakom koraku prosto bira nasumice izabrana grana koja vodi iz tekueg vora, a posljedice takve nepromiljenosti korigiraju se naknadno. Konkretnije, i ovdje ponovo polazimo iz proizvoljno izabranog vora grafa (recimo x1) i kreemo se du nasumino izabrane grane kojom se do tada nismo kretali, pri emu svaku granu du koje se kreemo dodajemo u spisak grana L1 (nasuminim izborom grana a ne izborom u nekom propisanom poretku smanjuje se vjerovatnoa da e biti izabrana grana koja predstavlja most grafa). Postupak se

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 10. (akademska godina 2011/12)

ponavlja sve dok ne doemo u vor iz kojeg vie ne izlazi niti jedna grana du koje se nismo kretali (ukoliko je graf zaista Eulerov, ovo se moe dogoditi jedino u voru iz kojeg smo zapoeli kretanje). Ukoliko se pri tome desi da L1 sadri sve grane, moemo rei da smo imali sree, jer se tada postupak zavrava, pri emu grane iz spiska L1, u redoslijedu upisivanja, ine traeni Eulerov ciklus. U sluaju da L1 ne sadri sve grane grafa, potraimo neki vor grafa (nazovimo ga x2) koji lei na putu L1, ali koji takoer lei i na nekoj grani koju L1 ne sadri. Tada, poev od vora x2 primjenjujemo isti postupak koristei samo grane koje se ne sadre u L1. Na taj nain dobijamo novi spisak grana L2. Sada, od dva spiska L1 i L2 pravimo novi spisak L12 tako to prvo redamo grane iz spiska L1 dok ne prepiemo granu koja se zavrava u voru x2, zatim prepiemo sve grane iz spiska L2, nakon ega prepiemo preostale grane iz L1. Ukoliko L12 sadri sve grane grafa, postupak je zavren. U suprotnom, postupak nastavljamo na identian nain, sve dok ne formiramo spisak koji zaista sadri sve grane grafa. Razmotrimo sada problem nalaenja otvorenog Eulerovog puta u grafu koji sadri takav put. Ve je reeno da takav graf mora imati tano dva vora neparnog stepena. Ukoliko bismo ta dva vora spojili jo jednom granom, dobili bismo Eulerov graf. Ako u tako dobijenom Eulerovom grafu naemo Eulerov ciklus i uklonimo novododanu granu, dobiemo upravo otvoreni Eulerov put. Prirodna generalizacija problema nalaenja Eulerovog ciklusa je tzv. kineski problem potara (ovaj naziv, koji se kod nas esto nespretno prevodi kao problem kineskog potara, potie od kineskog matematiara Kwana, koji ga je prvi razmatrao). U ovom problemu, koji se odnosi na teinske grafove, potar treba da proe kroz sve ulice nekog grada barem jedanput i da se vrati na mjesto odakle je poao, a da pri tome pree put minimalne duine. Formalno iskazano, trai se zatvoren put kroz graf koji prolazi barem jednom kroz svaku granu grafa za koji je suma teina svih grana od kojih se sastoji minimalna. Lako je pokazati da ukoliko graf sadri Eulerov ciklus, onda je upravo on traeno rjeenje. Zaista, kako se trai put koji prolazi barem jednom kroz svaku granu, suma teina e oito biti najmanja ako je mogue postii da se kroz svaku granu proe tano jedanput, a to je upravo sluaj ukoliko postoji Eulerov put. S druge strane, jasno je da problem kineskog potara sigurno ima rjeenje za svaki graf, bio on Eulerov ili ne. Stoga je ovaj problem generalizacija problema nalaenja Eulerovog ciklusa. Za njegovo rjeavanje u neusmjerenim i usmjerenim grafovima postoji relativno efikasan algoritam koji su dali Edmonds i Johnson, i koji zbog sloenosti neemo razmatrati (zainteresirani se upuuju na iru literaturu). Isti algoritam radi i za mjeovite grafove, tj. grafove koji nisu striktno niti usmjereni niti neusmjereni, ali za takve grafove efikasnost algoritma nije garantirana. Zapravo, garantirano efikasan postupak za rjeavanje problema kineskog potara za sluaj mjeovitih grafova do danas nije poznat. Za razliku od Eulerovog puta koji prolazi tano jedanput kroz sve grane grafa, Hamiltonov put je put koji prolazi tano jedanput kroz sve vorove grafa. Zatvoreni Hamiltonov put naziva se Hamiltonov ciklus (Hamiltonova kontura). Graf u kojem postoji Hamiltonov ciklus naziva se Hamiltonov graf. Inae, sam termin Hamiltonov put potie od zagonetke pod nazivom put oko svijeta koju je postavio W. R. Hamilton, u kojoj se traio put koji prolazi kroz svaki vrh pravilnog dodekaedra (pravilnog poliedra sa 12 stranica, ije su stranice pravilni petouglovi) tano jedanput. Kada se model dodekaedra projektira na ravan i dobijeni graf nacrta tako da mu se stranice ne preklapaju (to je uvijek mogue uraditi, jer se moe dokazati da su grafovi dobijeni projekcijom ma kojeg poliedra u ravan uvijek planarni), dobija se Hamiltonov graf prikazan na sljedeoj slici, na kojem je podebljanim linijama istaknut odgovarajui Hamiltonov ciklus (vorove smo indeksirali u rastuem poretku du Hamiltonovog ciklusa): x1 x20 x2 x3 x4 x12 x13 x14 x15 x11 x10 x9 x16 x5 x6 x19 x7 x8 x18 x17

10

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 10. (akademska godina 2011/12)

Mada na prvi pogled problemi nalaenja Eulerovog i Hamiltonovog puta djeluju veoma povezani, oni se drastino razlikuju sa aspekta sloenosti. Dok za nalaenje Eulerovog puta postoje jednostavni postupci, do danas nije poznat niti jedan efikasan algoritam za nalaenje Hamiltonovog puta, pri emu mnogi smatraju da efikasan algoritam za tu svrhu nikad i nee biti naen, jer zapravo uope ne postoji. tavie, u opem sluaju nije poznat nikakav efikasan algoritam ak ni za prosto testiranje da li graf uope sadri Hamiltonov put ili ne, bez obzira to smo vidjeli da je testiranje da li graf sadri Eulerov put ili ne praktino trivijalno. Najbri do sada poznati algoritmi za testiranje da li uope postoji Hamiltonov put u proizvoljnom grafu ujedno i pronalaze takav put ako on postoji, pri emu broj neophodnih operacija raste eksponencijalno sa porastom broja vorova. U sutini, takvi algoritmi nisu mnogo odmakli od traenja rjeenja grubom silom, odnosno testiranjem svih moguih varijanti (iji broj, naravno, drastino raste sa porastom veliine grafa). Efikasni algoritmi postoje samo za izvjesne specijalne kategorije grafova. Slinu smo situaciju imali i kod problema izomorfizma grafova. Ipak, izmeu ova dva problema postoji bitna razlika. Dok se za problem izomorfizma grafova vjeruje da bi za njegovo rjeavanje moda i mogao postojati efikasan algoritam, mnoge poznate injenice nagovjetavaju da efikasan algoritam za testiranje postojanja Hamiltonovog puta u opem sluaju uope nije mogue sastaviti, odnosno da takav algoritam uope ne postoji. Bez obzira to u opem sluaju testiranje da li je graf Hamiltonov ili ne nije mogue obaviti efikasno, postoje neki rezultati koji u nekim sluajevima daju odgovor na ovo pitanje. Jasno je da Hamiltonov graf mora imati barem tri vora, tako da emo u nastavku pretpostaviti da za broj vorova n razmatranog grafa vrijedi n 3. Razmotrimo prvo neke poznate rezultate za neusmjerene grafove. Diracova teorema tvrdi da je graf sigurno Hamiltonov ukoliko svaki vor ima stepen vei ili jednak od n / 2 (stoga je svaki kompletan graf sigurno Hamiltonov). Oreova teorema tvrdi da je graf sigurno Hamiltonov ukoliko je zbir stepena za svaka dva nesusjedna vora vei ili jednak od n. Psaina teorema tvrdi da je graf sigurno Hamiltonov ukoliko za svaku vrijednost k za koju je 1 k < (n 1) / 2 vrijedi da je broj vorova iji stepen ne prelazi k manji od k, uz dodatni uvjet da ukoliko je n neparan broj vorova iji stepen ne prelazi (n 1) / 2 nije vei od (n 1) / 2. Sve ove teoreme specijalan su sluaj Chvtalove teoreme. Za formulaciju ove teoreme, pretpostavimo da smo vorove sortirali u neopadajui poredak po njihovim stepenima, tj. da smo ih oznaili oznakama xi, i = 1 .. n pri emu je dG(x1) dG(x2) ... dG(xn). Chvtalova teorema tada tvrdi da je graf sigurno Hamiltonov ukoliko za sve vrijednosti indeksa i < n / 2 za koje je dG(xi) i slijedi da je dG(xni) n i. Poznat je i rezultat prema kojem je graf sa n vorova i m grana sigurno Hamiltonov ukoliko vrijedi m > (n 1) (n 2) / 2 + 1. to se tie usmjerenih grafova, Rdeiova teorema tvrdi da je usmjeren graf sigurno Hamiltonov ukoliko izmeu proizvoljna dva vora xi i xj postoji barem jedna od grana (xi, xj) ili (xj, xi). Meutim, svi navedeni uvjeti su samo dovoljni, odnosno graf moe biti Hamiltonov a da ne ispunjava niti jedan od navedenih uvjeta. Za neke tipove grafova se zna da sigurno nisu Hamiltonovi. Na primjer, bipartitivni graf sa neparnim brojem vorova ne moe biti Hamiltonov. Uvjeti koji bi bili potrebni i dovoljni da graf bude Hamiltonov, a koji bi se mogli efikasno testirati, nisu do danas poznati. Stoga je za testiranje da li je graf Hamiltonov ili ne esto potrebno koristiti razne ad hoc strategije, kao recimo u sljedeem primjeru. Primjer : Pokazati da graf sa sljedee slike nije Hamiltonov. x3 x4 x1 x2 x5 x6 x7 x9 x8 x10 x14 x15 x13 x16 x12 x11

Kod grafova manjih dimenzija, najbolje je prvo probati intuitivno potraiti eventualni Hamiltonov ciklus. Kako u ovom primjeru razna isprobavanja ne ukazuju na postojanje takvog ciklusa, to je povod da se pretpostavi da takav ciklus uope ne postoji. Meutim, tu pretpostavku treba i dokazati ukoliko elimo tvrditi da ovaj graf nije Hamiltonov, s obzirom da neuspjeh u traenju Hamiltonovog ciklusa nije nikakav dokaz o njegovom nepostojanju, osim ukoliko na neki nain ne moemo argumentirano

11

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 10. (akademska godina 2011/12)

garantirati da smo prilikom traganja zaista iscrpili sve mogunosti (kojih ima izuzetno mnogo ak i za ovaj relativno mali graf). Pokazaemo da za ovaj graf pretpostavka o postojanju Hamiltonovog ciklusa vodi u kontradikciju, to predstavlja siguran dokaz da graf nije Hamiltonov. Uoimo prvo da posmatrani graf ima 16 vorova i 27 grana. Kada bi u njemu postojao Hamiltonov ciklus, jasno je da bi on morao sadravati tano 16 grana (onoliko koliko ima vorova). Slijedi da bi se od ukupno 27 grana grafa tano 11 grana moralo nalaziti izvan Hamiltonovog ciklusa. Dalje, kada bi Hamiltonov ciklus postojao, jasno je da bi, od svih grana koje izlaze iz ma kojeg vora, tano dvije grane pripadale tom ciklusu, a ostale ne bi pripadale. Nakon ovog uvodnog razmatranja, pretpostavimo da Hamiltonov ciklus postoji i posmatrajmo vorove grafa obiljeene sa x1, x4, x6, x9, x11, x13 i x15. Iz vora x1 izlaze tri grane, od kojih dvije pripadaju Hamiltonovom ciklusu (za nastavak rezonovanja nije bitno to ne znamo koje su to dvije grane), a jedna ne pripada. Iz vora x4 izlazi pet grana, od kojih dvije pripadaju Hamiltonovom ciklusu, a tri ne pripadaju. Te tri grane sigurno se ne poklapaju sa onom granom izvan Hamiltonovog ciklusa koja izlazi iz vora x1, s obzirom da niti jedna grana ne povezuje vor x1 i x4. Dakle, do sada smo utvrdili da moraju postojati barem 4 grane izvan Hamiltonovog ciklusa. Slino, od 5 grana koje izlaze iz vora x6, tri grane nisu u Hamiltonovom ciklusu i sve su razliite od do sada prebrojanih grana izvan Hamiltonovog ciklusa, s obzirom da vor x6 nije spojen granom niti sa vorom x1, niti sa vorom x4. Slijedi da smo ve prebrojali da mora postojati 7 grana izvan Hamiltonovog ciklusa (nebitno je to ne znamo koje su to grane). Na isti nain, za vorove x9, x11 i x15 moemo ustanoviti postojanje po jedne nove grane izvan Hamiltonovog ciklusa, dok vor x13 daje jo tri nove grane izvan Hamiltonovog ciklusa. Sve u svemu, zakljuujemo da mora postojati barem 13 grana koje ne pripadaju Hamiltonovom ciklusu. Meutim, u uvodnom razmatranju smo zakljuili da ako Hamiltonov ciklus uope postoji, tada bi se tano 11 grana grafa moralo nalaziti izvan njega. Dakle, dobili smo kontradikciju, na osnovu koje moramo odbaciti pretpostavku o postojanju Hamiltonovog ciklusa. Drugim rijeima, posmatrani graf zaista nije Hamiltonov. Provedeno rezonovanje kojim smo zakljuili da graf iz prethodnog primjera nije Hamiltonov, moe se uspjeno primijeniti na veliki broj grafova koji nisu Hamiltonovi. To rezonovanje moe se formalizirati na sljedei nain. Neka graf ima n vorova i m grana. Pretpostavimo li da u grafu postoji Hamiltonov ciklus, tada mu mora pripadati tano n grana grafa, to ostavlja tano m n grana izvan Hamiltonovog ciklusa. Dalje, neka smo iz skupa vorova grafa izdvojili neki podskup S = {xi1, xi2, ..., xik} takav da nijedan par vorova iz S nije meusobno spojen granom. Ako stepen vora x S oznaimo sa d(x), tada iz svakog od vorova x S izlazi d(x) 2 grana koje ne pripadaju Hamiltonovom ciklusu, pri emu su sve te grane razliite. Slijedi da u razmatranom grafu mora postojati barem d(xi1) + d(xi2) + ... + d(xik) 2 k grana koje ne pripadaju Hamiltonovom ciklusu. Ukoliko je ovaj broj vei od m n, imamo kontradikciju. Dakle, graf sigurno nije Hamiltonov ukoliko vrijedi nejednakost d(xi1) + d(xi2) + ... + d(xik ) 2 k + m n. Pri tome mora biti jasno da neispunjenje ove nejednakosti nije nikakva garancija da je graf Hamiltonov. Za sluaj teinskih grafova u kojima postoji Hamiltonov ciklus, esto se postavlja pitanje pronalaenja onog Hamiltonovog ciklusa (s obzirom da ih moe biti vie) kod kojeg je suma teina grana koji ga ine minimalna. Ovaj problem je poznat pod imenom problem trgovakog putnika ili TSP problem (od engl. Traveling Salesman Problem). Neformalno iskazano, ovaj problem zahtijeva da se pronae put kojim se treba kretati trgovaki putnik tako da obie svaki grad tano jedanput, a da pri tome pree put najmanje duine. Jasno je da problem trgovakog putnika ne moe biti laki od prostog problema pronalaenja barem jedneog Hamiltonovog ciklusa, odakle slijedi da nisu poznati efikasni algoritmi za rjeavanje ovog problema u opem sluaju (trenutno, sva raspoloiva raunarska snaga na svijetu iskoritena zajedno nije dovoljna da se rijei problem trgovakog putnika za proizvoljan graf sa 300 vorova). Ipak, zbog svoje velike praktine vanosti, problem trgovakog putnika je vjerovatno jedan od najvie prouavanih problema teorije grafova. Kao rezultat velikih uloenih napora, postoje brojni algoritmi za rjeavanje ovog problema koji mogu biti efikasni za izvjesne specijalne klase grafova kao i brojni algoritmi koji za koje se ne garantira da pronalaze ba najbolje rjeenje, ali nalaze rjeenje koje je dovoljno dobro za praktine primjene. Zainteresirani se upuuju na brojnu iru literaturu koja razmatra ovu problematiku.

12

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 10. (akademska godina 2011/12)

Bojenje grafova
Neka je dat skup C ije emo elemente zvati boje. Pod bojenjem vorova grafa G = (X, R ) smatramo svaku funkciju koja svakom voru (tj. elementu iz X) dodjeljuje neki element skupa C (tj. neku boju), dok pod bojenjem grana podrazumijevamo svaku funkciju koja svakoj grani (tj. elementu iz R) dodjeljuje neki element skupa C. Bojenje vorova je ispravno ukoliko niti jedna grana ne spaja dva vora kojima je dodijeljen isti element iz C (tj. dva vora iste boje), dok je bojenje grana ispravno ukoliko se niti u jednom voru ne sastaju dvije grane kojima je dodijeljen isti element iz C (tj. dvije grane iste boje). Mnogi praktini problemi lako se mogu svesti na problem pronalaenja ispravnog bojenja vorova ili grana odgovarajuih grafova. Za graf kaemo da je k-obojiv ukoliko je mogue izvriti ispravno bojenje vorova pomou k boja (odnosno pomou skupa C koji sadri k elemenata). Pod hromatskim brojem grafa, u oznaci (G ), smatramo minimalni broj boja koje su potrebne za ispravno bojenje vorova grafa. Drugim rijeima, vrijedi (G ) = k ako i samo ako je graf k-obojiv, a nije (k1)-obojiv. Pod hromatskom klasom grafa, u oznaci (G ), smatramo minimalni broj boja koje su potrebne za ispravno bojenje grana grafa. Hromatska klasa grafa naziva se i ivino (bridno) hromatski broj grafa. Ponegdje se u literaturi hromatska klasa grafa naziva i hromatski indeks grafa, ali pojedini autori hromatskim indeksom nazivaju neto sasvim tree (broj boja kojima se mogu obojiti i vorovi i grane tako da i bojenje grana i bojenje vorova bude ispravno i da pored toga niti jedan vor nema istu boju kao grane koje se u njemu sastaju). Mada problem odreivanja hromatskog broja i hromatske klase grafa nije nimalo jednostavan, poznate su neke jednostavne procjene za ove veliine. Na prvom mjestu, jasno je da mora vrijediti 1 (G ) n. Pri tome su obje granice dostine. Naime, za grafove koji se sastoje samo od izoliranih vorova oito vrijedi (G ) = 1, dok za potpuni graf Kn vrijedi (G ) = n. Ove granice se mogu suziti. Recimo, kako graf ne moe imati manji hromatski broj nego ma koji njegov podgraf, to uvijek vrijedi (G ) (G ), gdje je G ma koji podgraf grafa G . Specijalno, ukoliko G sadri potpuni graf (kliku) Km kao svoj podgraf, tada imamo (G ) m. Gornju granicu za (G ) daje Brooksova teorema prema kojoj je (G ) + 1, gdje je = max {dG(x1), dG(x2), ..., dG(xn)} pri emu su dG(xi), i = 1 .. n stepeni vorova xi, i = 1 .. n. Pri tome, jednakost vrijedi samo za potpune grafove i pravilne grafove stepena 2 sa neparnim brojem vorova. Knigova teorema tvrdi da je (G ) = 2 ako i samo ako G ne sadri nijednu konturu sa neparnim brojem vorova odnosno, to je ekvivalentno tome, ako i samo ako je graf bipartitivan. Inae, grafovi za koje je (G ) = 2 nazivaju se bihromatski grafovi, tako da Knigova teorema zapravo tvrdi da bipartitivni i bihromatski grafovi predstavljaju istu klasu grafova. Postoje jo mnoge druge (i sloenije) procjene koje daju preciznije granice u kojima se moe kretati (G ) u ovisnosti od raznih parametara grafa. Meutim, u opem sluaju nije poznat (i vjeruje se da uope ne postoji) efikasan algoritam za odreivanje (G ), to nije nikakva rijetkost u teoriji grafova. to se tie hromatske klase grafa, za nju postoji vrlo dobra procjena poznata kao Vizingova teorema, koja kae da mora vrijediti ili (G ) = , ili (G ) = + 1. Meutim, veoma je neobino da iako znamo da jedna od ove dvije mogunosti mora vrijediti, nije poznat efikasan algoritam za utvrivanje koja od ove dvije mogunosti zaista vrijedi. Treba napomenuti da Vizingova teorema vrijedi samo za obine grafove, dok se za multigrafove dobija neto manje precizna procjena (G ) + , gdje je najvei meu brojevima grana koji u razmatranom multigrafu spajaju proizvoljna dva vora. Posebno je interesantan problem odreivanja hromatskog broja za planarne grafove. Relativno je lako dokazati da za planarne grafove sigurno vrijedi (G ) 5, tako da se dokaz te injenice nalazi gotovo u svakom ubeniku koji se bavi teorijom grafova. Meutim, prije vie od 100 godina je pretpostavljeno (bez dokaza) da za planarne grafove vrijedi (G ) 4. Ova pretpostavka bila je poznata pod nazivom hipoteza o etiri boje (ili problem etiri boje) koja je izvorno bila formulirana u obliku da su etiri boje uvijek dovoljne da se drave na politikoj geografskoj karti oboje tako da nikoje dvije susjedne drave nisu obojene istom bojom. Primijetimo da je ova formulacija zaista ekvivalentna tvrdnji da je (G ) 4 s obzirom da je svakoj politikoj geografskoj karti mogue pridruiti planarni graf u kojem vorovi odgovaraju dravama i u kojem grane spajaju susjedne drave. Hipotezu o etiri boje su nedavno (vie od 100 godina nakon to je postavljena) uspjeli dokazati K. Appel i W. Haken, ali na vrlo kontroverzan

13

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 10. (akademska godina 2011/12)

nain. Pisani dio dokaza se sastoji od preko 100 stranica teksta i u njemu je pokazano da je hipoteza tana ukoliko je tana za nekih 100000 podsluajeva (koji se dalje mogu razvrstati u 1955 kategorija), za koje se tanost moe provjeriti grubom silom (odnosno brutalnim traenjem ispravnog bojenja sa 4 boje). Ti podsluajevi zaista su testirani grubom silom uz pomo raunara, pri emu je utroeno oko 1200 sati raunarskog vremena i za svaki podsluaj pokazalo se da je zaista mogue ispravno bojenje sa 4 boje, ime je hipoteza o etiri boje konano potvrena. Nije zauujue da isti matematiari nisu nimalo zadovoljni ovakvim dokazom. Ipak, ak i takav dokaz neosporno potvruje da je hipoteza tana, ukoliko prihvatimo kao vjerodostojno da su programi koji su obavljali testiranje besprijekorno tani i da za vrijeme 1200 sati testiranja nije dolo ni do kakve nepredviene greke u raunarskim sistemima na kojima je obavljeno testiranje. Efikasni algoritmi za nalaenje ispravnog bojenja vorova koji garantiraju iskoritenje minimalnog broja boja nisu poznati (u suprotnom bi bili poznati i algoritmi za nalaenje hromatskog broja grafa). S druge strane, postoje vrlo jednostavni i efikasni algoritmi za nalaenje ispravnog bojenja vorova, koji ne garantiraju iskoritenje minimalnog broja boja. Recimo, u praksi se esto koristi sljedei pohlepni algoritam bojenja (engl. greedy coloring). Numeriramo sve vorove i boje prirodnim brojevima (vorove emo oznaiti sa xi, i = 1 .. n, a boje sa ci, i = 1 .. k gdje je k broj raspoloivih boja). vor x1 obojimo bojom c1, a zatim redom za sve vrijednosti i = 2 .. n vor xi bojimo u prvu po redu boju iz skupa boja C koja nije iskoritena za bojenje niti jednog od dotada obojenih vorova koji su susjedni voru xi. Ovaj postupak garantira nalaenje ispravnog bojenja, ali bez garancije da je upotrijebljeni broj boja minimalan. Zapravo, upotrijebljeni broj boja moe bitno ovisiti od redoslijeda kojim su numerirani vorovi. Naalost, mada u praksi ovaj algoritam esto daje dosta dobre rezultate, poznati su primjeri u kojima se on ponaa katastrofalno. Recimo, sasvim je lako konstruisati graf sa 2 n vorova koji je obojiv sa 2 boje, a za koje pohlepni algoritam uz lo izbor redoslijeda bojenja zahtijeva ak n boja. Primjer takvog grafa je tzv. krunasti graf (engl. crown graph) koji dobijamo tako to 2 n vorova rasporedimo u dva reda a zatim svaki vor iz gornjeg reda spojimo sa svakim vorom iz donjeg reda osim sa onim koji se nalazi neposredno ispod njega. Sljedea slika prikazuje primjer krunastog grafa za n = 6: x1 x3 x5 x7 x9 x11

x2

x4

x6

x8

x10

x12

Jasno je da je ovaj graf obojiv sa dvije boje, jer je bipartitivan. Zaista, jednom bojom moemo obojiti sve vorove u gornjem redu (tj. one sa neparnim indeksima), a drugom bojom sve vorove u donjem redu (sa parnim indeksima). Meutim, primijenimo li pohlepni algoritam bojenja u rastuem redoslijedu indeksa vorova, ustanoviemo da nam treba ak 6 boja (n u opem sluaju). Ovaj primjer pokazuje da redoslijed bojenja moe biti jako bitan. Interesantno je da uvijek postoji takav redoslijed bojenja za koje e pohlepni algoritam dati optimalno rjeenje, tj. rjeenje sa minimalnim brojem boja. Meutim, kako postoji n! moguih redoslijeda bojenja n vorova, jasno je da isprobavanje svih moguih redoslijeda bojenja nije mudar nain za nalaenje minimalnog bojenja. Predloena su brojna poboljanja pohlepnog algoritma bojenja sa ciljem da se pokuaju izbjei situacije u kojima ovaj algoritam daje veoma loe rjeenje. Jedna od najjednostavnijih izmjena pohlepnog algoritma, poznata pod nazivom Welsh-Powellov algoritam, bira vorove u rastuem poretku njihovih stepena (tj. broja grana koje iz njih izlaze). Takav postupak garantira da nikada nee biti upotrijebljeno vie od + 1 boja. Meutim, ovo nije ni od kakve koristi recimo za krunasti graf, jer kod njega svi vorovi imaju isti stepen n. Druga poznata izmjena ne specificira unaprijed redoslijed bojenja, nego se u svakom koraku za bojenje bira vor koji ima najvie do tada obojenih susjeda (odnosno neki od njih ako ih ima vie). Takva strategija recimo pronalazi optimalno bojenje sa 2 boje za krunasti graf, ali takoer ne mora voditi ka dobrom bojenju u svim sluajevima. Pored toga, poznati su i brojni algoritmi koji garantirano nalaze optimalno bojenje i koji rade prihvatljivo brzo za veliki broj grafova. Meutim, za svaki od tih algoritama mogue je konstruisati grafove za koje e njihovo vrijeme izvravanja biti takvo da algoritam postaje neupotrebljiv. Problem bojenja grafova je znaajan zbog brojnih primjena u praksi. Na primjer, neka je potrebno obaviti skupinu poslova, od kojih svaki zahtijeva recimo jedan dan. Poslovi se mogu obavljati u

14

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 10. (akademska godina 2011/12)

proizvoljnom redoslijedu, ali neki od poslova se ne mogu obavljati u istom danu, recimo zbog toga to svaki od njih zahtijeva ekskluzivnu upotrebu nekih resursa. Ukoliko sada formiramo graf iji vorovi odgovaraju poslovima dok ivice spajaju one i samo one vorove koji odgovaraju poslovima koji se ne mogu obavljati u isto vrijeme, tada hromatski broj grafa predstavlja minimalni broj dana koji je potreban da se zavre svi poslovi (boje vorova u tom sluaju predstavljaju pojedinane dane). Takoer, problem optimalne alokacije procesorskih registara pri mainskom prevoenju (kompajliranju) viih programskih jezika u mainski jezik, svodi se na problem bojenja vorova pogodno konstruisanih grafova. Stoga je problem bojenja vorova od velikog znaaja za projektante kompajlera za vie programske jezike. to se tie problema bojenja grana, njega je uvijek mogue svesti na problem bojenja vorova. Zaista, neka nam je dat neki graf. Ukoliko na osnovu njega konstruiemo novi graf kod kojeg svaki vor odgovara po jednoj grani polaznog grafa i u kojem su dva vora povezana granom ako i samo ako se odgovarajue grane polaznog grafa sastaju u istom voru (ovo je tzv. linijski graf polaznog grafa), lako se vidi da svako bojenje vorova novovobijenog grafa odgovara bojenju grana polaznog grafa. Bez obzira na to, poznati su i algoritmi koji direktno nalaze bojenja grana bez svoenja grafa na linijski graf. Za takve algoritme uglavnom vrijede iste napomene kao i za problem bojenja vorova.

Stabla, kosturi i pretraivanje grafa


Stablo smo ranije definirali kao neusmjereni povezani aciklini graf. Stabla imaju neke karakteristine osobine, koje su potrebne i dovoljne da bi neki graf bio stablo, tako da svaka od njih moe ravnopravno posluiti kao definicija stabla. Na primjer, povezan graf sa n vorova je stablo ako i samo ako sadri tano n 1 grana. Dalje, povezan graf je stablo ako i samo ako on prestaje biti povezan ako mu se ukloni ma koja grana (tj. ako mu je svaka grana most). Konano, graf je stablo ako i samo ako su mu svaka dva vora spojena tano jednim elementarnim putem. Svaki povezani neusmjereni graf uvijek ima barem jedan djelimini graf tipa stabla. Takvo stablo naziva se povezujue stablo (engl. spanning tree) ili kostur grafa. Ukoliko je poznat neki kostur grafa, on moe dobro posluiti za formiranje skupa tzv. nezavisnih kontura u grafu. Naime, za stablo je karakteristino da, iako ne sadri konture, dodavanjem ma koje grane koja povezuje dva nesusjedna vora obrazuje se tano jedna kontura. Stoga je, polazei od nekog kostura nekog grafa, mogue lako formirati skup kontura tog grafa, dodajui jednu po jednu granu grafa koja ne pripada izabranom kosturu. Tako obrazovane konture su oigledno nezavisne u smislu da svaka takva kontura sadri makar jednu granu koju ne sadri niti jedna druga kontura. Nalaenje skupa nezavisnih kontura nekog grafa ima veliku primjenu u teoriji elektrinih mrea. Broj kostura nekog grafa moe biti jako veliki. Cayleyeva teorema tvrdi da potpun graf Kn ima ukupno nn2 kostura. Broj kostura proizvoljnog grafa (ili, openitije, multigrafa) moe se utvrditi pomou Kirchhoff-Trentove teoreme (koju ponekad nazivaju i Binet-Cauchyjevom teoremom iako je ona zapravo posljedica istoimene poznate teoreme iz linearne algebre). Za tu svrhu uvedimo matricu valencije D koja predstavlja dijagonalnu matricu u kojoj se na dijagonali nalaze stepeni vorova grafa (ostali elementi su nule) i matricu admitancije L, koja se definira kao razlika matrice valencije D i matrice susjedstva (adjacencije) A, odnosno L = D A (naziv matrica admitancije potie iz teorije elektrinih mrea, preciznije iz interpretacije ove matrice pri upotrebi metoda potencijala vorova za rjeavanje elektrinih mrea). Traeni broj kostura grafa tada je jednak apsolutnoj vrijednosti determinante matrice L koja nastaje tako to iz matrice L uklonimo proizvoljan red i proizvoljnu kolonu (pokazuje se da sve takve matrice imaju istu apsolutnu vrijednost determinante). Od praktinog je interesa nai postupak za pronalaenje makar jednog kostura grafa. Jedan intuitivan, ali ne i efikasan postupak (sa aspekta raunarske implementacije) je sistematsko uklanjanje grana koje formiraju konture. Naime, ukoliko pronaemo neku konturu u grafu, uklonimo jednu od grana koje obrazuju konturu. Novodobijeni graf je i dalje povezan. Ukoliko takav graf ponovo sadri konturu, uklonimo jednu od grana u toj konturi i ponavljamo postupak sve dok ne doemo do grafa koji vie ne sadri niti jednu konturu, koji nije nita drugo nego traeni kostur. Nevolja je to je, sa aspekta implementacije, problem pronalaenja konture u grafu tei problem od samog problema pronalaenja kostura. Za praktino nalaenje kostura grafa znatno su bolji metodi koji su zasnovani na

15

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 10. (akademska godina 2011/12)

sistematinom pretraivanju vorova grafa, odnosno sistematinim postupcima za prolazak kroz sve vorove grafa kreui se samo du grana grafa. Dva najpoznatija takva postupka su pretraga grafa po irini odnosno BFS pretraga (od engl. Breadth First Search) i pretraga grafa po dubini odnosno DFS pretraga (od engl. Depth First Search). Kod BFS pretrage, kreemo od proizvoljnog vora grafa, koji oznaimo sa 0. Sve njegove susjede oznaimo sa 1, dok grane koje spajaju poetni vor sa njegovim susjedima oznaimo kao grane koje tvore kostur. U sljedeoj iteraciji, kreemo od vorova koji su oznaeni sa 1, njihove susjede koji nisu bili ranije oznaeni oznaimo sa 2 i sve grane koje spajaju vorove oznaene sa 1 i 2 oznaimo kao grane koje tvore kostur (pri tome emo svaki vor oznaen sa 2 spojiti tano sa jednim vorom koji je oznaen sa 1 nebitno kojim ako takvih vorova ima vie). Ovaj postupak nastavljamo dalje tako da u i-toj iteraciji sve susjede vorova oznaenih sa i koji nisu bili ranije oznaeni oznaimo sa i+1 i sve grane koje spajaju vorove oznaene sa i i i+1 oznaimo kao grane koje tvore kostur. Postupak se prekida kada dalje obiljeavanje vie nije mogue. Primijetimo da oznake dodijeljene pojedinim vorovima ujedno predstavljaju najkrae udaljenosti pojedinih vorova od startnog vora, tako da je ovaj postupak pogodan u sluaju da treba nai najkrai put od poetnog vora do nekog zadanog vora (za neteinski graf). Sljedea slika prikazuje postupak BFS pretrage i konstrukcije odgovarajueg kostura na jednom grafu koji je uzet kao primjer, pri emu je vor x1 izabran kao poetni vor. Dobijeni kostur ine grane koje su na slici prikazane podebljano. Na slici su prikazane i odgovarajue oznake koje su dodijeljene vorovima u toku postupka. Napomenimo da tok postupka moe bitno ovisiti od redoslijeda kojim se obrauju susjedni neoznaeni vorovi u svakoj iteraciji. U ovom primjeru je usvojeno da se vorovi obrauju u rastuem poretku indeksa, tako da je redoslijed posjeivanja vorova redom x1, x3, x4, x2, x5, x6, x7, x8, x9, x10, x11, x12 i, konano, x13: x2 x1 x3 2 0 x4 1 x5 x6 1 2 2 x7 x8 x10 x9 3 2 2 3 4 4 x13 Primijetimo da je, nakon to je formiran kostur, veoma lako pronai najkrai put od poetnog vora (tj. vora koji je oznaen kao poetni) do proizvoljnog vora u grafu. Neka je, na primjer, potrebno nai najkrai put od vora x1 do vora x12. Za tu svrhu potrebno je poi unazad, od vora x12. On je oznaen sa 4, i vezan je sa tano jednim vorom oznaenim sa 3, a to je vor x9. Dalje, on je vezan sa tano jednim vorom oznaenim sa 2, a to je vor x5, koji je vezan sa tano jednim vorom oznaenim sa 1, a to je vor x3, koji je vezan sa poetnim vorom x1 (koji je oznaen sa 0). Obrnemo li ovaj slijed, dobijamo da traeni put glasi x1 x3 x5 x9 x12. Kod DFS pretrage, takoer kreemo od proizvoljnog vora grafa, koji oznaavamo sa 0. Od tog vora se kreemo dalje ka proizvoljnom voru, koji oznaavamo oznakom 1, dok granu koja ih spaja oznaavamo kao granu koja ini kostur. U svakom koraku, trudimo se da nastavljamo dalje prema bilo kojem neoznaenom voru, pri emu svaku granu du koje se kreemo oznaavamo kao granu koja ini kostur, a svaki vor u koji smo doli obiljeavamo sa oznakom koja je za jedinicu vea od oznake vora iz kojeg smo krenuli. Postupak nastavljamo sve dok ne doemo do vora iz kojeg dalje ne vodi niti jedna grana ka nekom neoznaenom voru. U tom sluaju, vraamo se nazad du puta kojim smo doli do prvog vora iz kojeg postoji grana koja vodi ka nekom neoznaenom voru. Tada nastavljamo du te grane, dok ponovo ne doemo do vora iz kojeg nije mogue dalje kretanje prema nekom neoznaenom voru. Postupak se ponavlja dok ne iscrpimo svaku dalju mogunost kretanja. Na sljedeoj slici je prikazan postupak DFS pretrage i konstrukcije odgovarajueg kostura na istom grafu kao i u prethodnom primjeru, uz isti poetni vor. Kod DFS pretrage tok postupka ovisi od izbora ka kojem emo se voru kretati ukoliko postoji vie neoznaenih susjeda nekog vora. Ukoliko x11 3 x12

16

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 10. (akademska godina 2011/12)

usvojimo da se uvijek kreemo ka voru sa najmanjim indeksom, redoslijed posjeivanja vorova bie redom x1, x3, x2, x5, x4, x7, x8, x9, x6, x10, x12, x13 i, konano, x11. Primijetimo da kod DFS pretrage, oznake pridruene vorovima ne predstavljaju najkrae udaljenosti vora od poetnog vora, ve samo udaljenosti du puteva koji pripadaju kosturu koji je konstruiran prilikom pretrage. x1 x4 3 x7 4 x11 6 x8 5 x12 7 0 x5 2 x9 6 8 x13 x3 1 7 8 x6 x10 2 x2

Ovdje su opisane samo osnovne ideje na kojima se zasnivaju BFS i DFS pretraga. Prilikom konkretne implementacije ovih algoritama na raunaru, potrebno je obratiti panju na nekoliko detalja da bi implementacija bila efikasna. Kod BFS algoritma, dobro je u nekoj odgovarajuoj strukturi podataka (recimo, listi) uvati evidenciju o svim vorovima koji su oznaeni odreenom oznakom, da ne bismo gubili vrijeme na pretraivanje svih vorova samo da bismo nali vor koji je oznaen oznakom koja nam treba. Zapravo, nije teko vidjeti da je u svakoj (i-toj) iteraciji dovoljno uvati samo evidenciju o vorovima koji su oznaeni sa i (vorovi koje trenutno obraujemo) i vorovima koji su oznaeni sa i+1 (vorovi koje upravo obiljeavamo). Kod DFS pretrage, dobro je voditi evidenciju o svim vorovima na koje smo nailazili a iz kojih je mogue grananje u nekom drugom smjeru u odnosu na smjer koji smo izabrali, kao i evidenciju o susjedima tih vorova, da bismo manje vremena gubili na traenje kuda da nastavimo pretragu u sluaju kada doemo do vora iz kojeg nije mogue dalje kretanje prema neoznaenim vorovima (idealna struktura podataka za ovu svrhu je stek). U sutini, DFS pretraga se najlake implementira rekurzivno (implementacija je gotovo trivijalna), dok je za BFS pretragu znatno pogodnija iterativna (nerekurzivna) implementacija. Vie detalja mogue je pronai u bilo kojoj knjizi koja je posveena raunarskim algoritmima. Treba napomenuti da se BFS i DFS pretraga mogu izvesti i bez obiljeavanja brojevima kao to je prikazano, nego je dovoljno samo voditi evidenciju da li je vor bio posjeen ili ne. Meutim, iz brojki kojima su obiljeeni vorovi mogu se izvui mnoge korisne informacije, na kojima se zasnivaju brojni algoritmi u ijoj osnovi lei BFS ili DFS pretraga. Recimo, Tarjanov algoritam za testiranje planarnosti grafa, mada vrlo sloen, u osnovi se zasniva na DFS pretrazi. Veoma je bitno istai da se DFS pretraga moe lako obaviti kreui se iskljuivo du grana grafa, tj. prelazei iz nekog vora iskljuivo u njemu susjedni vor. To kretanje moe biti unaprijed, tj. prema jo nerazmatranim vorovima, ili unazad, kad se vraamo u ve razmotrene vorove u potrazi za skretanjima koja jo nismo istraili. To omoguava jednostavnu implementaciju DFS pretrage za subjekte koji se na neki nain nalaze unutar grafa. Recimo, ukoliko graf modelira neki lavirint (pri emu vorovi modeliraju raskra a grane puteve u lavirintu), robot koji se nalazi u lavirintu mogao bi jednostavno koristiti DFS pretragu da sistematino obie itav lavirint, recimo sa ciljem da pronae neki skriveni predmet ili izlaz iz lavirinta. Pri tome, robot uope ne mora poznavati opis grafa (tj. mapu lavirinta) nego je dovoljno samo da posjeduje neki nain oznaavanja ve posjeenih vorova (recimo, ostavljanje mrvica kao u bajci Ivica i Marica). Tako bi, za graf iz prethodnog primjera, mogua putanja robota koji treba obii itav lavirint i vratiti se u poetni vor dobijena na osnovu DFS pretrage mogla glasiti ovako (podebljano su prikazani vorovi koje posjeujemo prvi put): x1 x3 x2 x3 x5 x4 x7 x8 x9 x6 x10 x6 x9 x12 x13 x12 x9 x8 x11 x8 x7 x4 x5 x3 x1 Pri tome je pretpostavljeno da robot na neki nain vidi stanje susjednih vorova (tj. da li su posjeeni ili ne), tako da, recimo, nema potrebe da se kree iz vora x4 nazad u vor x1 samo da utvrdi da je on ve posjeen. Alternativno, moemo pretpostaviti da graf modelira raunarsku mreu (vorovi modeliraju raunare a grane veze izmeu njih). Tada inteligentni program-agent moe koristiti DFS

17

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 10. (akademska godina 2011/12)

pretragu da obie sve raunare u mrei sa ciljem prikupljanja odreenih informacija (takve stvari rade svi Internet pretraivai). DFS pretraga je ovdje pogodna s obzirom da program-agent moe kopirati sam sebe (zajedno sa dotada prikupljenim informacijama) samo na raunar koji je neposredni susjed raunara na kojem se trenutno nalazi. Opisano svojstvo DFS pretrage ne postoji kod BFS pretrage. Naime, u toku BFS pretrage esto dolazi do skakanja iz nekog vora u neki drugi vor koji mu uope nije blizak (jedino mu je zajedniko da se nalazi na istoj udaljenosti) od poetnog vora. Stoga esto prelazak iz nekog vora u naredni vor du grana grafa nije mogu bez velikog vraanja unazad (esto ak sve do poetnog vora) i kretanja kroz druge ogranke do tada izgraenog kostura. Ovo bi dovelo do brojnih suvinih kretanja naprijednazad. Recimo, ukoliko bi robot iz prethodnog primjera ili inteligentni program-agent umjesto DFS pretrage koristili BFS pretragu, njihova trasa kretanja bi vjerovatno izgledala poput sljedee: x1 x3 x 1 x4 x 1 x 3 x2 x 3 x5 x 3 x6 x 3 x 1 x 4 x7 x4 x8 x4 x1 x3 x5 x9 x5 x3 x6 x10 x6 x3 x1 x4 x8 x11 x8 x4 x1 x3 x5 x9 x12 x9 x13 x9 x5 x3 x1 Primjeuje se osjetno poveanje broja koraka u odnosu na DFS pretragu. U ekstremnim sluajevima, ovaj broj moe porasti ak eksponencijalno. Takoer, broj informacija koje treba uvati u vorovima da bi se izbjeglo lutanje vei je nego kod DFS pretrage. Meutim, sve ovo vrijedi samo u sluaju da smo ogranieni na kretanja iskljuivo du grana grafa. Stoga BFS pretraga nije praktina kod subjekata koji su ogranieni iskljuivo na takva kretanja (tj. kod subjekata koji se na neki nain nalaze unutar grafa), kao ni kod subjekata koji nisu u stanju da odjednom vide itav graf (sa ciljem ustanovljavanja koji je sljedei vor koji treba razmatrati) nego samo bliu okolicu mjesta na kojem se trenutno nalaze. Ipak, treba napomenuti da i kod takvih subjekata postoje situacije kada se mora koristiti BFS pretraga. Recimo, ukoliko robot koji se nalazi u lavirintu ne treba samo izai iz lavirinta, nego treba otkriti i najkrai put koji vodi od poetnog mjesta do izlaza, za tu svrhu mora koristiti iskljuivo BFS pretragu (neto kasnije emo vidjeti da tzv. Bellman-Fordov algoritam za neke vrste subjekata koji se nalaze unutar grafa, poput rutera u raunarskim mreama, nudi znatno efikasniji nain za rjeavanje istog problema).

Neke primjene BFS i DFS pretrage


Navedimo neke konkretne primjene BFS i DFS pretrage. Ve smo vidjeli da BFS pretraga moe posluiti za nalaenje najkraeg puta izmeu proizvoljna dva vora u grafu. Pored ove primjene, jedna od najvie koritenjih primjena BFS pretrage je testiranje da li je graf bipartitivan i ukoliko jeste, za nalaenje njegove biparticije. Naime, veoma je lako zakljuiti da je graf bipartitivan ako i samo ako u toku izvoenja BFS pretrage nikada pri razmatranju susjeda nekog vora ne naiemo na ranije obiljeeni vor koji je obiljeen oznakom iste parnosti kao i razmatrani vor (tj. obje oznake su parne ili su obje neparne). Na primjer, graf iz primjera na kojem smo ilustrirali BFS pretragu nije bipartitivan. Zaista, kada razmatramo susjede vora x8, koji smo obiljeili oznakom 2, nailazimo na ranije obiljeeni vor x7 koji je obiljeen oznakom iste parnosti (takoer 2). Ukoliko se ustanovi da graf jeste bipartitivan, njegovu biparticiju moemo pronai tako to emo u skup X1 staviti vorove oznaene parnim oznakama, a u skup X2 vorove oznaene neparnim oznakama (ili obrnuto). tavie, s obzirom da za testiranje bipartitivnosti i nalaenje biparticija konkretne oznake vorova nisu bitne nego je bitna samo njihova parnost, mogue je oznaavanje vriti samo sa dvije vrste simbola (recimo P i N za parno i neparno). Na taj nain moe se utediti na memoriji pri raunarskoj implementaciji, to moe biti znaajno u sluaju velikih grafova i limitiranih memorijskih resursa. Treba jo istai da se BFS pretraga koristi i kao pomoni algoritam (potprogram) u okviru nekih sloenijih algoritama, koje emo opisivati neto kasnije. Za testiranje da li graf sadri konturu ili ne, moe posluiti bilo BFS bilo DFS pretraga. Zaista, oigledno je da graf sadri konturu ako i samo ako se u postupku BFS ili DFS pretrage naie na vor koji je prethodno ve bio oznaen. Nije na odmet napomenuti da su svi postupci koji se sutinski oslanjaju samo na BFS ili DFS pretragu vrlo efikasni sa aspekta vremena izvravanja, s obzirom da vrijeme izvravanja obje pretrage zavisi linearno od broja grana.

18

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 10. (akademska godina 2011/12)

DFS i BFS pretraga mogu se takoer lijepo iskoristiti za rjeavanje problema vezanih za pitanje povezanosti grafova. Recimo, obje pretrage mogu posluiti za testiranje da li je graf povezan i za nalaenje njegovih komponenti povezanosti u sluaju da nije. Zaista, izaberimo proizvoljan vor grafa i primijenimo bilo BFS ili DFS pretragu. Ukoliko je graf povezan, na kraju pretrage svi njegovi vorovi moraju biti oznaeni. Ukoliko to nije sluaj, graf nije povezan, a svi oznaeni vorovi predstavljaju jednu komponentu povezanosti. Sada moemo isti postupak ponoviti od proizvoljnog neoznaenog vora, nakon ega emo identificirati novu komponentu povezanosti razliitu od prethodno naene. Postupak moemo ponavljati dok ne iscrpimo sve vorove, ime emo sigurno nai sve komponente povezanosti. Naravno, posve je lako na opisani nain rjeavati i mnoge druge probleme koji se svode na problem povezanosti. Recimo, ukoliko je potrebno utvrditi da li neka grana predstavlja most ili ne, dovoljno je da testiramo da li se broj komponenti povezanosti grafa poveava kada uklonimo tu granu ili ne (to se lako moe izvriti u jednom prolazu, bez da se itav postupak ponavlja dvaput, sa i bez razmatrane grane). Pokaimo sada kako se DFS pretraga moe primijeniti na problem nalaenja artikulacionih vorova u grafu. Neka smo DFS pretragom nali jedan kostur grafa (koji poinje, recimo, iz vora x1) uz odgovarajue oznaavanje vorova koje slijedi iz pretrage. Lako je vidjeti da je vor x1 artikulacioni vor ako i samo ako iz njega izlazi vie grana naenog kostura (ovo ne vrijedi za BFS pretragu). Stoga, ukoliko je potrebno ispitati samo da li je jedan zadani vor artikulacioni vor, dovoljno je primijeniti DFS pretragu sa tim vorom kao poetnim vorom. Meutim, ukoliko je potrebno nai sve artikulacione vorove u grafu, nije isplatno ponavljati ovaj test posebno za svaki vor u grafu, jer bi to vodilo ka prilino neefikasnom algoritmu. Stoga je veoma zanimljiva injenica da je iz samo jednog prolaza kroz DFS postupak (polazei od proizvoljnog vora) mogue odrediti sve artikulacione vorove, tako da je sve artikulacione vorove nekog grafa mogue nai u vremenu koje linearno ovisi o broju grana u grafu. Da bismo ovo pokazali, potrebno je prvo uvesti nekoliko pomonih pojmova. Za neki vor xj emo rei da je dijete vora xi ukoliko su xi i xj spojeni granom iz kostura, pri emu xj ima veu oznaku od vora xi. Isto tako, za vor xj emo rei da je potomak vora xi ako je xj ili dijete vora xi, ili potomak djeteta vora xi (ova definicija je rekurzivna). Na primjer, djeca vora x8 su vorovi x9 i x11, dok su njegovi potomci x9, x11, x12, x13, x6 i x10. Sada nije teko pokazati da je neki vor xi, i 1 artikulacioni vor ako i samo ako barem jedno od njegove djece niti je spojeno nekom granom izvan kostura sa nekim vorom koji ima oznaku manju od oznake vora xi, niti ima nekog potomka koji je spojen nekom granom izvan kostura sa nekim vorom koji ima oznaku manju od oznake vora xi. Na primjer, vor x8 jeste artikulacioni vor, s obzirom da njegovo dijete x11 niti je spojeno granom izvan kostura sa nekim vorom sa oznakom manjom od 5, niti ima nekog potomka koji je spojen na takav nain (vor x11 zapravo uope nema potomaka). vor x9 je takoer artikulacion vor, s obzirom da njegovo dijete x12 ispunjava traene uvjete. Nije teko utvrditi da su vorovi x3 i x6 takoer artikulacioni vorovi. S druge strane, vor x4 nije artikulacioni vor, jer njegovo dijete x7 ima potomka x9 koji je granom spojen sa vorom x5 koji ima manju oznaku od vora x4. Zapravo, nijedan vor osim ve naenih artikulacionih vorova nije artikulacioni vor. Ukoliko se tokom izgradnje kostura DFS postupkom uporedo auriraju jo neke pomone informacije o vorovima, poput informacije o voru sa najmanjim brojem sa kojim je posmatrani vor spojen granom izvan stabla, detekcija koji vorovi predstavljaju artikulacione vorove a koji ne moe se obaviti vrlo efikasno uporedo sa samom izgradnjom kostura. Jednostavna modifikacija opisanog postupka za nalaenje svih artikulacionih vorova u grafu vodi ka postupku za nalaenje svih mostova u grafu u jednom prolazu. Ovaj postupak, koji ovdje neemo opisivati, poznat je kao Tarjanov algoritam, to i nije najsretnije ime, s obzirom da je Tarjan autor velikog broja raznovrsnih algoritama u teoriji grafova (meu koje spada i veoma efikasan algoritam za testiranje planarnosti grafa). Vjetijem itatelju ili itateljki nee biti prevelik problem da sami otkriju u emu se sastoji ovaj postupak. Meutim, mnogo je interesantnije da se neto drugaijom ali i dalje relativno jednostavnom modifikacijom opisanog postupka za nalaenje artikulacionih vorova moe kreirati veoma efikasan algoritam za pronalaenje komponenti jake povezanosti u usmjerenim grafovima (ovaj algoritam je takoer otkrio Tarjan). Ta injenica predstavljala je svojevremeno veliko iznenaenje, s obzirom da do tada nije bio poznat efikasan algoritam za nalaenje komponenti jake povezanosti, bez obzira na injenicu da je mnogo ljudi tragalo za takvim algoritmom. To samo pokazuje da DFS pretraga, kada se dobro iskoristi, moe biti osnova za mnoge veoma korisne algoritme (inae, DFS pretraga se moe iskoristiti za vie razliitih primjena u odnosu na BFS

19

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 10. (akademska godina 2011/12)

pretragu). Sam algoritam za nalaenje komponenti jake povezanosti ovdje neemo opisivati, jer je donekle teak za objasniti, mada je posve jednostavan za implementaciju. Opisaemo sada jo jednu vanu primjenu DFS pretrage. Za tu svrhu potrebno je prvo uvesti nekoliko novih pojmova. Neka je dat neki usmjereni aciklini graf, ili kratko, dag. Pod topolokim sortiranjem nekog daga sa n vorova smatramo takvu numeraciju vorova grafa brojevima od 1 do n kod koje je svakom voru pridruen broj koji je vei od brojeva svih vorova koji mu prethode (vor xi prethodi voru xj ako postoji put od vora xi do vora xj). Na primjer, ukoliko vorovi nekog daga modeliraju neke aktivnosti pri emu grana izmeu vorova xi i xj oznaava da aktivnost xi mora biti zavrena prije aktivnosti xj, topoloko sortiranje odreuje redoslijed prema kojem treba obavljati aktivnosti (jednu po jednu) da bi se obavile sve aktivnosti. S druge strane, pod inverznim topolokim sortiranjem smatramo numeraciju vorova daga brojevima od 1 do n kod kojeg je svakom voru pridruen broj koji je vei od brojeva svih vorova koji slijede iza njega. Inverzno topoloko sortiranje se poklapa sa topolokim sortiranjem grafa kod kojeg su sve grane obrnuto usmjerene od grana razmatranog grafa. Jasno je da topoloko i inverzno topoloko sortiranje ne mogu postojati u grafovima koji sadre cikluse i da ne moraju biti jedinstveni. Sljedea slika prikazuje jedan dag iji su vorovi numerirani u skladu sa jednim od vie moguih topolokih (lijevo) odnosno inverznih topolokih (desno) sortiranja. 5 6
12 11 10 13 7 8

9 8 5
4

13

10

2 3 4 3
12 11

Zbog brojnih primjena topolokog i inverznog topolokog sortiranja u praksi, od velikog je praktinog znaaja nai algoritme za njihovo nalaenje. Meutim, za inverzno topoloko sortiranje odmah nam je na raspolaganju jednostavan i efikasan algoritam DFS pretraga! Zaista, ukoliko primijenimo DFS pretragu na dag i ukoliko redom rastuim brojevima numeriramo svaki vor na koji naiemo iz kojeg nije mogue dalje grananje (tj. vor iz kojeg se moramo vraati unazad), dobijamo upravo inverzno topoloko sortiranje. Sljedea slika prikazuje primjer primjene DFS postupka na nalaenje inverznog topolokog sortiranja za dag iz prethodnog primjera. Treba voditi rauna da zbog usmjerenosti daga, neemo uvijek moi u jednom prolazu obii sve vorove, nego emo morati DFS postupak ponoviti od nekog vora koji u prethodnom prolazu nije obiljeen (tako da neemo uvijek dobiti kostur, tj. povezujue stablo, nego povezujuu umu). Tako, u navedenom primjeru, nakon to iscrpimo pretragu svih vorova poev od vora u gornjem lijevom uglu (oznaenom sa 9 na slici), pretragu moramo ponoviti od nekog vora koji nije bio posjeen (u primjeru na slici, to je vor oznaen sa 13). 9 8 5
1 4 13 10 7 6

2 3
12 11

S obzirom na injenicu da se topoloko sortiranje nekog grafa moe dobiti inverznim topolokim sortiranjem grafa koji se dobija promjenom orjentacija svih grana polaznog grafa, jasno je da je ovim ujedno naen i algoritam za nalaenje topolokog sortiranja.

20

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 11. (akademska godina 2011/12)

Predavanje 11
Minimalni kostur (minimalno povezujue stablo)
U sluaju teinskih grafova, od velikog je praktinog interesa nai ne bilo koji kostur grafa, nego onaj kostur za koji je zbir teina grana koje ga sainjavaju to je god mogue manji. Takav kostur naziva se minimalni kostur odnosno minimalno povezujue stablo (engl. minimal spanning tree). Na primjer, ukoliko grafom modeliramo neku prenosnu mreu (telekomunikacionu, elektrodistributivnu, itd.) kod koje vorovi modeliraju objekte koje treba povezati a grane kablove za vezu, pri emu teine grana odgovaraju duinama kablova, tada minimalni kostur odgovara kablovskoj vezi koja garantira meusobnu povezanost svih objekata uz minimalan utroak kablova. S obzirom da broj kostura nekog grafa moe biti ogroman, jasno je da nije mudro generirati sve kosture i meu njima odabrati onaj sa minimalnim zbirom teina grana. Sreom, problem nalaenja minimalnog kostura predstavlja jedan od problema za koje postoje vrlo efikasni algoritmi. Pored toga, ti algoritmi su i konceptualno veoma jednostavni, mada su prilikom njihove implementacije na raunaru potrebne izvjesne dosjetke ukoliko elimo postii maksimalnu efikasnost sa aspekta brzine izvravanja. Problem minimalnog kostura razmatra se samo za sluaj neusmjerenih grafova, tako da emo u ovom odjeljku pretpostaviti da su svi grafovi koje razmatramo neusmjereni. Opisaemo prvo Kruskalov algoritam za nalaenje minimalnog kostura. U osnovi, ovaj algoritam je izuzetno jednostavan. U prvoj iteraciji, uzimamo granu sa najmanjom teinom (ili bilo koju od njih ukoliko takvih ima vie). U svakoj narednoj iteraciji, uzimamo granu sa najmanjom teinom od onih grana koje nisu do tada uzete, pod uvjetom da ta grana ne obrazuje ciklus sa do tada uzetim granama. Postupak se ponavlja sve dok se ne obrazuje kostur, a to e se desiti nakon n 1 iteracija pri emu je n broj vorova, s obzirom da svako stablo sa n vorova ima tano n 1 grana. Lako je dokazati da opisani pohlepni postupak zaista dovodi do minimalnog kostura (bez obzira to pohlepni postupci u teoriji algoritama obino ne vode ka optimalnim rjeenjima). U sluaju kada postoji vie grana sa istim teinama, rjeenje ne mora nuno biti jedinstveno (pri emu je jasno da e, u sluaju kada rjeenje nije jedinstveno, svako od dobijenih rjeenja imati isti zbir teina grana). Ilustrirajmo ovaj algoritam na primjeru grafa sa sljedeoj slici: x2 x3 x1 10 2 2 x4
2 8 6 3 3 3 5 3 x7 1 2 10 9 4 1 9

x5
1

x6
2

x8
5

6 2

x9

x10

x11

x12

U ovom grafu postoje tri grane sa teinom 1: to su grane {x3, x7}, {x5, x9} i {x11, x12}. U prvoj iteraciji uzimamo jednu od njih, recimo granu {x3, x7}, a u naredne dvije iteracije uzeemo svakako i grane {x5, x9} i {x11, x12}, jer niti jedna ne obrazuje konturu sa do tada uzetim konturama (bilo kojim redoslijedom da ih uzimamo). Ovim smo iscrpili sve grane sa teinom 1. Grane sa teinom 2 su {x1, x5}, {x2, x3}, {x3, x4}, {x4, x7}, {x6, x10} i {x10, x11}. Pokuajmo uzimati grane upravo tim redom. Grane {x1, x5}, {x2, x3} i {x3, x4} smijemo uzeti, nakon ega imamo situaciju kao na sljedeoj slici (uzete grane su oznaene podebljano): x1
2 10 8 6 3 3

x2
3

2 5

x3
1

2 2 10

x4
9

x5
1

3 x7

x6
2

x8
5

6 2

4 1

x9

x10
1

x11

x12

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 11. (akademska godina 2011/12)

U ovom trenutku je jasno da granu {x4, x7} ne smijemo uzeti (nakon to smo prethodno uzeli sve navedene grane), jer bi ona obrazovala konturu sa granama {x3, x4} i {x3, x7}. Nakon toga nema nikakvih prepreka za uzimanje grana {x6, x10} i {x10, x11}. Slijede grane {x2, x6}, {x5, x10} i {x9, x10} sa teinom 3. Pri izboru grana tim redom, nakon to uzmemo grane {x2, x6} i {x5, x10} koje smijemo uzeti, imamo situaciju prikazanu na sljedeoj slici: x2 x3 x1 10 2 2 x4
2 8 6 3 3 3 5 3 x7 1 2 10 9 4 1 9

x5
1

x6
2

x8
5

6 2

x9

x10

x11

x12

Granu {x9, x10} ne smijemo uzeti, jer bi obrazovala konturu sa prethodno uzetim granama {x5, x9} i {x5, x10}. Slijedi grana {x7, x12} duine 4 koju takoer ne smijemo uzeti, s obzirom da obrazuje konturu sa prethodno uzetim granama {x2, x3}, {x2, x6}, {x3, x7}, {x6, x10}, {x10, x11} i {x11, x12}. Dalje imamo dvije grane duine 5, od kojih granu {x3, x6} ne smijemo uzeti jer obrazuje konturu sa granama {x2, x3} i {x2, x6}, dok granu {x8, x12} moemo slobodno uzeti. Ovim je formiranje minimalnog kostura kompletirano, kao to je prikazano na sljedeoj slici (pri drugaijem redoslijedu izbora grana izmeu grana jednake teine, mogu se dobiti i drugaija rjeenja od rjeenja koje smo ovdje dobili): x2 x3 x1 10 2 2 x4
2 8 6 3 3 3 5 3 x7 1 2 10 9 4 1 9

x5
1

x6
2

x8
5

6 2

x9

x10

x11

x12

Mada je Kruskalov algoritam principijelno vrlo jednostavan, prilikom njegove praktine implementacije postoje dva problema koja treba razmotriti. Prvi problem je kako efikasno birati granu sa najmanjom teinom u svakoj od n 1 iteracija. Drugi, znatno delikatniji problem je problem kako efikasno utvrditi da li izabrana grana formira konturu sa do tada izabranim granama ili ne, s obzirom da problem utvrivanja postojanja konture u grafu sam po sebi nije elementaran. Razmotrimo prvo prvi problem. Ukoliko koristimo naivni pristup, granu sa najmanjom teinom moemo nai u m koraka, gdje je m broj grana. Sljedeu granu sa najmanjom teinom moemo nai u m 1 koraka (s obzirom da smo jednu granu ve iscrpili), sljedeu u m 2 koraka, itd. Meutim, treba voditi rauna da neemo u svakoj iteraciji imati sree da odmah moemo uzeti prvu pronaenu granu, s obzirom da ona moda formira konturu sa dotada izabranim granama. Drugim rijeima, moramo biti spremni da emo u pojedinim iteracijama morati razmatrati itavo mnotvo grana. Nije preteko zakljuiti da emo u najgorem sluaju do zavretka algoritma morati razmotriti sve grane grafa. Naime, moe se desiti da e u posljednjoj iteraciji u kostur ui grana sa najveom teinom u itavom grafu (recimo, to e se sigurno desiti ukoliko je takva grana most), to znai da smo prije nje sigurno morali razmotriti sve ostale grane. Dakle, potrebno je utroiti ukupno m + (m 1) + (m 2) + ... + 1 = m (m + 1) / 2 koraka (tj. priblino m2 / 2 koraka) samo za potrebe pronalaenja grana sa najmanjom teinom koje smijemo uzeti u svakoj od iteracija u najgorem sluaju. Stoga je mnogo bolje prvo sortirati sve grane po teinama, s obzirom da se primjenom naprednih tehnika sortiranja sortiranje m grana moe obaviti u priblino m log2 m koraka, to je za veliko m znatno manje od m2 / 2, a nakon sortiranja izbor grane sa najmanjom teinom u svakoj iteraciji nalazimo praktino u jednom koraku. S druge strane, vano je naglasiti da se nita ne postie ukoliko se sortiranje izvede nekim neefikasnim algoritmom (poput Bubble Sort-a), kod kojeg je broj koraka za sortiranje proporcionalan sa m2. Naprotiv, u tom sluaju dobijaju se loije perfomanse nego da je primijenjen naivni pristup. Razmotrimo sada kako efikasno utvrditi da li izabrana grana u svakoj iteraciji formira konturu sa do tada izabranim granama. Osnovna ideja je da problem testiranja da li grana formira konturu ili ne u

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 11. (akademska godina 2011/12)

svakoj iteraciji ne treba rjeavati nezavisno od onoga to znamo od ranije, ve da trebamo maksimalno iskoristiti informacije koje se mogu prikupiti u prethodnim iteracijama. Postoji mnogo naina da se ovaj postupak izvede efikasno. Jedan od najee koritenih postupaka je sljedei. Svakom voru xi, i = 1.. n pridruimo jednu pomonu vrijednost ci, i = 1..n koja se naziva klasa vora (ili, ponekad, boja vora, mada naziv boja nije najadekvatniji s obzirom da se za ovu veliinu obino uzima da je numerike prirode). Na poetku algoritma se svakom voru dodijeli razliita vrijednost klase vora (npr. moemo uzeti da je ci = i, i = 1..n). Svaki put nakon to uzmemo neku granu {xi, xj}, svim vorovima grafa koji imaju klasu cj prepravljamo klasu na vrijednost ci. Na ovaj nain zapravo postiemo da su u svakoj iteraciji klase svih vorova koji su meusobno povezani do tada uzetim granama jednake. Slijedi da je u svakoj iteraciji za testiranje da li grana {xi, xj} obrazuje konturu sa do tada uzetim granama dovoljno testirati da li je ci = cj. Ukoliko jeste, vorovi xi i xj su ve spojeni do tada uzetim granama, tako da granu {xi, xj} ne smijemo uzeti. U suprotnom, granu {xi, xj} smijemo uzeti bez bojazni da emo formirati konturu. Treba primijetiti da nakon to uzmemo granu {xi, xj}, umjesto prepravljanja klase svim vorovima ija je klasa cj na vrijednost ci, moemo prepraviti klase svih vorova ija je klasa ci na vrijednost cj. Pri runom radu, praktinije je od ove dvije mogunosti izvesti onu koja trai manje prepravki. Meutim, pri implementaciji na raunaru, ne isplati se testirati koja mogunost zahtijeva manje prepravki, jer za brojanje broja neophodnih popravki treba isto vrijeme kao i da se same prepravke izvre, ma koju od mogunosti izabrali. Pri tome ipak postoji jedan izuzetak. Ukoliko neki od vorova {xi, xj} ne pripada niti jednoj od do tada uzetih grana (to se moe veoma brzo testirati ukoliko pri implementaciji oznaavamo koji vorovi pripadaju do tada uzetim granama), tada znamo da on ne dijeli istu klasu niti sa jednim drugim vorom, tako da je mnogo isplatnije promijeniti njegovu klasu na vrijednost klase drugog kraja iste grane nego prepravljati vrijednosti klase vorova koji imaju istu klasu kao drugi kraj iste grane (kojih moe biti vie) na vrijednost njegove klase. Ovaj sitni implementacioni detalj moe primijetno ubrzati izvravanje algoritma. Demonstrirajmo prethodno opisani princip na grafu iz prethodnog primjera. Neka smo na poetku stavili ci = i, i = 1 .. 12. Poetna situacija je tada kao na sljedeoj slici (klase vorova su oznaene brojkom u zagradi kraj oznake vora): x2 x3 x1 10 2 2 x4
(1) (2) (3) (4)

8
(5)

5 3 x7

2 10
(7)

x5
1

6 3 3

x8
(8)

x6

(6)

6 2

4 1

5
(12)

x9

(9)

x10 (10)

x11 (11)

x12

Nakon uzimanja grane {x3, x7} korigiramo klasu vora x7 tako da nakon uzimanja grane imamo c7 = 3 umjesto c7 = 7. Slino, nakon uzimanja grane {x5, x9} vrimo korekciju c9 = 5, a nakon uzimanja grane {x11, x12} korekciju c12 = 11. Situacija je tada kao na sljedeoj slici: x2 x3 x1 10 2 2 x4
(1) (2) (3) (4)

8
(5)

5 3 x7

2 10
(3)

x5
1

6 3 3

x8
(8)

x6

(6)

6 2

4 1

5
(11)

x9

(5)

x10

(10)

x11

(11)

x12

Sada prelazimo na grane sa teinom 2. Razmotrimo ta se deava nakon uzimanja grane {x1, x5}. Ukoliko bismo se odluili da svim vorovima ija klasa ima vrijednost c5 = 5 prepravimo klasu na vrijednost c1 = 1, morali bismo izvriti dvije korekcije (c5 = 1 i c9 = 1), jer u tom trenutku dva vora (x5 i x9) imaju vrijednost klase 5. Meutim, kako vor x1 ne pripada niti jednoj do tada uzetoj grani,

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 11. (akademska godina 2011/12)

odmah se zna da on ne dijeli istu klasu niti sa jednim drugim vorom, tako da je jednostavnije promijeniti njegovu klasu na vrijednost c5 = 5. Dakle, vrimo korekciju c1 = 5. Slinu situaciju imamo i nakon uzimanja grane {x2, x3}. Naime, umjesto dvije korekcije c3 = 2 i c7 = 2, isplativije je izvriti samo jednu korekciju c2 = 3, to emo i uiniti. Isto tako, nakon uzimanja grane {x3, x4}, jasno je da treba izvriti korekciju c4 = 3, s obzirom da je alternativa c2 = 4, c3 = 4 i c7 = 4 mnogo manje pogodna. Sada je situacija kao na sljedeoj slici: x1
(5)

10 8
(5)

x2
(3)

2 5

x3
(3)

2 2 10
(3)

x4
(3)

x5
1

6 3 3

3 x7

x8
(8)

x6

(6)

6 2

4 1

5
(11)

x9

(5)

x10 (10)

x11 (11)

x12

Uz ovakvo oznaavanje, sada postaje oigledno da granu {x4, x7} ne smijemo uzeti, jer u ovom trenutku imamo c4 = 3 i c7 = 3, odnosno c4 = c7. Narednu granu {x6, x10} smijemo uzeti (c6 = 6 i c10 = 10) nakon ega slijedi popravka c10 = 6. U ovom trenutku je c10 = 6 i c11 = 11, tako da smijemo uzeti i granu {x10, x11}. Pri tome, oba vora x10 i x11 pripadaju granama koje su ranije uzete, tako da i jedan i drugi vor dijele istu klasu sa nekim drugim vorovima. Tako, vrijednost klase 6 pored vora x10 ima i vor x6, dok vrijednost klase 11 pored vora x11 ima i vor x12. Stoga je posve svejedno da li emo vorovima x11 i x12 promijeniti vrijednost klase na 6, ili emo vorovima x6 i x10 promijeniti vrijednost klase na 11. Odluimo li se za prvu varijantu, dobijamo situaciju kao na sljedeoj slici: x2 x3 x1 10 2 2 x4
(5) (3) (3) (3)

8
(5)

5 3 x7

2 10
(3)

x5
1

6 3 3

x8
(8)

x6

(6)

6 2

4 1

5
(6)

x9

(5)

x10 (6)

x11 (6)

x12

Prelazimo na grane sa teinom 3. Nakon izbora grane {x2, x6} ponovo imamo dvije mogunosti za popravke koje zahtijevaju isti broj popravki (c6 = 3, c10 = 3, c11 = 3 i c12 = 3, odnosno c2 = 6, c3 = 6, c4 = 6 i c7 = 6). Odluimo se, recimo, za prvu varijantu. Sada nastaje zanimljiva situacija prilikom izbora grane {x5, x10}. Istu klasu kao vor x5 imaju jo dva vora (x1 i x9), dok istu klasu kao vor x10 dijeli ak 7 vorova (x2, x3, x4, x6, x7, x11 i x12). Stoga je, pri runom radu, mnogo bolje grupi vorova koji imaju istu klasu kao x5 prepraviti klasu na vrijednost c10 = 3 (to zahtijeva prepravke c1 = 3, c5 = 3 i c9 = 3) nego grupi vorova koji imaju istu klasu kao x10 prepravljati klasu na vrijednost c5 = 5 (to bi zahtijevalo prepravke c2 = 5, c3= 5, c4 = 5, c6 = 5, c7 = 5, c10 = 5, c11 = 5 i c12 = 5), te emo tako i uraditi. S druge strane, pri implementaciji na raunaru, nije isplativo traiti koja je od ove dvije varijante bolja, jer za vrijeme dok prebrojimo vorove koji zahtijevaju prepravku moe se izvriti i sama prepravka. Stoga, pri raunarskim implementacijama, u ovakvim situacijama treba nasumino izabrati jednu od dvije mogue alternative ili se, jednostavno, odluiti da uvijek prepravljamo klasu vora iji je indeks manji (ili vei). Nakon izvrenih korekcija, situacija je kao na sljedeoj slici: x2 x3 x1 10 2 2 x4
(3) (3) (3) (3)

8
(3)

5 3 x7

2 10
(3)

x5
1

6 3 3

x8
(8)

x6

(3)

6 2

4 1

5
(3)

x9

(3)

x10

(3)

x11

(3)

x12

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 11. (akademska godina 2011/12)

Granu {x9, x10} ne smijemo uzeti (s obzirom da je c9 = 3 i c10 = 3), kao ni granu {x7, x12} duine 4, niti granu {x3, x6} duine 5. S druge strane, granu {x8, x12} smijemo uzeti (c8 = 8 i c12 = 3). S obzirom da je ovo posljednja grana, dodatne korekcije nisu potrebne, ime je postupak okonan. Izvrimo li ipak i korekciju nakon uzimanja posljednje grane, imaemo c8 = 3, tako da e na kraju postupka svi vorovi imati istu vrijednost klase. Analizirajmo ta smo dobili ovakvim pristupom. U svakoj iteraciji, testiranje da li grana obrazuje konturu sa do tada uzetim granama je trivijalno, dok se popravka klasa vorova i u najgorem sluaju moe izvesti u manje od n koraka (u najgorem sluaju treba korigirati klase skoro svih vorova, a vorova nema vie od n). Detaljnija analiza pokazuje da ukupan broj operacija pri izvoenju Kruskalovog algoritma (ukljuujui i pripremne operacije) ukoliko se koristi opisani metod testiranja kontura zasnovan na klasama vorova ne prelazi iznos proporcionalan sa n2, osim u sluaju vrlo gustih grafova, kada moe dostii iznos proporcionalan sa n2 log2 n (to su situacije kojima se dominantno vrijeme troi na sortiranje). Uz upotrebu jo sofisticiranijih tehnika za rjeavanje istog problema, koje koriste specijalne strukture podataka (zasnovane na binarnim stablima) za brzo formiranje unije skupova, mogue je implementirati Kruskalov algoritam tako da ukupan broj potrebnih operacija bude priblino proporcionalan sa m log2 m, to je za sluaj rijetkih grafova jo povoljnije. Naalost, prostor na ovom kursu ne dozvoljava detaljan opis kako se ovo dodatno ubrzanje moe izvesti. Razmotrimo sada Primov algoritam, koji se (uz dobru implementaciju) smatra prikladnijim od Kruskalovog algoritma za sluaj gustih grafova. Za razliku od Kruskalovog algoritma, kod kojeg grane koje uzimamo formiraju stablo tek na samom kraju algoritma, kod Primovog algoritma u svakoj iteraciji imamo stablo koje se postepeno proiruje kako izvoenje algoritma napreduje. Izloimo prvo osnovnu ideju Primovog algoritma. U prvoj iteraciji, biramo nasumice neki vor grafa i u kostur dodajemo granu sa najmanjom teinom koja izlazi iz tog vora. U svakoj sljedeoj iteraciji, u stablo dodajemo granu sa najmanjom teinom meu granama koje spajaju vorove koji se trenutno nalaze u stablu sa njima susjednim vorovima koji jo nisu uli u stablo. Pri tome je za dobru implementaciju od kljunog znaaja kako efikasno pronalaziti takvu granu u svakoj iteraciji, o emu emo uskoro posebno govoriti. Postupak ponavljamo sve dok ne formiramo kostur, tj. dok ne izaberemo n 1 grana. Primijenimo sada Primov algoritam na isti graf na kojem smo demonstrirali Kruskalov algoritam. Da ne bismo troili previe prostora, neemo prikazivati posebnu sliku nakon svake iteracije, nego nakon nekoliko obavljenih iteracija. Takoer, za sada jo neemo koristiti nikakve posebne tehnike za pronalaenje grane sa najmanjom teinom u svakoj iteraciji, nego emo prosto koristiti naivnu pretragu u skupini svih grana koje bi mogle doi u obzir. Krenuemo, na primjer, od vora x1. Iz njega izlaze grane {x1, x2}, {x1, x5} i {x1, x6}, od kojih biramo granu {x1, x5} ija je teina najmanja. U sljedeoj iteraciji ve moramo razmotriti vei broj grana, odnosno sve grane koje izlaze iz vorova x1 ili x5 a koje vode ka nekom drugom voru, a to su grane {x1, x2}, {x1, x6}, {x5, x6}, {x5, x9} i {x5, x10}, meu kojima biramo granu {x5, x9} sa najmanjom teinom. Dalje razmatramo grane koje izlaze iz vorova x1, x5 ili x9 koje vode prema do tada neobraenim vorovima, odnosno grane {x1, x2}, {x1, x6}, {x5, x6}, {x5, x10} i {x9, x10}, od kojih moemo izabrati granu {x5, x10} ili {x9, x10} (obje su iste teine). Odluimo se (nasumino) za granu {x5, x10}. Situacija u ovom trenutku prikazana je na sljedeoj slici, na kojoj su grane {x1, x5}, {x5, x9} i {x1, x10} koje su ule u stablo prikazane podebljano, dok su grane kandidati za razmatranje u sljedeoj iteraciji (tj. grane {x1, x2}, {x1, x6}, {x5, x6}, {x6, x10}, {x7, x10} i {x10, x11}) prikazane isprekidano: x2 x3 x1 10 2 2 x4
2 8 6 3 3 3 5 3 x7 1 2 10 9 4 1 9

x5
1

x6
2

x8
5

6 2

x9

x10

x11

x12

U sljedeoj iteraciji trebamo uzeti granu sa najmanjom teinom meu oznaenim granama. Postoje dvije takve grane, {x6, x10} ili {x10, x11}, stoga emo nasumino odabrati jednu od njih, recimo granu {x6, x10}. Sada razmatramo grane {x1, x2}, {x2, x6}, {x3, x6}, {x6, x7}, {x7, x10} i {x10, x11}, od kojih treba

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 11. (akademska godina 2011/12)

uzeti granu {x10, x11}. Naredne grane koje treba razmatrati su grane {x1, x2}, {x2, x6}, {x3, x6}, {x6, x7}, {x7, x10}, {x7, x11} i {x11, x12}, od kojih uzimamo granu {x11, x12}. U sljedeoj iteraciji razmatramo grane {x1, x2}, {x2, x6}, {x3, x6}, {x6, x7}, {x7, x10}, {x7, x11}, {x7, x12} i {x8, x12}, pri emu treba uzeti granu {x2, x6} ili {x6, x7}. Uzmemo li granu {x2, x6}, kandidati za testiranje postaju grane {x2, x3}, {x3, x6}, {x6, x7}, {x7, x10}, {x7, x11}, {x7, x12} i {x8, x12}. Situacija je sada kao na sljedeoj slici, pri emu su, kao i ranije, podebljano prikazane grane koje su ule u stablo, a isprekidano grane koje treba razmotriti u sljedeoj iteraciji: x1
2 10 8 6 3 3

x2
3

2 5

x3
1

2 2 10

x4
9

x5
1

3 x7

x6
2

x8
5

6 2

4 1

x9

x10

x11

x12

Jasno je da u ovoj iteraciji treba uzeti granu {x2, x3}. Nakon toga, treba razmotriti grane {x3, x4}, {x3, x7}, {x6, x7}, {x7, x10}, {x7, x11}, {x7, x12} i {x8, x12}, od kojih uzimamo granu {x3, x7}. Sada su grane koje razmatramo {x3, x4}, {x4, x7}, {x7, x8} i {x8, x12}, od kojih treba odabrati granu {x3, x4}. Konano, kao kandidati za testiranje ostaju grane {x4, x8}, {x7, x8} i {x8, x12}, od kojih uzimamo granu {x8, x12}. Ovim je traeni minimalni kostur formiran. U ovom primjeru, sluajno smo dobili isti kostur kao i primjenom Kruskalovog algoritma. To ne bi moralo biti tako da smo krenuli od drugog poetnog vora, ili da smo vrili drugaiji izbor grana na mjestima gdje smo imali alternative. Razmotrimo sada efikasnost naivne izvedbe Primovog algoritma. Algoritam oigledno ima n 1 iteracija, pri emu se u svakoj iteraciji vri izbor grane koju treba uzeti u stablo. Jasno je da je za algoritam najgori sluaj kada imamo graf u kojem je svaki vor spojen sa svim ostalim vorovima (tj. potpuni graf Kn), pa emo provesti analizu za ovaj sluaj. U i-toj iteraciji imamo i vorova koji su do tada uli u stablo i n i vorova koji su svi meusobno povezani, tako da je u i-toj iteraciji potrebno razmotriti i (n i) grana. Stoga za ukupan broj operacija koje treba izvesti tokom algoritma dobijamo iznos 1 (n 1) + 2 (n 2) + ... (n 1) 1 = n (n2 1) / 6 n3 / 6 i to pod uvjetom da ne gubimo vrijeme u svakoj iteraciji na pronalaenje koji se vorovi nalaze u stablu a koji izvan stabla, to se moe izvesti tako da se stalno auriraju dvije liste vorova koje predstavljaju vorove unutar odnosno izvan stabla (u suprotnom, broj operacija moe iznositi priblino n3). Ovo je veoma neefikasno u poreenju sa Kruskalovim algoritmom. Meutim, uz izvjesne dosjetke, Primov algoritam se moe izvesti tako da se broj operacija smanji za itav red veliine, odnosno da u najgorem sluaju bude priblino oko n2, ime on postaje efikasniji od Kruskalovog algoritma za sluaj gustih grafova. Pokaimo na emu se zasniva ova dosjetka. Kljuna ideja za ubrzavanje Primovog algoritma je smanjivanje broja grana koje treba razmotriti u svakoj iteraciji. To se postie tako to se u svakoj iteraciji auriraju izvjesne dopunske informacije pridruene vorovima, koje se sastoje od tzv. potencijala vora, koji predstavlja najmanju udaljenost razmatranog vora od vorova koji su do tada uli u stablo, te oznake najblieg vora iz stabla razmatranom voru (kaemo da je potencijal razmatranog vora odreen u odnosu na taj vor). Sam tok algoritma tee ovako. Poetnom voru dodijelimo potencijal 0, dok svim njegovim susjedima dodijelimo potencijal jednak teini grane koja ih spaja sa poetnim vorom i naznaimo da se radi o potencijalu u odnosu na poetni vor. U svakoj sljedeoj iteraciji, meu vorovima koji nisu u stablu biramo vor sa najmanjim potencijalom i dodajemo u stablo granu koja spaja izabrani vor sa vorom na koji se njegov potencijal odnosi. Meutim, to dodavanje moe dovesti do promjene potencijala vorova. Nije teko uoiti da se mogu promijeniti jedino potencijali vorova koji su susjedi novododanog vora a koji jo uvijek nisu uli u stablo. Stoga raunamo eventualne nove potencijale svih njegovih susjeda koji nisu do sada uli u stablo kao teine grana koje ga spajaju sa susjedima. Pri tome, potencijal nekog vora korigiramo samo ukoliko je eventualna nova vrijednost njegovog potencijala manja od stare vrijednosti, inae zadravamo staru vrijednost potencijala (naravno, ukoliko doe do korekcije, informaciju o tome na koji se vor odnosi potencijal auriramo da ukazuje na novododani vor). Postupak se nastavlja sve dok se ne formira kompletan kostur.

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 11. (akademska godina 2011/12)

Lako se uvia da ovakva strategija garantira isti izbor grana kao pri naivnoj izvedbi Primovog algoritma. S druge strane, ovakva strategija zahtijeva mnogo manje operacija. Zaista, u svakoj iteraciji potrebno je samo pronai vor sa najmanjim potencijalom meu vorovima koji nisu do tada uzeti u stablo, nakon ega odmah znamo koju granu treba dodati u stablo (u skadu sa informacijom na koji se vor potencijal odnosi). Kako u i-toj iteraciji treba nai vor sa najmanjim potencijalom u skupini od n i vorova, ukupan broj pretraga iznosi (n 1) + (n 2) + ... 1 = n (n 1) / 2 n2 / 2. Meutim, u svakoj iteraciji potrebno je i eventualno korigirati potencijale svih susjeda novododanog vora koji nisu dotada uli u stablo. Kako takvih susjeda u i-toj iteraciji moe biti najvie n i, dobijamo da broj korekcija takoer ne moe prei iznos n2 / 2, odakle slijedi da ukupan broj operacija pri ovakvoj izvedbi ni u najgorem sluaju ne moe prei n2, to je neuporedivo bolje nego pri naivnoj izvedbi Primovog algoritma. Kao ilustraciju, demonstriraemo poboljanu izvedbu Primovog algoritma na istom grafu kao u dosadanjim primjerima. injenicu da neki vor ima potencijal p u odnosu na vor xk na slici emo oznaavati oznakom poput p/xk u zagradi kraj oznake vora. Krenuemo od vora x1 kojem dodjeljujemo potencijal 0, a njegovim susjedima x2, x5 i x6 respektivno potencijale 10, 2 i 8 (u odnosu na vor x1). Kako poetni vor odmah na poetku ulazi u stablo, trebamo razmotriti potencijale vorova x2, x5 i x6, jer su oni jedini vorovi izvan stabla koji imaju dodijeljene potencijale. Meu njima najmanji potencijal ima vor x5, tako da u stablo dodajemo granu {x1, x5}. Trenutna situacija prikazana je na sljedeoj slici, pri emu su isprekidanim linijama prikazane grane koje povezuju novododani vor x5 sa njegovim susjedima (ime elimo naznaiti da moe doi do korekcije njihovih potencijala u odnosu na vor x5): x2 x3 x1 10 2 2 x4
(0) (10/x1)

8 6 3 3

5 3 x7

2 10

x5
(2/x1)

x6

(8/x1)

x8
5

6 2

4 1

x9

x10

x11

x12

Sada treba razmotriti potencijale susjeda vora x5 koji nisu do sada uli u stabla, a to su vorovi x6, x9 i x10. vorovi x9 i x10 dobijaju respektivno potencijale 1 i 3, dok se potencijal vora x6 mijenja sa 8 na 6. Nakon toga, od svih vorova koji nisu u stablu a kojima su dodijeljeni potencijali (to su vorovi x2, x6, x9 i x10) biramo vor x9 sa najmanjim potencijalom i dodajemo granu {x5, x9} u stablo (poetni vor grane je x5, jer je potencijal izabranog vora x9 odreen u odnosu na vor x5). Jedini susjed vora x9 izvan stabla je vor x10 i on ne mijenja svoj dosadanji potencijal. Sad od vorova x2, x6 i x10 najmanji potencijal ima vor x10 (u odnosu na vor x5), tako da u stablo dodajemo granu {x5, x10}. U ovom trenutku situacija je kao na sljedeoj slici: x1
(0)

10 8 6 3 3

x2
3

2 5

x3
1

2 2 10

x4
9

(10/x1)

x5
(2/x1)

3 x7

x6

(6/x5)

x8
5

1
(1/x5)

6 2

4 1

x9

x10 (3/x5)

x11

x12

Sada razmatramo vorove x6, x7 i x10. Potencijal vora x6 se mijenja i postaje 2, dok vorovi x7 i x11 dobijaju respektivno potencijale 6 i 2. Od vorova x2, x6, x7 i x11 najmanje potencijale imaju vorovi x6 i x11 (oba u odnosu na vor x10). Odluimo li se nasumino za vor x6, dodajemo granu {x6, x10} u stablo, nakon ega korigiramo potencijale vorova x2 i x7 na vrijednosti 3 i 3 respektivno, dok vor x3 dobija potencijal 5. Najmanji potencijal izmeu vorova x2, x3, x7 i x11 ima vor x11 (u odnosu na vor x10), tako da dodajemo granu {x10, x11} u stablo. Tme dobijamo situaciju kao na sljedeoj slici:

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 11. (akademska godina 2011/12)

x1
(0)

10 8 6 3 3

x2
3

2 5

x3
(5/x6)

2 2 10
(3/x6)

x4
9

(3/x6)

x5
(2/x1)

3 x7

x6

(2/x10)

x8
5

1
(1/x5)

6 2

4 1

x9

x10 (3/x5)

x11 (2/x10)

x12

vorovi iji potencijal treba razmotriti su x7 i x12. vor x7 zadrava svoj raniji potencijal 3 (jer je 9 > 3), dok vor x12 dobija potencijal 1.Sada su vorovi izvan stabla kojima su dodijeljeni potencijali x2, x3, x7 i x12. Najmanji potencijal meu njima ima vor x12, tako da u stablo ulazi grana {x11, x12}. Potencijal vora x7 se ne mijenja, a vor x8 dobija potencijal 5. Sada, od vorova x2, x3, x7 i x8 najmanje potencijale imaju vorovi x2 i x7 (oba u odnosu na x6), od kojih biramo recimo vor x2 i dodajemo granu {x2, x6} u stablo. Time se potencijal vora x3 mijenja i postaje 2 (u odnosu na x2). U ovom trenutku, vorovi izvan stabla sa dodijeljenim potencijalom su x3, x7 i x8. Meu njima, najmanji potencijal ima vor x3, ime grana {x2, x3} ulazi u stablo, tako da imamo sljedeu situaciju: x1
(0)

10 8 6 3 3

x2
3

2 5

x3
(2/x2)

2 2 10
(3/x6)

x4
9
(5/x12)

(3/x6)

x5
(2/x1)

3 x7

x6

(2/x10)

x8

1
(1/x5)

6 2

4 1

5
(1/x11)

x9

x10 (3/x5)

x11 (2/x10)

x12

Ova izmjena mijenja potencijal vora x7 koji postaje 1, dok vor x4 dobija potencijal 2. vor x7 ima najmanji potencijal meu vorovima x4, x7 i x8, tako da u stablo ulazi grana {x3, x7}. Ovim se ne mijenja potencijal niti jednog vora. Sada, od vorova x4 i x8 vor x4 ima manji potencijal, tako da grana {x3, x4} ulazi u stablo, pri emu se ponovo se ne mijenja potencijal niti jednog vora. Jedini preostali vor je x8 iji se potencijal odnosi na vor x12, tako da u stablo ulazi grana {x8, x12}. Ovim je postupak okonan. Na kraju, napomenimo jo da postoje i izvedbe Primovog algoritma, zasnovane na strukturama podataka koje su poznate pod nazivom redovi sa prioritetom, kod kojih se moe postii da ukupan broj koraka bude proporcionalan sa (n + m) log2 n, to je poboljana efikasnost u sluaju rijetkih grafova (efikasnost je ak neznatno bolja i u odnosu na maksimalno optimiziran Kruskalov algoritam). Meutim, za sluaj gustih grafova efikasniji je gore opisani pristup. Postoje i jo bri (ali i znatno sloeniji) algoritmi za nalaenje minimalnog kostura. Najbri poznati algoritam za tu svrhu je Chazelleov algoritam, kod kojeg je vrijeme izvravanja praktino proporcionalno sa m.

Pronalaenje najkraeg puta u grafu


U brojnim primjenama teorije grafova potrebno je nai najkrai put koji povezuje dva zadana vora xi i xj. U sluajevima kada razmatrani graf nije teinski graf, efikasno rjeenje problema daje pretraga grafa po irini (BFS pretraga), jer smo vidjeli da ona kao propratni efekat daje najkrae udaljenosti svih vorova u odnosu na poetni vor, kao i pripadne puteve. Ovdje imamo interesantnu pojavu da je naelno jednostavnije razviti postupak koji nalazi najkrae puteve od poetnog vora do svih drugih vorova grafa nego samo najkrai put od poetnog vora do zadanog ciljnog vora, s obzirom na injenicu da se prilikom pretraivanja udaljenijih vorova vrlo efikasno mogu iskoristiti informacije iskoritene prilikom pretrage bliih vorova. Naravno, ukoliko je cilj da se pronae najkrai put od vora xi do tano odreenog vora xj a ne do svih vorova grafa, pretragu je mogue obustaviti im se obradi vor xj. BFS pretraga je sasvim efikasan metod za pronalaenje najkraih puteva u grafovima koji nisu teinski. Efikasniji metod za rjeavanje ovog problema nije poznat.

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 11. (akademska godina 2011/12)

U sluaju kada razmatramo teinski graf, tada je prirodno pod duinom nekog puta smatrati ne puki broj grana koje ine put, ve sumu teina svih grana koje ine put. Uz takvu konvenciju, BFS pretraga vie ne moe posluiti za rjeavanje problema nalaenja najkraeg puta u grafu. Za takav modificirani problem predloeni su brojni efikasni algoritmi. Jedan od najstarijih takvih algoritama je Dantzigov algoritam. Meutim, ovaj algoritam se danas praktino i ne koristi, nego se umjesto njega koristi njegova poboljana verzija poznata kao Dijkstrin algoritam. Ovi algoritmi su u osnovi veoma slini Primovom algoritmu, a razlika izmeu njih je praktino ista kao razlika izmeu naivne i poboljane izvedbe Primovog algoritma. Zapravo, pojam potencijala vorova potie od Dijkstre, tako da je Dijkstrin algoritam, kao stariji, posluio Primu za poboljanje i optimiziranje prvobitne (naivne) verzije njegovog algoritma. Slino Primovom algoritmu, Dantzigov i Dijkstrin algoritam takoer tokom rada postupno grade jedan kostur grafa, samo to se ovdje ne radi o minimalnom kosturu (u smislu ranije usvojene definicije minimalnog kostura), nego o kosturu najkraih puteva. Takoer, i kod ovih algoritama se u svakoj iteraciji (osim prve) u stablo dodaje neka grana koja spaja neki vor koji je uao u sastav stabla sa nekim vorom koji jo nije uao u sastav stabla. Meutim, dok je kod Primovog algoritma to grana sa najmanjom teinom (izmeu svih moguih takvih grana), kod Dantzigovog i Dijkstrinog algoritma se bira takva grana kod koje e novododani vor stabla biti to je god mogue blii (u smislu sume teina) poetnom voru, ali posmatrano samo du grana koje su ve ule u sastav stabla. Da bi se ovo moglo izvesti efikasno, za svaki vor koji se uzima u stablo potrebno je uvati informaciju o tome kolika je njegova udaljenost od poetnog vora gledana du grana koje su ule u sastav stabla (ovdje se javlja razlika u odnosu na Primov algoritam, kojem takve informacije nisu potrebne). Dantzigov algoritam, poput naivne izvedbe Primovog algoritma, u svakoj iteraciji granu koja ulazi u stablo nalazi pretragom svih moguih grana koje spajaju neki vor koji je uao u stablo sa nekim vorom koji jo nije uao u stablo, pri emu se grana sa traenim svojstvom lako pronalazi kao grana za koju je zbir njene teine i informacije o udaljenosti onog njenog vora koji je unutar stabla od poetnog vora minimalan (to je razlog zbog kojeg je potrebno uvati takve informacije). Na taj nain e ukupan broj izvrenih operacija u najgorem sluaju biti proporcionalan sa n3, kao u naivnoj izvedbi Primovog algoritma. Meutim, upravo je Dijkstra doao na revolucionarnu ideju uvoenja potencijala za vorove koji su susjedi vorovima koji su uli u stablo, koja osjetno olakava pronalaenje grane koja treba ui u stablo, ime se broj operacija koje treba izvriti svodi na iznos proporcionalan sa n2 u najgorem sluaju. Stoga se na Dantzigovom algoritmu neemo zadravati, nego emo razmotriti samo Dijkstrin algoritam. On je praktino identian poboljanoj izvedbi Primovog algoritma, uz jedinu razliku to se potencijal vora ne rauna prosto kao teina grane koja spaja referentni vor sa razmatranim vorom, nego kao suma potencijala referentnog vora i teine grane koja spaja referentni vor sa razmatranim vorom. Kriterij pod kojim se vri auriranje (odnosno korekcija) potencijala nekog vora kojem je od ranije pridruen potencijal ostaje isti kao kod poboljane izvedbe Primovog algoritma. Na taj nain, smisao potencijala vorova kod Dijkstrinog algoritma je u tome da oni predstavljaju najkrae udaljenosti od poetnog vora do njih, ali samo preko vorova koji su do tada uli u stablo. To ne znai da ne postoje krai putevi preko vorova koji jo nisu uli u stablo, ali ukoliko takvi postoje, upravo e oni dovesti do korekcije potencijala u kasnijim iteracijama. Na kraju algoritma, potencijali vorova e predstavljati stvarne najkrae udaljenosti tih vorova od poetnog vora. Kao primjer, demonstriraemo Dijkstrin algoritam na istom grafu na kojem smo razmatrali Kruskalov i Primov algoritam. Neka je x1 poetni vor, kojem dodjeljujemo potencijal 0, a njegovim susjedima x2, x5 i x6 potencijale 10, 2 i 8 respektivno, kao i kod Primovog algoritma. Najmanji potencijal ima vor x5, tako da u stablo ulazi grana {x1, x5}, to daje situaciju kao na sljedeoj slici: x1
(0)

10 8 6 3 3

x2
3

2 5

x3
1

2 2 10

x4
9

(10/x1)

x5
(2/x1)

3 x7

x6

(8/x1)

x8
5

6 2

4 1

x9

x10

x11

x12

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 11. (akademska godina 2011/12)

Do sada je sve bilo identino kao kod Primovog algoritma. Meutim, raunanje potencijala vorova x6, x9 i x10 koji su susjedi vora x5 se razlikuje. Potencijali vorova x9 i x10 postaju 2 + 1 = 3 i 2 + 3 = 5 respektivno (umjesto 1 i 3 kako bi bilo kod Primovog algoritma), dok potencijal vora x6 (kao i njegov referentni vor x1 u odnosu na koji se taj potencijal odnosi) neemo mijenjati, s obzirom da eventualna nova vrijednost 2 + 6 = 8 nije manja od postojee vrijednosti potencijala vora x6 (koja iznosi takoer 8). Od vorova x2, x6, x9 i x10 najmanji potencijal ima vor x9, tako da u stablo ulazi grana {x5, x9}, pri emu se potencijal vora x10 ne mijenja. Dalje, od vorova x2, x6 i x10 najmanji potencijal ima vor x10, tako da grana {x5, x10} ulazi u stablo. U ovom trenutku situacija je kao na sljedeoj slici (primijetimo da se potencijali vorova razlikuju nego u istom stadiju izvoenja Primovog algoritma, a to to su do sada iste grane ule u stablo kao pri izvoenju Primovog algoritma ista je sluajnost): x2 x3 x1 10 2 2 x4
(0) (10/x1)

8 6 3 3

5 3 x7

2 10

x5
(2/x1)

x6

(8/x1)

x8
5

1
(3/x5)

6 2

4 1

x9

x10 (5/x5)

x11

x12

Nakon dodavanja ove grane, treba razmotriti potencijale vorova x6, x7 i x11. Kako je 5 + 2 = 7 < 8, potencijal vora x6 sa mijenja i postaje 7 (u odnosu na x10), dok vorovi x7 i x11 dobijaju potencijale 5 + 6 = 11 i 5 + 2 = 7. Sada treba pronai vor sa najmanjim potencijalom meu susjedima vorova koji su uli u stablo, tj. meu vorovima x2, x6, x7 i x11. Najmanji potencijal meu njima imaju vorovi x6 i x11 (oba u odnosu na vor x10), te se nasumice odluujemo za jedan od njih. Odluimo li se za vor x6, u stablo ulazi grana {x6, x10}. Pri tome se potencijal vora x2 ne mijenja, potencijal vora x7 se korigira i postaje 7 + 3 = 10, dok vor x3 dobija potencijal 7 + 5 = 12. Sada traimo vor sa najmanjim potencijalom meu vorovima x2, x3, x7 i x11. To je vor x11 iji se potencijal odnosi na vor x10, tako da dodajemo granu {x10, x11} i razmatramo ta se deava sa potencijalima vorova x7 i x12. Potencijal vora x7 ostaje isti (7 + 9 > 10), a potencijal vora x12 postaje 7 + 1 = 8. Sada, meu vorovima x2, x3, x7 i x12 najmanji potencijal ima upravo vor x12, tako da je sljedea grana koja ulazi u stablo grana {x11, x12}. Potencijal vora x7 se ne mijenja, a vor x8 dobija potencijal 8 + 5 = 13. U ovom trenutku, vorovi izvan stabla sa dodijeljenim potencijalima su x2, x3, x7 i x8. Meu njima, najmanje potencijale imaju vorovi x2 (u odnosu na x1) i x7 (u odnosu na x6), od kojih nasumice biramo recimo vor x2 i dodajemo granu {x1, x2} u stablo. Trenutno stanje izvravanja algoritma prikazano je na sljedeoj slici: x1
(0)

10 8 6 3 3

x2
3

2 5

x3
1

2 2 10
(10/x6)

x4
9
(13/x12)

(10/x1)

(12/x6)

x5
(2/x1)

3 x7

x6

(7/x10)

x8

1
(3/x5)

6 2

4 1

5
(8/x11)

x9

x10 (5/x5) x11

x12

(7/x10)

Novododani vor x2 moe jedino utjecati na potencijal vora x3. Meutim, on se ne mijenja, jer je eventualna nova vrijednost 10 + 2 = 12 jednaka njegovoj tekuoj vrijednosti. Slijedi traenje vora sa najmanjim potencijalom meu vorovima x3, x7 i x8. Najmanji potencijal ima vor x7 (u odnosu na x6) ime grana {x6, x7} ulazi u stablo, potencijal vora x3 se korigira i postaje 10 + 1 = 11, vor x4 dobija potencijal 10 + 2 = 12, dok vor x8 zadrava svoj raniji potencijal. Sljedea grana koja ulazi u stablo je {x3, x7}, s obzirom da vor x3 ima najmanji potencijal meu vorovima x3, x4 i x7. Ovim se ne mijenja potencijal niti jednog vora. Sada, od vorova x4 i x8 vor x4 ima manji potencijal (u odnosu na x7), tako da grana {x4, x7} ulazi u stablo, to takoer ne dovodi do promjene potencijala niti jednog vora. Jedini preostali vor je x8 iji se potencijal odnosi na vor x12, tako da u stablo ulazi grana {x8, x12}. Ovim je postupak okonan. Na narednoj slici je prikazano stanje nakon zavretka algoritma, pri emu

10

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 11. (akademska godina 2011/12)

se jasno vidi formirani kostur najkraih puteva, kao i stanje potencijala svih vorova na kraju postupka, pri emu vrijednosti potencijala vorova ujedno predstavljaju njihova najkraa rastojanja poetnog vora x1: x2 x3 x1 10 2 2 x4
(0) (10/x1) (11/x7) (12/x7)

8 6 3 3

5 3 x7

2 10
(10/x6)

x5
(2/x1)

x6

(7/x10)

x8
5
(8/x11)

1
(3/x5)

6 2

4 1

x9

x10 (5/x5) x11

x12

(7/x10)

Ukoliko nas zanima sam najkrai put izmeu dva vora, a ne samo njegova duina, njega je posve lako rekonstruisati praenjem naenog kostura najkraih puteva. Na primjer, put x1 x5 x10 x6 x7 x3 je najkrai put izmeu vorova x1 i x3 (duine 11). Ovaj put je najlake rekonstruisati pratei informacije o voru u odnosu na koji se odnosi potencijal nekog vora, poev od krajnjeg vora puta unazad. Na primjer, potencijal vora x3 se odnosi na vor x7, potencijal vora x7 se odnosi na x6, potencijal vora x6 odnosi se na x10, itd. Slino kao kod BFS pretrage, Dijkstrin algoritam takoer smijemo prekinuti kada u procesu formiranja kostura neka od grana stabla dospije do ciljnog vora, s obzirom da se potencijali onih vorova koji uu u stablo vie ne mogu mijenjati. Ve smo rekli da Dijkstrin algoritam u najgorem sluaju zahtijeva oko n2 operacija. Opisana izvedba se smatra jednim od najefikasnijih postupaka za nalaenje najkraeg puta u gustim grafovima. Ona je prilino efikasna i u sluaju rijetkih grafova, ali se za rijetke grafove moe napraviti i efikasnija izvedba. Naime, slino kao i kod Primovog algoritma, moe se napraviti izvedba Dijkstrinog algoritma zasnovana na redovima sa prioritetom kod koje je ukupan broj koraka proporcionalan sa (n + m) log2 n, to je, u sluaju rijetkih grafova, manje od n2. Na ovoj izvedbi se neemo zadravati. U dosadanjem opisu Dijkstrinog algoritma, preutno smo pretpostavili smo da se algoritam primjenjuje na neusmjeren graf. Meutim, uz izvjestan oprez, nema nikakvog razloga da se Dijkstrin algoritam ne moe primjenjivati na usmjerene grafove. Treba samo voditi rauna da kod usmjerenih grafova put izmeu vorova xi i xj (uz potovanje usmjerenja) ne mora postojati ak i ukoliko je graf povezan. Ta situacija se moe detektirati tako to na kraju postupka vor xj ostaje bez dodijeljenog potencijala nakon to je procedura okonana, odnosno nakon to su obraeni svi susjedi grana koje su do tada ule u kostur (strogo reeno, u tom sluaju, formirano stablo uope i nije kostur, s obzirom da ne povezuje sve vorove). esto se uzima da vorovi kojima nije dodijeljen potencijal imaju potencijal , tako da su vorovi koji na kraju algoritma ostanu sa beskonanim potencijalom oni vorovi koji nisu dostini iz poetnog vora. Nije teko vidjeti da se valjanost Dantzigovog i Dijkstrinog algoritma oslanja na pretpostavku da je grana sa najmanjom teinom koja izlazi iz nekog vora sigurno i najkrai put iz tog vora do vora u koji ta grana ulazi. Ta pretpostavka je sigurno tana ukoliko pretpostavimo da dodavanje nove grane u postojei put ne moe nikada skratiti nego samo produiti postojei put. Iako ova druga pretpostavka djeluje neoborivo tana, ona ipak nije tana ukoliko dopustimo da teine grana mogu biti i negativni brojevi, jer dodavanje grane sa negativnom teinom u postojei put ini taj put kraim. Mada se nekome moe uiniti da su negativne teine grana besmislene, postoje primjene u kojima ima smisla da teine nekih grana budu negativne. Naravno, to je besmisleno ukoliko teine grana modeliraju rastojanja ili neto slino, ali postaje smisleno ukoliko, na primjer, grane grafa modeliraju neke finansijske transakcije, tako da pozitivne teine grana odgovaraju prihodima a negativne rashodima. Negativne teine grana javljaju se i u sluajevima kada se neki problemi koji nemaju direktne veze sa problemom nalaenja najkraeg puta transformiraju u ekvivalentan problem nalaenja najkraeg puta. Naalost, Dantzigov i Dijkstrin algoritam ne rade ispravno za takve grafove, zbog oslanjanja na gore navedenu pretpostavku. Na primjer, u usmjerenom grafu na sljedeoj slici najkrai put od vora x1 do vora x2 nije direktna grana izmeu x1 i x2 koja je najkraa grana koja izlazi iz vora x1, nego zaobilazni put preko vora x3 koji poinje sa duom granom (x1, x3). Dijkstrin algoritam e pogreno ustanoviti da je direktna grana (x1, x2) najkrai put izmeu ova dva vora.

11

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 11. (akademska godina 2011/12)

x1 4

2 3 x3

x2

Bitno je naglasiti da u ovakvim sluajevima nita ne bi pomoglo poveanje teina grana za neki iznos tako da sve teine postanu pozitivne, jer takva izmjena ne djeluje jednako na puteve sa razliitim brojem grana. Tako, kada bismo u usmjerenom grafu iz prethodnog primjera poveali teine svih grana za 4, tada bi direktna grana (x1, x2) zaista bila najkrai put izmeu ova dva vora, tako da ponovo ne bismo mogli ustanoviti da je najkrai put zapravo put x1 x3 x2. Stoga se za sluaj grafova koji imaju grane sa negativnim teinama moraju koristiti drugi algoritmi, kao to je recimo Bellman-Fordov algoritam, kojem negativne teine grana ne smetaju. Mada se ovaj algoritam moe koristiti i sa grafovima kod kojeg sve grane imaju pozitivne teine, on je najee primijetno neefikasniji od Dijkstrinog algoritma, s obzirom da broj neophodnih operacija pri izvoenju algoritma u najgorem sluaju moe biti blizak iznosu n3. Uskoro emo vidjeti da, bez obzira na ovaj nedostatak, postoje praktine situacije u kojima je Bellman-Fordov algoritam (iz posve drugih razloga) znatno pogodniji od Dijkstrinog (ili Dantzigovog) algoritma. Opiimo sada Bellman-Fordov algoritam (neki autori razlikuju Bellmanov i Fordov algoritam, mada su razlike izmeu njih samo kozmetike; ovdje opisana verzija je Fordova verzija). Ovaj algoritam je u osnovi veoma jednostavan i zasniva se na auriranju pomonih veliina pridruenih vorovima, koje emo oznaiti sa i, i = 1 .. n i ija je uloga i nain auriranja slian ulozi i nainu auriranja potencijala kod Dijkstrinog algoritma (stoga se i one ponekad nazivaju potencijalima), mada se interpretacija njihovog znaenja u toku izvoenja algoritma razlikuje u odnosu na Dijkstrin algoritam. Dalje, ovaj algoritam pretpostavlja da graf posmatramo kao digraf, odnosno svaku neusmjerenu granu posmatramo kao par usmjerenih grana. Pretpostavimo bez umanjenja openitosti da je poetni vor oznaen sa x1. Na poetku algoritma postavljamo 1 = 0, dok svim ostalim vorovima pridruujemo i = , i = 2 .. n. Sada redom za svaku granu grafa oblika (xi, xj) raunamo veliine j = i + wij pri emu je wij teina grane (xi, xj). Ukoliko je j < j, korigiramo vrijednost j tako da postane j = j (kaemo da je korekcija izvrena u odnosu na vor xi). Ovim je zavrena prva iteracija algoritma. U narednim iteracijama ponavljamo isti postupak za svaku granu, uz ponovne eventualne korekcije veliina i, i = 1 .. n. Zapravo, algoritam se moe ubrzati ukoliko primijetimo da ne moramo ponovo razmatrati sve grane nego je dovoljno razmatrati samo grane koje izlaze iz onih vorova xi kod kojih je u prethodnoj iteraciji dolo do promjene vrijednosti i, s obzirom da samo takve grane mogu dovesti do novih promjena. Postupak zavravamo kada u nekoj od iteracija ne izvrimo niti jednu korekciju. Moe se dokazati da broj iteracija ne moe biti vei od n, a tipino je znatno manji. Nije teko vidjeti da vrijednosti i tokom izvoenja algoritma predstavljaju duine do tada naenih najkraih puteva od poetnog vora do odgovarajuih vorova, dok korekcije nastupaju onog trenutka kada se detektira da je put preko vora u odnosu na koji se vri korekcija krai od puta koji se do tada smatrao za najkrai put do posmatranog vora. Stoga, na kraju postupka, vrijednosti veliina i predstavljaju upravo iznose najkraih rastojanja od poetnog vora x1 do ostalih vorova u grafu (poput potencijala u Dijkstrinom algoritmu). Sam najkrai put prema izvornom Bellman-Fordovom algoritmu odreujemo ovako. Neka je xk krajnji vor do kojeg traimo najkrai put. Njegov prethodnik u traenom putu je vor xp za koji vrijedi wpk = k p. Sada na isti nain odredimo i prethodnika vora xp, i ponavljamo postupak sve dok ne rekonstruiramo itav traeni put unazad od vora xk do vora x1. Meutim, najkrai putevi se mogu rekonstruisati i na isti nain kao kod Dijkstrinog algoritma ukoliko uz veliine i, i = 1 .. n pri svakoj njihovoj korekciji vodimo i dopunsku evidenciju o voru u odnosu na koji je izvrena ta korekcija. Bitno je naglasiti da se Bellman-Fordov algoritam ne smije prekinuti prije nego to se zavre sve iteracije ak i ukoliko nas zanima samo najkrai put do nekog odreenog vora xk, s obzirom da sve do okonanja postupka nemamo nikakvu garanciju da se vrijednost k nee dalje mijenjati. Takoer, interesantno je napomenuti da broj iteracija koje se izvre prije nego to algoritam zavri sa radom moe bitno ovisiti od redoslijeda kojim se obrauju grane u toku iteracija, tako da postoje brojne preporuke vezane za redoslijed izbora grana u cilju poboljanja perfomansi algoritma, u ta se ovdje neemo uputati.

12

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 11. (akademska godina 2011/12)

Primijenimo, radi demonstracije, Bellman-Fordov algoritam na graf iz prethodnih primjera. Na poetku stavljamo 1 = 0 i i = za i = 2 .. 12. Odluimo se da u toku svake iteracije grane procesiramo u leksikografskom poretku. Na poetku imamo grane (x1, x2), (x1, x5) i (x1, x6), koje dovode do korekcija 2 = 10, 5 = 2 i 6 = 8. Slijede grane (x2, x1), (x2, x3) i (x2, x6) od kojih grana (x2, x3) dovodi do korekcije 3 = 12, dok preostale dvije grane ne dovode ni do kakvih korekcija. Nakon toga, dolazi red na grane (x3, x2), (x3, x4), (x3, x6) i (x3, x7), pri emu grane (x3, x4) i (x3, x7) dovode do korekcija 4 = 14 i 7 = 13. Dalje, od tri grane (x4, x3), (x4, x7) i (x4, x8) koje izlaze iz vora x4, samo posljednja dovodi do korekcije 8 = 23. Nastavljamo sa granama (x5, x6), (x5, x9) i (x5, x10) koje izlaze iz vora x5. Prva od njih ne dovodi do korekcija, dok preostale dvije dovode do korekcija 9 = 3, 10 = 5. Stanje izvravanja algoritma je sada kao na sljedeoj slici (pri emu su vrijednosti veliina i date u zagradama kraj oznaka vorova): x2 x3 x1 10 2 2 x4
(0) (10) (12) (14)

8 6 3 3

5 3 x7

2 10
(13)

x5
(2)

x6

(8)

x8
(23)

6 2

4 1

5
()

x9
(3)

x10

(5)

x11 ()

x12

Dalje razmatramo grane (x6, x1), (x6, x2), (x6, x3), (x6, x5), (x6, x7) i (x6, x10) koje izlaze iz vora x6. Od svih ovih grana samo grana (x6, x7) dovodi do korekcije 7 = 11. Iz vora x7 izlazi mnotvo grana (x7, x3), (x7, x4), (x7, x6), (x7, x8), (x7, x10), (x7, x11) i (x7, x12). Meu njima, grane (x7, x4), (x7, x8), (x7, x11) i (x7, x12) dovode respektivno do korekcija 4 = 13, 8 = 21, 11 = 20, 12 = 15. Slijede grane (x8, x4), (x8, x7) i (x8, x12), od kojih niti jedna ne dovodi ni do kakvih korekcija. U ovom trenutku, stanje izvravanja algoritma je kao na sljedeoj slici: x2 x3 x1 10 2 2 x4
(0) (10) (12) (13)

8 6 3 3

5 3 x7

2 10
(11)

x5
(2)

x8
(21)

x6

(8)

6 2

4 1

5
(15)

x9
(3)

x10

(5)

x11 (20)

x12

Nastavljamo sa granama (x9, x5) i (x9, x10), koje takoer ne dovode do novih korekcija. Sada prelazimo na grane (x10, x5), (x10, x6), (x10, x7), (x10, x9) i (x10, x11) koje izlaze iz vora x10. Meu njima, grane (x10, x6) i (x10, x7) dovode do korekcija 6 = 7 i 11 = 7 respektivno. Slijede grane (x11, x7), (x11, x10) i (x11, x12) od kojih samo posljednja dovodi do korekcije 12 = 8. Preostaju jo tri grane (x12, x7), (x12, x8) i (x12, x11) koje izlaze iz vora x12, od kojih druga dovodi do korekcije 8 = 13. Ovim su obraene sve grane grafa, tako da je prva iteracija algoritma zavrena. Stanje algoritma po zavretku prve iteracije prikazano je na sljedeoj slici. Moemo primijetiti da vrijednosti potencijala po zavretku prve iteracije nisu svuda jednake duinama odgovarajuih najkraih puteva. Recimo, imamo 7 = 11, mada postoji put duine 10 (x1 x5 x10 x6 x7) od vora x1 do vora x7 (zapravo, moe se dokazati da je jedino to se moe garantirano saznati iz vrijednosti i na kraju k-te iteracije injenica da meu putevima koji imaju najvie k grana nema puta izmeu x1 i xi ija je duina manja od i): x1
(0)

10 8 6 3 3

x2
(10)

2 5

x3
(12)

2 2 10
(11)

x4
(13)

x5
(2)

3 x7

x8
(13)

x6

(7)

6 2

4 1

5
(8)

x9
(3)

x10

(5)

x11 (7)
13

x12

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 11. (akademska godina 2011/12)

U drugoj iteraciji moramo ponovo razmotriti sve grane grafa, s obzirom da nije bilo niti jednog vora iji potencijal nije bio makar jednom korigiran u prvoj iteraciji. Meutim, ukoliko se ponovo odluimo za leksikografski poredak obrade grana, meu njima samo e grane (x6, x7), (x7, x3) i (x7, x4) dovesti respektivno do korekcija 7 = 10, 3 = 11 i 4 = 12, ime se zavrava i druga iteracija. Sljedea slika prikazuje stanje izvravanja algoritma na kraju druge iteracije. x1
(0)

10 8 6 3 3

x2
(10)

2 5

x3
(11)

2 2 10
(10)

x4
(12)

x5
(2)

3 x7

x8
(13)

x6

(7)

6 2

4 1

5
(8)

x9
(3)

x10

(5)

x11 (7)

x12

U treoj iteraciji ne trebamo razmatrati sve grane, nego je dovoljno ispitati samo grane koje izlaze iz vorova x3, x4 i x7, s obzirom da su to vorovi iji se potencijal mijenjao u toku prethodne iteracije. Dakle, treba razmotriti grane (x3, x2), (x3, x4), (x3, x6), (x3, x7), (x4, x3), (x4, x7), (x4, x8), (x7, x3), (x7, x4), (x3, x6), (x7, x8), (x7, x10), (x7, x11) i (x7, x12), to je znaajna uteda u odnosu na razmatranje svih 46 (usmjerenih) grana grafa. Kako pri tome ne dolazi niti do jedne korekcije, algoritam zavrava u treoj iteraciji. Kao primjer, naimo sada najkrai put od vora x1 do, recimo, vora x3. Prethodnik vora x3 je vor x7, s obzirom da za njih vrijedi 3 7 = 11 10 = 1 = w73. Slino, prethodnik vora x7 je vor x6 jer je 7 6 = w67, prethodnik vora x6 je vor x10 jer je 6 10 = w10,6, prethodnik vora x10 je vor x5 jer je 10 5 = w5,10 i, konano, prethodnik vora x5 je vor x1, jer je 5 1 = w15. Odavde, slijedi da je put x1 x5 x10 x6 x7 x3 traeni najkrai put. Ve je reeno da je jedna od prednosti Bellman-Fordovog algoritma nad Dijkstrinim algoritmom mogunost rada sa grafovima u kojima postoje grane sa negativnim teinama. Meutim, postoje i druge situacije u kojima je Bellman-Fordov algoritam pogodniji od Dijkstrinog algoritma. To se posebno odnosi na situacije kada najkrai put u grafu mora pronai neko ko se, na izvjestan nain, nalazi unutar grafa. Na primjer, pretpostavimo da graf modelira neku raunarsku mreu, pri emu vorovi predstavljaju rutere, a grane veze izmeu rutera, i pretpostavimo da svi ruteri treba da odrede najkrau udaljenost do nekog fiksnog vora (recimo, do glavnog servera). Dijkstrin algoritam je vrlo nepovoljan za tu svrhu, s obzirom da se u svakoj iteraciji treba odrediti vor (tj. ruter) sa najmanjim potencijalom. Ovo je teko izvesti, s obzirom da ni jedan ruter ne moe direktno komunicirati sa ruterima koji mu nisu susjedni. Stoga bi takva izvedba zahtijevala da svaki ruter u svojoj memoriji posjeduje informaciju o itavom grafu (tj. o itavoj strukturi mree), i da stalno aurira informacije ne samo o svom vlastitom potencijalu, nego i o potencijalima svih ostalih rutera. S druge strane, kako se u Bellman-Fordovom algoritmu iskljuivo korigiraju potencijali vorova koji su susjedni trenutno razmatranom voru, bez vrenja ikakve selekcije, Bellman-Fordov algoritam ruteri mogu izvoditi posve jednostavno, samo razmjenjujui informacije o potencijalima sa svojim susjedima, bez potrebe za memoriranjem ikakvih dodatnih informacija (ruteri ak ne moraju nita znati ni o tome kako mrea izgleda). Jedan od najvie koritenih protokola za usmjeravanje paketa podataka u raunarskim mreama, poznat pod nazivom RIP (od engl. Routing Information Protocol) protokol zasnovan je u sutini upravo na Bellman-Fordovom algoritmu. Ipak, injenica je da je Bellman-Fordov algoritam esto znatno sporiji od Dijkstrinog algoritma. U sluajevima kada se zahtijeva velika brzina pronalaenja optimalne putanje, u rutere se ipak implementira Dijkstrin algoritam, ali to, kao to je ve reeno, zahtijeva memoriranje itavog stanja mree u svakom od rutera. Takva strategija izvedena je u porodici komunikacionih protokola poznatih kao Link State protokoli. U sluajevima kada u grafu postoje grane sa negativnim teinama, najkrai put moe i da ne postoji. Naime, ukoliko u grafu postoji ciklus u kojem je zbir teina negativan, jasno je da put moemo po volji skraivati stalno se kreui du tog ciklusa, tako da put moe postati manji od ma kojeg zadanog realnog broja. Slinu situaciju moemo imati ukoliko imamo dvosmjernu granu negativne teine, jer put moemo po volji skraivati stalno se kreui naprijed-nazad du takve grane. U takvim sluajevima, Bellman-Fordov algoritam nikad nee terminirati, nego e upasti u beskonani ciklus. Takvu situaciju moemo detektirati ukoliko ustanovimo da algoritam nije zavrio nakon najvie n

14

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 11. (akademska godina 2011/12)

iteracija, s obzirom da u normalnim okolnostima algoritam mora terminirati u najvie n iteracija. Postoje neki kriteriji kojima se u nekim sluajevima moe i prije isteka n iteracija ustanoviti da algoritam nee terminirati. Na primjer, ukoliko u bilo kojem koraku postane 1 < 0 algoritam sigurno nee terminirati. Postoje i naini da se pronau sporni ciklusi sa negativnom teinom, ali se na njima neemo zadravati. Opisani kriterij je pouzdan metod za detekciju postojanja ciklusa negativne teine u grafu, odnosno Bellman-Fordov algoritam ne terminira ako i samo ako u grafu postoji makar jedan ciklus negativne teine. Ovo je korisna injenica, s obzirom da postoje brojne primjene u kojima je cilj upravo ustanoviti da li graf sadri cikluse negativne teine ili ne. Na primjer, u grafovima koji modeliraju finansijske transakcije, postojanje ciklusa negativne teine ukazuje na propuste koji omoguavaju niz finansijskih transakcija pomou kojih je mogue ostvariti finansijsku dobit iz niega. Bellman-Fordov algoritam omoguava da se ispita eventualno postojanje takvih propusta. U sluaju da postoje ciklusi negativne teine, nije teko ni pronai jedan takav ciklus (mada je nalaenje svih takvih ciklusa teak problem, ekvivalentan problemu nalaenja Hamiltonovog puta). Naime, ukoliko po zavretku n-te iteracije formiramo djelimini graf poetnog grafa tako to od svih grana koje vode u neki vor zadrimo samo onu granu koja vodi iz vora u odnosu na koji se potencijal razmatranog vora odnosi, tako formirani djelimini graf e sigurno unutar sebe sadravati ciklus, koji predstavlja upravo traeni ciklus negativne teine (odnosno, jedan od njih ako ih ima vie). Za sluaj kada u grafu postoji ciklus sa negativnom teinom, prirodno je postaviti pitanje najkraeg elementarnog puta izmeu dva vora, tj. najkraeg puta koji prolazi kroz svaki vor najvie jedanput (primijetimo da kada su teine svih grana pozitivne, najkrai put izmeu ma koja dva vora uvijek mora biti elementarni put). Takav najkrai put sigurno postoji, s obzirom da elementarnih puteva ima konano mnogo, pa meu njima jedan mora biti najkrai. Meutim, pokazuje se da je problem nalaenja najkraeg elementarnog puta u grafovima kod kojih postoje grane sa negativnom teinom podjednako teak kao i problem trgovakog putnika, to znai da nisu poznati efikasni algoritmi za rjeavanje tog problema, i da je mala ansa da e oni ikada biti naeni. Osvrnimo se jo i na problem nalaenja najdueg puta izmeu dva vora u grafu. Jasno je da je nalaenje najdueg puta izmeu dva vora svodiv na nalaenje najkraeg puta u grafu ije su teine svih grana negirane u odnosu na teine grana razmatranog grafa. Slijedi da se Ford-Bellmanov algoritam moe iskoristiti i za rjeavanje problema najdueg puta (Dijkstrin algoritam se takoer moe modificirati za istu svrhu, pod uvjetom da su teine svih grana pozitivne). Problem najdueg puta ima svoje primjene u mrenom planiranju, gdje se trai najdui put izmeu dva vora u usmjerenom aciklinom grafu. Naime, pri mrenom planiranju grane modeliraju aktivnosti, teine grana odgovaraju trajanju pojedinih aktivnosti, dok vorovi oznaavaju trenutke u kojima izvjesne aktivnosti moraju biti kompletirane prije nego to zaponu neke druge aktivnosti. Najdui put u takvom grafu od poetnog do krajnjeg vora tada odgovara kritinom putu, odnosno skupini aktivnosti zbog kojih se itav posao ne moe zavriti u roku manjem od predvienog (tzv. usko grlo). Jasno je da najdui put ne postoji u sluaju da postoji ciklus sa pozitivnom sumom teina grana, iz istog razloga zbog kojeg ne postoji najkrai put u sluaju da postoji ciklus sa negativnom sumom teina grana. U tim sluajevima, prirodno se postavlja pitanje pronalaenja najdueg elementarnog puta izmeu dva zadana vora. Naalost, iz prethodne diskusije je jasno da za ovaj problem takoer nije poznat efikasan algoritam za njegovo rjeavanje. Interesantno je primijetiti da u sluaju grafova ije su sve teine grana pozitivne za problem nalaenja najkraeg elementarnog puta izmeu zadana dva vora postoje efikasni algoritmi (poput Dijkstrinog algoritma, s obzirom da je svaki najkrai put ujedno i elementarni put), dok za prividno srodan problem nalaenja najdueg elementarnog puta efikasni algoritmi nisu poznati (i vrlo vjerovatno ne postoje).

Transportne mree i problem maksimalnog protoka


Usmjereni teinski grafovi u kojima su sve teine nenegativne, i u kojima postoji tano jedan vor (nazvan izvor) u koji niti jedna grana ne ulazi i tano jedan vor (nazvan ponor ili odvod) iz kojeg niti jedna grana ne izlazi naziva se transportna mrea. Teine grana transportne mree obino se nazivaju kapaciteti grana. Ukoliko je g neka grana, njen kapacitet oznaavaemo sa c(g).

15

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 11. (akademska godina 2011/12)

Pod protokom (ili transportom) podrazumijevamo svaku funkciju koja svakoj grani g grafa pridruuje realnu vrijednost f (g) (nazvanu protok grane g ili protok kroz granu g) za koju vrijedi 0 f (g) c(g), i pri emu za svaki vor xj grafa vrijedi da je zbir vrijednosti f ((xi, xj)) za sve grane (xi, xj) koje ulaze u vor xj jednak zbiru vrijednosti f ((xj, xk)) za sve grane (xj, xk) koje izlaze iz vora xj. Neformalno reeno, protok kroz neku granu ne moe prei kapacitet te grane, i ukupni protok kroz sve grane koje ulaze u neki vor jednak je ukupnom protoku kroz sve grane koje izlaze iz tog vora (ovaj uvjet poznat je kao zakon kontinuiteta odnosno nestiljivosti, a takoer i kao I Kirchoffov zakon u teoriji elektrinih mrea). Pod ukupnim protokom kroz mreu smatramo zbir protoka svih grana koje izlaze iz izvora, odnosno zbir protoka svih grana koje ulaze u ponor (prema osobinama koje mora zadovoljavati protok, ove dvije vrijednosti moraju biti iste). U praksi se esto postavlja zadatak da se za datu transportnu mreu odredi takav protok za koji se postie maksimalni ukupni protok kroz mreu. Taj problem naziva se problem maksimalnog protoka. Za rjeavanje ovog problema koristi se Ford-Fulkersonov algoritam. Da bismo opisali ovaj algoritam, uvedimo prvo neke pojmove. Posmatrajmo neki lanac od izvora do ponora, odnosno put od izvora do ponora koji ne mora potovati orjentaciju grana. Za neku granu du tog lanca kaemo da je dobro usmjerena u odnosu na izabrani lanac ukoliko se njena orjentacija poklapa sa redoslijedom vorova du tog lanca. U suprotnom kaemo da je grana krivo usmjerena u odnosu na izabrani lanac. Razlika izmeu kapaciteta neke grane i vrijednosti protoka pridruene toj grani naziva se rezerva (ili zaliha) te grane. Ford-Fulkersonov algoritam zasniva se na sljedeoj injenici, koju je lako provjeriti. Neka smo u zadanoj transportnoj mrei izabrali neki lanac od izvora do ponora, i neka je najmanja vrijednost od vrijednosti rezervi svih dobro usmjerenih grana du tog lanca i vrijednosti protoka svih krivo usmjerenih grana du tog lanca. Ukoliko je 0, za lanac kaemo da je poveavajui lanac, s obzirom da je mogue poveati ukupan protok kroz mreu tako to emo poveati protok kroz sve dobro usmjerene grane du lanca za vrijednost i smanjiti protok kroz sve krivo usmjerene grane du lanca za vrijednost . Ukoliko za sve mogue lance od izvora do ponora vrijedi = 0, protok kroz mreu nije mogue poveati, i dati protok daje maksimalni ukupni protok kroz mreu. Ford-Fulkersonov algoritam polazi od nekog poznatog protoka. U nedostatku boljih informacija, uvijek je mogue poi od trivijalnog protoka, u kojem se svakoj grani pridruuje vrijednost protoka 0. Zatim se ispituju svi lanci od izvora do ponora sa ciljem da se pronae neki poveavajui lanac. U sluaju da se takav pronae, protok se korigira u skladu sa prethodno provedenim razmatranjem. Ispitivanje lanaca se dalje nastavlja sve dok u nekom trenutku ne doemo do situacije da niti jedan lanac od izvora do ponora nije poveavajui lanac. U tom trenutku, maksimalni protok je naen. Treba voditi rauna da lanac koji je bio poveavajui lanac neposredno nakon korekcije protoka vie nee biti poveavajui lanac, ali da kasnije moe ponovo postati poveavajui lanac nakon to se izvri korekcija protoka du nekog drugog lanca. Stoga je u postupku potrebno vriti i vraanje na prethodno razmotrene lance, a ne samo testiranje novih lanaca. Osnovni problem sa gore navedenim grubim opisom Ford-Fulkersonovog algoritma je u tome to se nita ne govori o tome kojim redoslijedom treba testirati sve mogue lance od izvora do ponora. Zaista, ukoliko se ne vodi rauna o redoslijedu, lako se moe desiti da broj neophodnih iteracija bude veoma veliki. Posmatrajmo, kao primjer, transportnu mreu na sljedeoj slici: x2
1000 1000 1 1000 1000

x1

x4

x3 Za ovu mreu lako se odmah vidi da za nju maksimalni protok iznosi 2000, koji se postie ukoliko granama (x1, x2), (x1, x3), (x2, x4) i (x3, x4) dodijelimo protok 1000, a grani (x2, x3) protok 0. Meutim, pretpostavimo da smo krenuli od trivijalnog protoka i da smo uoili poveavajui lanac x1 x2 x3 x4 du kojeg se protok moe poveati za 1 (zanemarimo pri tome injenicu da postoje mnogo oigledniji poveavajui lanci poput x1 x2 x4 du kojeg se protok moe poveati za 1000). Neka smo nakon toga uoili poveavajui lanac x1 x3 x2 x4 du kojeg se protok moe ponovo poveati za 1, poveavajui

16

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 11. (akademska godina 2011/12)

protok kroz dobro usmjerene grane (x1, x3) i (x2, x4) za 1, a smanjujui protok kroz krivo usmjerenu granu (x2, x3) za 1, tako da ukupni protok u ovom trenutku iznosi 2. Nakon ovih korekcija, lanac x1 x2 x3 x4 ponovo postaje poveavajui lanac. Nastavimo li istim redoslijedom, maksimalni protok 2000 dostii emo tek nakon 2000 iteracija, poveavajui u svakoj iteraciji protok za 1. Ukoliko za kapacitete grana umjesto 1000 uzmemo po volji veliki broj, jasno je da uz ovakav redoslijed biranja broj iteracija moe biti po volji veliki. Mada je malo vjerovatno da bi ikakva praktina implementacija Ford-Fulkersonovog algoritma na raunaru za ovako jednostavan graf dovela do tako loeg redoslijeda traenja poveavajuih puteva, ovaj primjer ilustrira barem teoretski kakvi se problemi mogu javiti (i zaista se javljaju u sloenijim mreama) pri naivnim implementacijama Ford-Fulkersonovog algoritma. ak je mogue konstruisati primjer transportne mree (sa kapacitetima grana koji su iracionalni brojevi) i redoslijeda testiranja pri kojem se iz iteracije u iteraciju protok stalno poveava (za sve manje i manje iznose), ali se uvijek nalaze novi poveavajui lanci, tako da se maksimalni protok teoretski dostie tek nakon beskonano mnogo iteracija. Da bi se izbjegli opisani problemi, predloene su brojne dopune osnovne ideje FordFulkersonovog algoritma koje garantiraju da se opisane situacije ne mogu dogoditi. Jedna od najjednostavnijih i najpoznatijih dopuna poznata je kao Edmonds-Karpova modifikacija FordFulkersonovog algoritma, koja garantira da broj iteracija (tj. broj poveavajuih lanaca du kojih se vri korekcija) potrebnih za dostizanje maksimalnog protoka sigurno nee prei m n, gdje je m broj grana, a n broj vorova (postoje i sloenije modifikacije koje garantiraju jo manji broj iteracija). Prema Edmonds-Karpovoj modifikaciji, u svakoj iteraciji se uvijek testira najkrai poveavajui lanac od izvora do ponora (ili neki od najkraih poveavajuih lanaca ukoliko takvih lanaca ima vie), pri emu se pod duinom lanca prosto smatra broj grana u lancu (a ne zbir njihovih teina). Ostaje samo problem kako nai najkrai poveavajui lanac. Poto poveavajui lanac sigurno ne moe sadravati dobro usmjerenu granu sa rezervom jednakom nuli niti krivo usmjerenu granu sa protokom jednakim nuli (inae bi bilo = 0), najkrai povezujui lanac moemo nai primjenom BFS pretrage na graf u kojem smatramo da se kroz grane sa rezervom jednakom nuli ne moe prolaziti u naznaenom smjeru, da se kroz grane sa protokom jednakim nuli ne moe prolaziti u obrnutom smjeru, a da se kroz ostale grane moe prolaziti u oba smjera (ovo je tzv. rezidualni graf razmatrane transportne mree u odnosu na tekui protok). Ovim su kompletirani svi detalji koji su neophodni za implementaciju Edmonds-Karpove modifikacije Ford-Fulkersonovog algoritma. Sada emo na konkretnom primjeru demonstrirati Ford-Fulkersonov algoritam (sa EdmondsKarpovom modifikacijom). Neka je data transportna mrea kao na sljedeoj slici, u kojoj je x1 izvor, a x8 ponor. x3
3 4 3 1 2

x1

x6
2

x2
3

x4
1 9

x8

x5

x7

Krenimo od trivijalnog protoka, u kojem su protoci kroz sve grane jedaki nuli. Kako udaljenost vorova x1 i x8 iznosi 4, najkrai poveavajui lanci ne mogu imati manje od 4 grane. Sasvim lako je pronai (recimo, BFS pretragom) da su x1 x2 x5 x6 x8 i x1 x2 x5 x7 x8 dva takva poveavajua lanca. Odluimo li se recimo za prvi, protok du njega moemo poveati za = 1, tako da emo imati f (x1, x2) = 1, f (x2, x5) = 1, f (x5, x6) = 1 i f (x6, x8) = 1. Lanac x1 x2 x5 x7 x8 i dalje ostaje poveavajui lanac, tako da du njega sada protok moemo poveati za = 2, tako da imamo f (x1, x2) = 3, f (x2, x5) = 3, f (x5, x7) = 2 i f (x7, x8) = 2. U ovom trenutku imamo situaciju kao na sljedeoj slici, pri emu oznake iza kosih crta kraj kapaciteta grana predstavljaju do sada postignute vrijednosti protoka kroz grane. Ilustracije radi, na istoj slici je takoer prikazan i sljedei najkrai poveavajui lanac x1 x2 x3 x4 x5 x7 x8, ije su grane istaknute podebljano:

17

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 11. (akademska godina 2011/12)

x3
3/0 1/0 4/0 2/0

x1

8/3

3/0

x6

1/1

x2
3/3

x4
1/0 2/1 6/2 9/2

x8

x5

x7

Du oznaenog lanca protok se moe poveati za = 1, tako da nove vrijednosti protoka iznose f (x1, x2) = 4, f (x2, x3) = 1, f (x3, x4) = 1, f (x4, x5) = 1, f (x5, x7) = 3 i f (x7, x8) = 3. U ovom trenutku, sljedei poveavajui lanac nije toliko oigledan, pa emo demonstrirati kako se za nalaenje poveavajueg lanca moe iskoristiti rezidualni graf. Formirajmo stoga rezidualni graf za trenutnu raspodjelu protoka. U njemu su dvosmjerne one grane iji kapacitet nije u potpunosti iskoriten, a kroz koje postoji nenulti protok. Grane bez protoka su jednosmjerne, u smjeru koji se poklapa sa smjerom grane u polaznom grafu, dok grane iji je kapacitet iskoriten u rezidualnom grafu imaju suprotnu orjentaciju u odnosu na polazni graf (radi preglednosti, takve grane su prikazane crtkano). Tako dobijamo rezidualni graf kao na sljedeoj slici: x3
3/1 4/1 1/0 2/0

x1

8/4

3/0

x6

1/1

x2
3/3

x4
1/1 10) 2/1 6/3 9/3

x8

x5

x7

Primjenom BFS pretrage na ovaj graf lako nalazimo da najkrai put izmeu vorova x1 i x8 glasi x1 x2 x3 x4 x6 x5 x7 x8, koji ujedno predstavlja i traeni poveavajui lanac. Primijetimo da ovaj lanac, za razliku od prethodnih poveavajuih lanaca, sadri i jednu krivo usmjerenu granu, odnosno granu (x5, x6). Poveanje protoka du ovog lanca mogue je izvesti za iznos = 1 (uz smanjenje protoka za taj iznos du krivo orjentirane grane), tako da nakon korekcije vrijednosti protoka iznose f (x1, x2) = 5, f (x2, x3) = 2, f (x3, x4) = 2, f (x4, x6) = 1, f (x5, x6) = 0, f (x5, x7) = 4 i f (x7, x8) = 4. Postignuta raspodjela protoka prikazana je na sljedeoj slici: x3
3/2 1/0 4/2 2/1

x1

8/5

3/0

x6

1/1

x2
3/3

x4
1/1 2/0 6/4 9/4

x8

x5

x7

Uz postignutu raspodjelu protoka poveavajui lanci vie ne postoje, tako da smo pronali raspodjelu protoka kojom se postie maksimalni ukupni protok kroz graf, koji iznosi fG = 5. Da bi se uvjerili da zaista nema novih poveavajuih lanaca, moemo formirati rezidualni graf u odnosu na postignutu raspodjelu protoka, nakon ega e BFS pretraga pokazati da vie ne postoji nikakav put od izvora x1 do ponora x8 kroz rezidualni graf (inae, rezidualni graf za ovu situaciju izgleda isto kao i prethodno razmatrani rezidualni graf, samo to grana koja spaja vorove x5 i x6 postaje usmjerena u smjeru od x5 do x6). Zaista, nakon to se u postupku BFS pretrage obrade vorovi x1, x2, x3, x4 i x6, dolazimo do situacije u kojoj se postupak ne moe dalje nastaviti, tako da vorovi x5, x7 i x8 ostaju nedostini iz poetnog vora.

18

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 11. (akademska godina 2011/12)

U izvjesnim situacijama korisno je razmatrati generalizaciju pojma transportne mree u kojoj se doputa da mrea ima vie izvora i vie ponora, kao i nalaenje protoka kroz takve generalizirane mree. Sreom, takve generalizirane transportne mree uvijek je mogue svesti na klasine transportne mree uvoenjem dva nova vora nazvana superizvor i superponor (ili superodvod) i novih grana koje spajaju superizvor sa izvorima odnosno ponore sa superponorom. Na taj nain, moemo smatrati da se svi izvori snabdjevaju iz jednog superizvora, odnosno da se svi tokovi koji se ulijevaju u ponore konano ulijevaju u jedan superponor. Za tako dodane grane moemo smatrati da imaju beskonaan kapacitet, s obzirom da je njihova uloga isto fiktivna.

Uparivanje u grafovima
Za neki skup stranica M nekog grafa kaemo da predstavlja uparivanje (engl. matching) ukoliko M ne sadri petlje, i ukoliko nikoje dvije stranice iz M nemaju zajednikih taaka (tako da stranice iz M povezuju vorove u meusobno disjunktne parove vorova). Za vorove xi i xj kaemo da su upareni uparivanjem M ukoliko je (xi, xj) M, a u suprotnom su neupareni. Za uparivanje kaemo da je maksimalno (engl. maximum matching) ako ne postoji niti jedno drugo uparivanje koje sadri vei broj ivica. Uparivanje je zasieno (engl. saturated matching) ukoliko mu nije mogue dodati niti jednu novu granu a da takav skup i dalje ostane uparivanje. Ukoliko se skup krajnjih vorova stranica nekog uparivanja poklapa sa skupom svih vorova grafa, za takvo uparivanje kaemo da je savreno. Pri tome, ni maksimalna ni zasiena ni savrena uparivanja ne moraju biti jedinstvena. Naalost, treba istai da se u anglosaksonskoj literaturi zasieno i maksimalno uparivanje esto naziva vrlo slinim nazivima (maximal matching i maximum matching respektivno), to moe biti uzrok zbrke. Jasno da je svako savreno uparivanje sigurno maksimalno, ali maksimalno uparivanje ne mora biti savreno, s obzirom da je ponekad nemogue upariti sve vorove. Takoer, svako maksimalno uparivanje je zasieno, ali svako zasieno uparivanje ne mora nuno biti maksimalno. Najjednostavniji primjer takve situacije prikazuje sljedea slika, gdje stranica {x2, x3} sama za sebe predstavlja jedno zasieno uparivanje grafa sa slike, ali koje nije maksimalno (naravno, maksimalno uparivanje ine grane {x1, x2} i {x3, x4}):

x1

x2

x3

x4

Ve je reeno da savrena uparivanja ne moraju uvijek postojati. Recimo, jasnp je da savrena uparivanja ne mogu postojati u grafovima sa neparnim brojem vorova (stoga se za grafove sa neparnim brojem vorova nekada uvodi i pojam skoro savrenog uparivanja kao uparivanja u kojima tano jedan vor ostaje neuparen). S druge strane, potpuni grafovi sa parnim brojem vorova, bikompletni grafovi Kn,n kao i mnogi drugi grafovi sa parnim brojem vorova posjeduju savrena uparivanja. Tutteova teorema daje potrebne i dovoljne uvjete da graf sadri savreno uparivanje. Neka je X skup svih vorova nekog grafa koji ima n vorova, pri emu je n paran broj. Tada graf ima savreno uparivanje ako i samo ako je za svaki podskup S skupa vorova X broj komponenti podgrafa razmatranog grafa induciranog skupom X \ S koje sadre neparan broj vorova manji ili jednak od broja elemenata skupa S. Za bipartitivne grafove, Hallova enidbena teorema daje jednostavnije uvjete za postojanje savrenog uparivanja. Neka je dat bipartitivni graf sa biparticijom {X1, X2}. U takvom grafu postoji savreno uparivanje ako i samo ako je za svaki podskup S skupa X1 broj vorova iz skupa X2 koji su spojeni sa elementima skupa S vei ili jednak od broja elemenata skupa S. Neobian naziv ove teoreme potie od sljedee interpretacije. Ukoliko je X1 neki skup mukaraca a X2 neki skup ena i ukoliko grane grafa povezuju mukarce sa enama ije im karakteristike odgovaraju, teorema daje potrebne i dovoljne uvjete pod kojim se svaki mukarac moe oeniti sa enom ije im karakteristike odgovaraju. Neka je dat neki graf i neko uparivanje M u tom grafu. Za neki put u tom grafu kaemo da je alternirajui put u odnosu na uparivanje M ukoliko grane koje ga ine naizmjenino pripadaju odnosno ne pripadaju uparivanju M. Za otvoreni alternirajui put kaemo da je poveavajui put (u odnosu na uparivanje M) ukoliko poinje i zavrava u takama koje su neuparene. Bergeova teorema tvrdi da je uparivanje M maksimalno ako i samo ako u grafu ne postoje poveavajui putevi u odnosu na uparivanje M. Ukoliko skup grana nekog poveavajueg puta u odnosu na uparivanje M oznaimo sa A, nije teko pokazati da je M A takoer uparivanje, koje sadri jednu granu vie nego uparivanje M (oznaka predstavlja simetrinu razliku skupova). Kae se da je ovo uparivanje nastalo
19

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 11. (akademska godina 2011/12)

krianjem uparivanja M i poveavajueg puta A. Na ovoj ideji zasnivaju se mnogi algoritmi za nalaenje maksimalnog uparivanja. Krene se od proizvoljnog zasienog uparivanja (koje je lako formirati), a zatim se trae eventualni poveavajui putevi od neuparenih vorova. Ukoliko se takav put pronae, vri se zamjena naenog uparivanja sa novim uparivanjem koje nastaje krianjem, i postupak se ponavlja sve dok vie ne postoje poveavajui putevi, nakon ega je maksimalno uparivanje pronaeno. Predloena ideja za nalaenje maksimalnog uparivanja ne vodi direktno ka efikasnim algoritmima za sluaj proizvoljnih grafova, s obzirom da se ne vidi jasan nain kako pronalaziti poveavajue puteve. Zapravo, za sluaj proizvoljnih grafova, efikasni algoritmi za rjeavanje problema maksimalnog uparivanja prilino su komplikovani (najpoznatiji za tu svrhu je tzv. Edmonsov algoritam, mada postoje i efikasniji ali sloeniji algoritmi za istu svrhu). S druge strane, za sluaj bipartitivnih grafova, poveavajue puteve (ukoliko postoje) mogue je pronalaziti relativno jednostavno, tako da je mogue formirati jednostavne efikasne algoritme za nalaenje maksimalnog uparivanja. Preciznije, na ovoj ideji mogue je sastaviti algoritam kod kojeg je broj koraka za pronalaenje rjeenja u najgorem sluaju proporcionalan sa m n, gdje je m broj grana grafa. U sutini, takav algoritam je principijelno ekvivalentan sljedeem. Neka je dat bipartitivni graf sa dva disjunktna skupa vorova X1 i X2 tako da svaka grana spaja neki vor iz X1 sa nekim vorom u X2. Od ovog grafa napravimo transportnu mreu tako to usmjerimo sve grane tako da vode iz vorova iz skupa X1 u vorove iz skupa X2, zatim uvedemo jedan novi vor koji e biti izvor koji spajamo sa svim granama iz X1 i jedan novi vor koji e biti ponor pri emu sve vorove iz X2 spajamo s njim. Svim granama takve transportne mree dodijelimo kapacitet 1, i rijeimo problem nalaenja maksimalnog protoka za takvu mreu. Nije teko pokazati da maksimalno uparivanje odgovara onim granama transportne mree kojima na kraju postupka odgovara vrijednost protoka razliita od nule. Hopcroft i Karp su poboljali opisani algoritam i postigli da broj koraka u najgorem sluaju bude proporcionalan sa m n , ali njihov algoritam neemo ovdje opisivati. Problem maksimalnog uparivanja moe se generalizirati za sluaj teinskih grafova. Kod njih se od vie moguih maksimalnih uparivanja moe traiti ono koje je najbolje u smislu sume teina grana koje ga ine (nije teko zamisliti mnoge praktine probleme koji se mogu modelirati tako definiranim problemom). Za sluaj proizvoljnih grafova ovaj problem je prilino teak, dok se za sluaj bipartitivnih grafova prethodno opisani algoritam moe modificirati (u kombinaciji sa Ford-Bellmanovim algoritmom) tako da rjeava i ovaj problem, pri emu je broj neophodnih koraka proporcionalan sa m n2 u najgorem sluaju. Pored toga, za istu svrhu postoji i veoma poznat tzv. maarski algoritam, koji je dobio ime zbog injenice da se zasniva na idejama maarskih matematiara D. Kniga i J. Egervryja, iako su sam algoritam razvili H. Kuhn i J. Munkres (odakle potie i naziv Kuhn-Munkresov algoritam). Kod ovog algoritma, broj koraka je u najgorem sluaju proporcionalan sa n3, a u praksi esto i mnogo manji. Mada ovaj algoritam nije pretjerano sloen, ovdje ga neemo opisivati zbog nedostatka prostora.

Stabla sa korijenom i binarna stabla


Proizvoljno stablo kod kojeg smo jedan vor proglasili za korijen stabla nazivamo stablo sa korijenom. Za stabla sa korijenom obino smatramo da su usmjerena, pri emu su grane usmjerene od korijena, odnosno postoji put od korijena do ma kojeg vora u stablu. Pri tome se usmjerenja grana obino ne crtaju, s obzirom da se podrazumijeva kakvo je usmjerenje grana (uvijek od vorova bliih korijenu ka vorovima koji su dalji od korijena). Stabla sa korijenom se obino crtaju tako da se korijen nalazi na vrhu, vorovi na udaljenosti 1 od korijena crtaju se jedan nivo ispod korijena, itd. Na sljedeoj slici prikazano je jedno stablo sa korijenom. Stabla sa korijenom omoguavaju modeliranje hijerarhijskih struktura, kao to su tokovi odluivanja u preduzeima, porodina stabla, gramatike strukture, sistemi datoteka na raunarima, itd.

20

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 11. (akademska godina 2011/12)

Ukoliko su vorovi xi i xj u nekom stablu sa korijenom spojeni granom (za koju podrazumijevamo da je usmjerena u skladu sa prethodno definiranim konvencijama), kaemo da je vor xi roditelj vora xj, odnosno da je vor xj dijete vora xi. Analogno se mogu definirati i drugi rodbinski odnosi izmeu vorova, kao to su npr. potomak i predak, koje neemo precizno definirati, nego emo ih smatrati intuitivno jasnim. Jasno je da svaki vor moe imati samo jednog roditelja, ali neki vor moe imati vie djece. Isto tako, jasno je da je korijen jedini vor bez roditelja, i on je predak svih ostalih vorova (odnosno svi ostali vorovi su njegovi potomci). Podgraf stabla generisan skupom koji se sastoji od nekog vora i svih njegovih potomaka nazivamo podstablo koje izlazi iz tog vora. vorovi bez djece nazivaju se listovi. Pod nivoom vora podrazumijevamo njegovu udaljenost od korijena, dok se visina stabla definira kao udaljenost najudaljenijeg vora od korijena. Stablo je balansirano ukoliko se nivoi ma koja dva lista razlikuju najvie za jedinicu. Za praktine primjene najvanija su binarna stabla. To su stabla sa korijenom kod kojih svaki vor moe imati najvie dva djeteta. Binarna stabla lee u osnovi mnogih efikasnih algoritama, i postoje veoma pogodni naini za njihovu reprezentaciju na raunaru, koji su mnogo efikasniji nego naini reprezentacije proizvoljnih grafova. Binarno stablo visine h moe imati najvie 2h+1 1 vorova. Binarno stablo visine h je potpuno ukoliko sadri tano 2h+1 1 vorova, odnosno ukoliko mu se svaki list nalazi na nivou h. Potpuno binarno stablo visine h sadri 2h listova. Za binarno stablo kod kojeg je svaki vor ili list, ili posjeduje tano dvoje djece, kaemo da je pravilno. Pravilna stabla sa n vorova posjeduju tano (n + 1) / 2 listova. Kod praktinih primjena binarnih stabala u raznim algoritmima, esto je potrebno praviti jasnu razliku izmeu dva djeteta koja moe imati neki vor, koja emo zvati lijevo dijete i desno dijete. Ukoliko smo u nekom binarnom stablu za svako dijete nekog vora specificirali da li je lijevo ili desno dijete, tada govorimo o ureenom binarnom stablu. esto se za svako binarno stablo podrazumijeva da je ureeno, tako da se rije ureeno najee ne naglaava posebno. Naravno, ovo je bila samo neformalna definicija ureenog binarnog stabla. Formalne definicije je mogue dati na vie razliitih (meusobno ekvivalentnih) naina, pri emu e kasnije biti data jedna interesantna formalna definicija. Primijetimo da je mogue da neki vor ima lijevo dijete a nema desno dijete, kao i da neki vor ima desno dijete a ima lijevo dijete. Ove dvije situacije treba jasno razlikovati (kod neureenih binarnih stabala, ove situacije se ne mogu razlikovati). Podstablo koje izlazi iz lijevog djeteta nekog vora nazivamo lijevo podstablo tog vora, dok podstablo koje izlazi iz desnog djeteta nekog vora nazivamo desno podstablo tog vora. Postoji mnogo naina da sistematino obiemo sve vorove nekog ureenog binarnog stabla. U praksi su se kao najvanija pokazala tri naina obilaska koji se nazivaju inorder, preorder i postorder obilazak. Sva tri obilaska definirana su rekurzivno. Ukoliko se stablo sastoji samo od jednog vora, obiemo njega. U suprotnom, kod inorder obilaska prvo rekurzivno obiemo (istim postupkom) lijevo podstablo korijena, zatim korijen, i konano rekurzivno obiemo desno podstablo korijena. Kod preorder obilaska prvo obiemo korijen, a zatim rekurzivno obiemo prvo lijevo, a zatim desno podstablo. Kod postorder obilaska, rekurzivno obiemo prvo lijevo, a zatim desno podstablo, i tek na kraju obiemo korijen. Nije teko vidjeti da se preorder obilazak zapravo svodi na DFS pretragu. Neka je, na primjer, dato binarno stablo kao na sljedeoj slici: x1 x2 x4 x8 x13 x14 x5 x9 x6 x10 x11 x15 x3 x7 x12

21

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 11. (akademska godina 2011/12)

Ukoliko na ovo stablo primijenimo inorder, preorder i postorder obilazak, tada e se vorovi obilaziti u sljedeem redoslijedu: Inorder: Preorder: Postorder: x4, x2, x13, x8, x14, x5, x9, x1, x6, x10, x3, x15, x11, x7, x12 x1, x2, x4, x5, x8, x13, x14, x9, x3, x6, x10, x7, x11, x15, x12 x4, x13, x14, x8, x9, x5, x2, x10, x6, x15, x11, x12, x7, x3, x1

Ovi naini obilaska daju jedan od naina formalnog definiranja ureenog binarnog stabla. Ukoliko binarno stablo ne sadri ni jedan vor (prazno stablo), ono se poistovjeuje sa . U suprotnom, ureeno binarno stablo je ureena trojka (r, L(r), D(r)) gdje je r korijen stabla, dok su L(r) i D(r) lijevo i desno podstablo korijena. Na primjer, za stablo iz prethodnog primjera imamo sljedei formalni opis: (x1, (x2, (x4, , ), (x5, (x8, (x13, , ), (x14, , )), (x9, , ))), (x3, (x6, , (x10, , )), (x7, (x11, (x15, , ), ), (x12, , )))) Naravno, ovo je samo jedan od moguih formalnih naina da se formalno definira ureeno binarno stablo. Mada ovaj nain nekome izgleda kompliciran i vjetaki uveden, on je vjerovatno jedan od najpogodnijih naina (uz propisnu implementaciju) za reprezentaciju binarnih stabala na raunaru. Interesantno je da ukoliko vorovima ureenog binarnog stabla pridruimo vrijednosti takve da su vrijednosti pridruene ma kojem voru vee ili jednake od vrijednosti pridruene njegovom lijevom djetetu a manje ili jednake od vrijednosti pridruene njegovom desnom djetetu, a zatim obiemo vorove inorder obilaskom, vrijednosti vorova u redoslijedu obilaska bie sortirane u rastuem poretku. Mnogi efikasni algoritmi za sortiranje i pretraivanje zasnivaju se na ovom svojstvu. Ureena binarna stabla su naroito pogodna za reprezentaciju aritmetikih izraza (i svih drugih izraza koja se formiraju po slinim sintaksnim pravilima kao i aritmetiki izrazi). Naime, veina izraza ima formu (X Y) pri emu je oznaka neke operacije, dok su X i Y ponovo izrazi, pri emu postoje takvi elementarni izrazi (nazvani atomi) za koje se smatra da ne posjeduju sastavne dijelove (npr. atomi mogu biti brojevi, promjenljive, itd.). Takvi izrazi mogu se vrlo pregledno predstaviti pomou ureenog binarnog stabla kod kojeg je korijenu pridruena oznaka operacije , dok lijevo i desno podstablo korijena odgovaraju izrazima X i Y. Ukoliko je neki izraz atom, njemu odgovara prosti vor kojem je pridruen taj atom. Posmatrajmo, na primjer, izraz A (B C) + D / E. Uz dodavanje malo zagrada, da se oslobodimo potrebe za razmatranjem prioriteta operacija, ovaj izraz se moe napisati u standardnom obliku kao ((A (B C)) + (D / E)). Stoga, ovom izrazu odgovara sljedee ureeno binarno stablo: +
/

Ovako generirano stablo naziva se stablo izraza. Lako je vidjeti da se iz ovakvog stabla moe vrlo jednostavno rekonstruirati izraz koji je generirao stablo prostim inorder obilaskom vorova, uz dodavanje malo zagrada. Reprezentacija izraza pomou stabla izraza lei u osnovi algoritama za izraunavanje vrijednosti izraza, kao i za simbolike manipulacije sa izrazima, poput diferenciranja, pojednostavljenja izraza, itd. Veoma interesantne situacije dobijamo ukoliko na vorove stabla primijenimo preorder ili postorder obilazak (bez umetanja ikakvih dodatnih simbola poput zagrada, itd.). Na primjer, preorder obilaskom

22

Dr. eljko Juri: Diskretna matematika Radna skripta za kurs Diskretna matematika na Elektrotehnikom fakultetu u Sarajevu

Predavanje 11. (akademska godina 2011/12)

vorova prethodnog stabla dobijamo sekvencu + A B C / D E. Ovako dobijena sekvenca naziva se prefiksni oblik ili poljska notacija razmatranog izraza. Iz prefiksnog oblika je takoer mogue rekonstruirati polazni izraz. Naime, svaki dio prefiksnog izraza koji ima oblik X Y gdje su X i Y atomi ili izrazi koji su ve pretvoreni u standardni oblik interpretira se kao (X Y), i postupak se ponavlja sve dok se moe primjenjivati. Na primjer, za prethodno napisani prefiksni oblik izraza imamo sljedeu seriju pretvorbi dok ne doemo do standardnog oblika izraza: +ABC/DE + A (B C) / D E + A (B C) (D / E) + (A (B C)) (D / E) ((A (B C)) + (D / E)) Naziv poljska notacija potie od poljskog matematiara J. Lukasiewitza, koji je ovu notaciju otkrio u pokuaju da pronae nain zapisivanja aritmetikih izraza koji ne trai niti zagrade, niti ikakve konvencije o prioritetima pojedinih operacija. Vidimo da poljska notacija ispunjava taj zahtjev, s obzirom da se izrazi zapisani u poljskoj notaciji mogu uvijek korektno interpretirati bez potrebe da se zadaju bilo zagrade, bilo da se poznaje prioritet operacija. Ukoliko na stablo izraza primijenimo postorder obilazak, dobijamo jo jedan nain zapisa aritmetikih izraza koji ne zahtijeva niti zagrade, niti konvencije o prioritetima. Ovaj nain naziva se postfiksni oblik, obrnuta poljska notacija ili RPN (od engl. Reverse Polish Notation) zapis. Naziv obrnuta poljska notacija potie od injenice da je ona, na izvjestan nain, obrnuta u odnosu na poljsku notaciju. Na primjer, RPN zapis izraza iz prethodnog primjera glasi A B C D E / +. Izrazi zapisani u RPN obliku su najpogodniji za interpretaciju od svih moguih zapisa aritmetikih izraza, s obzirom da zahtijevaju analizu izraza samo sekvencijalno slijeva nadesno (kod svih drugih zapisa, izraz se mora prilikom interpretacije analizirati naprijed-nazad). Interpretaciju izraza zapisanih u RPN zapisu najpogodnije je izvriti ovako. Izraz interpretiramo slijeva nadesno, pri emu svaki atom na koji naiemo smjetamo na kraj jedne liste koja je na poetku prazna. Pri nailasku na znak neke operacije, ona se primjenjuje na posljednja dva elementa u listi, koji se nakon toga izbacuju iz liste i zamjenjuju rezultatom date operacije. Postupak se ponavlja sve dok ne doemo do kraja zapisa. Ukoliko je zapis korektan, na kraju bi u listi trebao ostati samo jedan element, koji ujedno predstavlja vrijednost (interpretaciju) izraza. Na primjer, za prethodni izraz u RPN obliku postupak interpretacije tee ovako: A A, B A, B, C A, (B C) (A (B C)) (A (B C)), D (A (B C)), D, E (A (B C)), (D / E) ((A (B C)) + (D / E)) S obzirom na lakou interpretacije i velike fleksibilnosti RPN zapisa, ovaj nain zapisa aritmetikih izraza lei u osnovi gotovo svih algoritama za manipulaciju sa aritmetikim izrazima.

23

You might also like