4.4. SPECIALIEJI GRAFŲ ALGORITMAI 5 4.4. Specialieji graf algorimai Šiame krije ipažinime grafo iršūni peržiūro algorimai ir jų aikmai prendžian įairi informaiko ždaini. Kiekiena grafo iršūnę galime paieki ir ieiogiai, nadodami jo adrea, agoma iršūni mae. Čia nagrinėime grafo apėjimo algorim, kai iš ieno iršūnė galime paeki ik į jai greima iršūne. Jdėdami grafo brianomi rime aplanki ia likia grafo iršūne, be o kiekiena iršūnę nagrinėjame ik iena kara. Sipažinime diem arbiaiai meodai: paieško giln meod, paieško plan meod, įerinime jų dėingma ir parodime, kaip šie meodai nadojami prendžian opologinio rūšiaimo ir rmpiaio kelio radimo ždaini. 4.4.. Topologinio rūšiaimo algorimai Topologinio rūšiaimo ždainį formlaome krije, kriame nagrinėjome rūšiaimo algorim. Tačia najai ždain gerokai kiriai no įprainio kaiči ar abecėlinio rūšiaimo. Pirmiaia paeikime iklenį opologinio rūšiaimo ždainio formlaima. Trime orienoa grafa G = (V, E), kriame nėra ciklų. Grafo iršūne reikia žmėi aip, kad kiekiena briana jng maženio nmerio iršūnę didenio nmerio iršūne. Topologinio rūšiaimo ždainio prendimo pad ra paeika 4. paeikle. Paieško giln meoda Šio paieško raegija ra papraa: iš dooio iršūnė einame į jai greima, paieško me dar neaplanka grafo iršūnę. Jei oki iršūni nėra, ai grįžame iena žingnį agal ir ieškome najo kelio iš ėo iršūnė. Taip randame ia iršūne, kria galima paieki iš pairinko pradinė iršūnė. Jei grafa nėra jng, ai algorima karojame imdami naja dar neaplanka pradinę iršūnę. Kadangi paieško me pirmiaia aplankome labiaiai nolia iršūne, ai meoda adiname paieško giln meod (angl. deph fir earch). Kiekiena grafo iršūnė gali būi ienoje iš rijų būen (būena žmėime kiringomi palomi). Pradžioje io iršūnė ra neaplanko ir dažomo bala pala. Kai iršūnė pirma kara aplankoma, ji ampa nenaja ir dažoma
6 4 SKYRIUS. ALGORITMAI GRAFUOSE A C 3 A C D E D 6 E 4 F G 7 F G 5 a) b) C A E G D F c) 4. pa. Grafo irš ūnių opologini r ūšiaima: a) pradini grafa, b) r ūšioa grafa, c) grafo irš ūnių išḋema ieėje pilka pala. Laiko momena, kada ji apo nenaja, agome mao elemene d() (angl. dicoered). Viršūnė ndažoma joda pala, kai išnagrinėjamo io iš jo išeinačio briano, okio iršūnė ra adinamo išemomi. Laiko momena, kada iršūnė apo joda, agome mao elemene f() (angl. finihed). Paieško keli įimename mae π, jo elemeno π() reikšmė ra iršūnė, iš krio pirmą kara aplankėme,.. π() =. Paieško giln algorima DephFirSearch (G) begin () for ( V ) { () pala() = bala; (3) π() = NULL; (4) = ; (5) for ( V ) (6) if ( pala() == bala ) (7) DFS_Vii(); end DephFirSearch
4.4. SPECIALIEJI GRAFŲ ALGORITMAI 7 Paeikiame rekr iršūni aplankmo algorima. DFS_Vii () begin () pala() = pilka; (3) = +, d() = ; (4) for ( N() ) (5) if ( pala() == bala ) { (6) π() = ; (7) DFS_Vii(); (8) pala() = joda; (9) = +, f() = ; end DFS_Vii 6 3 5 4 7 4. pa. Paieško giln meod aplankų irš ūnių eiliškma ir keliai 4.7 pad. Grafo iršūni lankma paieško giln meod. Imkime grafa, paaidoa 4.3 paeiklo a dalje. Jo iršūne ieškome nadodami paieško giln meoda. Viršūni lankmo eiga po kiekieno kreipinio į DFS_Vii fnkcija ra paaidoa paeiklo a l dale. Viršūnee paeiko (d(), f()) reikšmė. 4. paeikle paaidoa gaai grafa G π = (V, E π ): E π = {(π(), ) : V, π() NULL. Viršūnė nmeri rodo jo radimo eiliškma. Algorimo dėingmo įerinima. Įerinime paieško giln algorimo dėingma. Procedūroje DephFirSearch () ir (3) eikmai aliekami V kar. (5) cikla irgi karojama V karų ir kiekienai iršūnei iena kara kdome
8 4 SKYRIUS. ALGORITMAI GRAFUOSE / / / / / / / / 4/ a) b) c) d) / / 7/ / / / 6/ / 6/ / 6/ e) f) g) h) / / / /4 / 6/ / 6/ / 6/ /3 6/ 9/ 9/ 9/ i) j) k) l) 4.3 pa. Grafo irš ūnių aplankma paieško giln meod 9/ DFS_Vii procedūra. Jo me aliekame O() eikm (), (3), (8) ir (9) algorimo žingnioe. (4) cikla karojama N() kar, odėl bendra paieško giln algorimo apimi ra O( V + E ) eikmų. Grafo iršūni opologini rūšiaima Pabaigę paieško giln algorima, randame grafa G π = (V, E π ). Norėdami gai rūšioa iršūni aibę modifikojame DFS_Vii procedūra, jo pabaigoje iršūnę įerpiame į ieinio ąrašo pradžia: (8) pala() = joda; (9) = +, f() = ; () Li.InerHead (); end DFS_Vii 4.8 pad. Grafo iršūni opologini rūšiaima. Nagrinėkime grafa, paeika 4.4a paeikle. Jo opologiškai rūšio iršūni ąraša paaidoa 4.4b paeikle.
4.4. SPECIALIEJI GRAFŲ ALGORITMAI 9 3 5 6 7 a) b) 4 4.4 pa. Grafo irš ūnių opologini r ūšiaima: a) pradini grafa, b) r ūšioo irš ūṅe 4.4.. Trmpiaio kelio radima labirine Trime grafa G = (V, E). Grafo briano nėra įerino, odėl laikime, kad ių brian ilgiai ra lg ienei. Reikia rai rmpiaia kelia no dooio iršūnė V iki liki grafo iršūni. Kelio ilgi ampa arpini brian kaičimi. Įdom šio ždainio aeji ra rmpiaio kelio paieška labirine, kai žinome įėjimo iršūnę ir reikia rai kelia, edanį link išėjimo. Aišk ir okį ždainį galime pręi Deikro meod, ačia najai ždain ra papraeni, ne ių brian ilgiai ra ienodi. Todėl galime ikėi kri efekeni okio ždainio prendimo meod. Paieško plan meoda Šio paieško raegija ra okia: pirmiaia nagrinėjame iršūne, greima pradinei iršūnei, po o kaimn greima iršūne ir aip olia, kol randame ia iršūne, paiekiama iš iršūnė. Grafa gali būi orienoa arba neorienoa. Tokia raegija ra adinama paieško plan meod (angl. breadh fir earch). Panašiai kaip ir paieško giln meode iršūnė gali būi ndaža iena iš rijų pal: balo jei ji dar neraa, pilko iršūnė ja aplanka, be dar ne ii jo kaimnai ra paikrini, ir jodo kai paikrino io greimo iršūnė. Vio pilko iršūnė daro paieško frona, o jodo iršūnė ra apgabo šio frono. Jeig briana (, ) E ir ra jodo palo iršūnė, ai gali būi ik jodo arba pilko palo. Taigi neaplank (bal) iršūni ženka ieškoi ik pilko palo iršūni aplinkoe N(). Pilko palo iršūne agome eilėje Q (priminime, kad eilėje galioja FIFO
3 4 SKYRIUS. ALGORITMAI GRAFUOSE principa: iš ąrašo pirmiaia išimama a elemena, kri ankčiaiai paeko į eilę). Paieško plan algorima readhfirsearch (G) begin () for ( V ) { () pala () = bala; (3) π() = NULL, d() = ; (4) d() =, Q.InerRear (); (5) hile ( Q ) { (6) = Q.TakeHead(); (7) for ( N() ) (8) if ( pala () == bala ) { (9) pala () = pilka; () π() =, d() = d() + ; () Q.InerRear (); () pala () = joda; end readhfirsearch Trmpiaia kelia no iršūnė iki iršūnė randame panadodami mao π reikšme. Paeikiame algorima, kri šį kelia padina airkščia arka no pakinė iršūnė iki pradinė iršūnė. () = ; () hile ( NULL) { (3) prin (); (4) = π(); Jeig norime apadini rmpiaia kelia no pradinė iršūnė iki iršūnė, ai algorimo (3) žingnje iršūnę žrašome į ieinio arašo pradžia, o po o apadiname gaajį araš a. Taip pa galime dari padinimo procedūra, nadojan rekrija. 4.9 pad. Trmpiaio kelio radima. Imkime grafa, paaidoa 4.5 paeiklo a dalje. Jo iršūne aplankome paieško plan meod,
4.4. SPECIALIEJI GRAFŲ ALGORITMAI 3 pradinė iršūnė ra. Paeiklo a-f dale paaidoa rmpiaio kelio formaima po kiekieno paieško algorimo (5) ciklo žingnio. Paeiklo f dalje paaidoa grafa G π = (V, E π ) E π = {(π(), ) : V, π() NULL, kri ir apibrėžia rmpiai keli no pradinė iršūnė iki liki grafo G iršūni. Viršūnė nmeri rodo jo ama no. r Q r r Q r Q r a) b) c) r r 3 Q r Q r Q d) e) f) 4.5 pa. Trmpiaio kelio radima paieško plan meod Algorimo dėingmo įerinima. Ma pradini reikšmi kaičiaimo apimi ra O( V ) eikm. Kiekiena grafo iršūnė ra alpinama į eilę ne dagia nei iena kara, odėl ir išima iš eilė ji gali būi ik iena kara. Elemeno alpinimo į eilė galą ir šalinimo iš eilė pradžio dėingma ra O(). Kiekieno iršūnė kaimn nagrinėjame ik iena kara, kai iršūnę šaliname iš eilė, odėl (8) () žingniai ra aliekami E kar orienoame grafe ir E kar neorienoame grafe. Taigi paieško plan algorimo apimi ra O( V + E ).
3 4 SKYRIUS. ALGORITMAI GRAFUOSE Algorimo eiingmo analiė. Trime grafa G = (V, E), krio ių brian ilgiai ra lgū ienei. Pažmėkime δ(, ) ilgį rmpiaio kelio no iršūnė iki kio iršūnė, be o arime, kad δ(, ) =, jei ra nepaiekiama iš. Tada paieško plan algorimo eiingma eka iš okio lemo: 4. lema. Kiekienam naūriniam kaičii k egioja ok paieško plan algorimo kdmo momena, kai eiingi šie eiginiai. Vio iršūnė iki kri ama ra maženi ž k ra jodo palo, lg k pilko palo ir dideni ž k balo palo.. Eilėje Q ra agomo io pilko iršūnė. 3. Mao d elemeno reikšmė d() ra lgi rmpiaio kelio ilgii, jei ra joda arba pilka iršūnė. 4. Jeig ra pilka arba joda iršūnė, ai δ(, π()) = δ(, ), o briana (π(), ) E.