kri Algoritmai grafoe.. Specialieji grafų algoritmai Šiame krije ipažinime grafo iršūnių peržiūro algoritmai ir jų taikmai, prędami įairi informatiko ždaini. Kiekieną grafo iršūnę galime paiekti ir tieiogiai, nadodami jo adreą, agomą iršūnių mae. Čia nagrinėime grafo apėjimo algoritm, kai iš ieno iršūnė galime patekti tik į jai gretima iršūne. Jdėdami grafo brianomi, trime aplankti ia likia grafo iršūne, be to, kiekieną iršūnę nagrinėjame tik ieną kartą. Sipažinime diem arbiaiai metodai: paieško giln metod, paieško platn metod, ir įertinime jų dėtingmą bei parodime, kaip šie metodai taikomi prendžiant topologinio rūšiaimo ir trmpiaio kelio radimo ždaini.... Topologinio rūšiaimo algoritmai Topologinio rūšiaimo ždainį formlaome krije, kriame nagrinėjome rūšiaimo algoritm. Tačia najai ždain gerokai kiriai no įpratinio kaičių ar abėcėlinio rūšiaimo. Pirmiaia pateikime tiklenį topologinio rūšiaimo ždainio formlaimą. Trime orientotąjį grafą G = (V, E), kriame nėra ciklų. Grafo
SKYRIUS. ALGORITMAI GRAFUOSE iršūne reikia žmėti taip, kad kiekiena briana jngtų maženio nmerio iršūnę didenio nmerio iršūne. Topologinio rūšiaimo ždainio prendimo pad pateikta. paeikle. 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). pa. Grafo iršūnių topologini rūšiaima: a) pradini grafa, b) rūšiota grafa, c) grafo iršūnių išdėtma tieėje Paieško giln metoda Šio paieško trategija ra paprata: iš dotoio iršūnė einame į jai gretimą, paieško met dar neaplanktą grafo iršūnę. Jei tokių iršūnių nėra, tai žengiame ieną žingnį atgal ir ieškome najo kelio iš tėo iršūnė. Taip randame ia iršūne, kria galima paiekti iš pairinkto pradinė iršūnė. Jei grafa nėra jngi, tai algoritmą kartojame, imdami nają dar neaplanktą pradinę iršūnę. Kadangi paieško met pirmiaia aplankome labiaiai ntolia iršūne, tai metodą adiname paieško giln metod (angl. depth firt earch). Kiekiena grafo iršūnė gali būti ienoje iš trijų būenų (būena žmėime kirtingomi palomi). Pradžioje io iršūnė ra neaplankto ir dažomo balta pala. Kai iršūnė aplankoma pirmą kartą, ji tampa nenaja ir dažoma pilka pala. Laiką, kada ji tapo nenaja, agome mao elemente d() (angl. dicoered). Viršūnė ndažoma joda pala, kai išnagrinėjamo io iš jo išeinančio briano, tokio iršūnė ra adinamo
.. SPECIALIEJI GRAFŲ ALGORITMAI 3 išemtoiomi. Laiko momentą, kada iršūnė tapo joda, agome mao elemente f() (angl. finihed). Paieško keli įimename mae π, jo elemento π() reikšmė ra iršūnė, iš krio pirmą kartą aplankėme, t.. π() =.
4 SKYRIUS. ALGORITMAI GRAFUOSE Paieško giln algoritma DepthFirtSearch (G) begin () for ( V ) do () pala() = balta; (3) π() = NULL; (4) t = ; (5) for ( V ) do (6) if ( pala() == balta ) then (7) DFS_Viit(); end if end DepthFirtSearch Pateikiame rekrųjį iršūnių aplankmo algoritmą. DFS_Viit () begin () pala() = pilka; (3) t = t +, d() = t; (4) for ( N() ) do (5) if ( pala() == balta ) then (6) π() = ; (7) DFS_Viit(); end if (8) pala() = joda; (9) t = t +, f() = t; end DFS_Viit. pad. Grafo iršūnių lankma paieško giln metod. Imkime grafą, paaidotą. paeiklo a dalje. Jo iršūne ieškome taikdami paieško giln metodą. Viršūnių lankmo eiga po kiekieno kreipinio į DFS_Viit fnkciją paaidota paeiklo a i dale ir.3 paeiklo j l dale. Viršūnėe pateikto (d(), f()) reikšmė..3 paeiklo m dalje taip pat paaidota gatai grafa G π = (V,E π ): E π = {(π(),) : V, π() NULL}.
.. SPECIALIEJI GRAFŲ ALGORITMAI 5 / / / / / / a) b) c) / / / / / 6/ 4/ d) e) f) / 7/ / 7/8 / 7/8 / 6/ / 6/ / 6/ g) h) i) 9/. pa. Grafo iršūnių aplankma paieško giln metod (algoritmo pradžia) Viršūnė nmeri rodo jo radimo eiliškmą. Algoritmo dėtingmo įertinima. Įertinime paieško giln algoritmo dėtingmą. Procedūroje DepthFirtSearch () ir (3) eikmai atliekami V kartų. (5) cikla irgi kartojama V kartų ir kiekienai iršūnei ieną kartą kdome DFS_Viit procedūrą. Jo met atliekame O() eikmų (), (3), (8) ir (9) algoritmo žingniai. (4) cikla kartojama N() kartų, todėl bendra paieško giln algoritmo apimti ra O( V + E ) eikmų. Topologini grafo iršūnių rūšiaima aigę paieško giln algoritmą, randame grafą G π = (V,E π ). Norėdami gati rūšiotą iršūnių aibę, modifikojame DFS_Viit procedūrą, jo
6 SKYRIUS. ALGORITMAI GRAFUOSE / 7/8 / 7/8 / 6/ / 6/ 9/ 9/ /4 j) k) 7/8 6 /3 6/ 5 3 9/ 4 7 l) m).3 pa. Grafo iršūnių aplankma paieško giln metod (algoritmo tęin) ir aplanktų iršūnių eiliškma bei keliai pabaigoje iršūnę įterpiame į tieinio ąrašo pradžią: DFS_ViitSort () begin () pala() = pilka; (3) t = t +, d() = t; (4) for ( N() ) do (5) if ( pala() == balta ) then (6) π() = ; (7) DFS_ViitSort(); end if (8) pala() = joda; (9) t = t +, f() = t; () Lit.InertHead (); end DFS_ViitSort. pad. Grafo iršūnių topologini rūšiaima. Nagrinėkime grafą, pateiktą.4 a paeikle. Jo topologiškai rūšiotų
.. SPECIALIEJI GRAFŲ ALGORITMAI 7 iršūnių ąraša paaidota.4 b paeikle. 3 5 6 7 4 a) b).4 pa. Grafo iršūnių topologini rūšiaima: a) pradini grafa, b) rūšioto iršūnė... Trmpiaio kelio radima labirinte Trime grafą G = (V, E). Grafo briano nėra įertinto, todėl teigime, kad ių brianų ilgiai lgū ieneti. Reikia rati trmpiaią kelią no dotoio iršūnė V iki likių grafo iršūnių. Kelio ilgi tampa tarpinių brianų kaičimi. Įdom šio ždainio ateji ra trmpiaio kelio paieška labirinte, kai žinome įėjimo iršūnę, ir reikia rati kelią, edantį išėjimo link. Aišk, ir tokį ždainį galime pręti Dijktro metod, tačia najai ždain ra paprateni, ne ių brianų ilgiai ra ienodi. Todėl galime tikėti krti efekteni tokio ždainio prendimo metod. Paieško platn metoda Šio paieško trategija ra tokia: pirmiaia nagrinėjame iršūne, gretima pradinei iršūnei, paki kaimnų gretima iršūne ir taip tolia, kol randame ia iršūne, paiekiama iš iršūnė. Grafa gali būti orientota arba neorientota. Tokia trategija adinama paieško platn metod (angl. breadth firt earch). Panašiai kaip ir paieško giln metode, iršūnė gali būti ndažta iena iš trijų palų: balto jei ji dar nerata, pilko iršūnė ja aplankta, bet dar ne ii jo kaimnai ra patikrinti, ir jodo kai patikrinto io gretimo iršūnė. Vio pilko iršūnė daro paieško frontą, o jodo iršūnė ra apgabto šio fronto. Jeig briana (,) E ir ra jodo palo
8 SKYRIUS. ALGORITMAI GRAFUOSE iršūnė, tai gali būti tik jodo arba pilko palo. Taigi neaplanktų (baltų) iršūnių žtenka ieškoti tik pilko palo iršūnių aplinkoe N(). Pilko palo iršūne agome eilėje Q (priminime, kad eilėje galioja FIFO principa: iš ąrašo pirmiaia išimama ta elementa, kri ankčiaiai pateko į eilę). Paieško platn algoritma readthfirtsearch (G) begin () for ( V ) do () pala () = balta; (3) π() = NULL, d() = ; (4) d() =, Q.InertRear (); (5) hile ( Q ) do (6) = Q.TakeHead(); (7) for ( N() ) do (8) if ( pala () == balta ) then (9) pala () = pilka; () π() =, d() := d() + ; () Q.InertRear (); end if () pala () = joda; end readthfirtsearch Trmpiaią kelią no iršūnė iki iršūnė randame nadodami mao π reikšme. Pateikiame algoritmą, kri šį kelią padina atirkščia tarka no paktinė iršūnė iki pradinė iršūnė. PrintPath () begin () = ; () hile ( NULL) do (3) print (); (4) = π(); end PrintPath
.. SPECIALIEJI GRAFŲ ALGORITMAI 9 Jeig norime išpadinti trmpiaią kelią no pradinė iršūnė iki iršūnė, tai algoritmo (3) žingni iršūnę žrašome į tieinio ąrašo pradžią, o paki išpadiname gatąjį ąrašą. Taip pat galime darti padinimo procedūrą, nadodami rekriją..3 pad. Trmpiaio kelio radima. Imkime grafą, paaidotą.5 paeiklo a dalje. Jo iršūne aplankome paieško platn metod, kai pradinė iršūnė ra. Paeiklo a f dale paaidota, kaip formojama trmpiaia kelia po kiekieno paieško algoritmo (5) ciklo žingnio. Paeiklo f dalje paaidota grafa G π = (V,E π ) E π = {(π(),) : V, π() NULL}, kri ir apibrėžia trmpiai keli no pradinė iršūnė iki likių grafo G iršūnių. Viršūnė nmeri rodo jo attmą no. r Q r t r Q t r Q t r a) b) c) t r t r t 3 Q r t Q r t Q d) e) f).5 pa. Trmpiaio kelio radima paieško platn metod Algoritmo dėtingmo įertinima. Maų pradinių reikšmių kaičiaimo apimti ra O( V ) eikmų. Kiekiena grafo iršūnė eilėje būna ne dagia nei ieną kartą, todėl ir išimta iš eilė ji gali būti tik ieną kartą.
SKYRIUS. ALGORITMAI GRAFUOSE Elemento pateikimo eilė gale ir šalinimo iš eilė pradžio dėtingma ra O(). Kiekieno iršūnė kaimn nagrinėjame tik ieną kartą, kai iršūnę šaliname iš eilė, todėl (8) () žingniai ra atliekami E kartų orientotajame grafe ir E kart neorientotajame grafe. Taigi paieško platn algoritmo apimti ra O( V + E ). Algoritmo teiingmo analiė. Trime grafą G = (V, E), krio ių brianų ilgiai ra lgū ieneti. Trmpiaio kelio no iršūnė iki kito iršūnė ilgį pažmėime δ(, ), be to, tarime, kad δ(, ) =, jei ra nepaiekiama iš. Kol ka dar nežinome, ar iada pilkom ir jodom iršūnėm galioja lgbė d() = δ(, ). Paieško platn algoritmo teiingma eka iš tokio lemo (žr. [?]).. lema. Kiekienam natūriniam kaičii k egitoja tok paieško platn algoritmo kdmo momenta, kai teiingi šie teiginiai:. Vio iršūnė, attma iki krių ra maženi ž k, ra jodo palo, attma lg k pilko palo ir dideni ž k balto palo.. Eilėje Q ra agomo io pilko iršūnė. 3. Mao d elemento reikšmė d() ra lgi trmpiaio kelio ilgii, jei ra joda arba pilka iršūnė. 4. Jeig ra pilka arba joda iršūnė, tai δ(,π()) = δ(,), o briana (π(),) E. Įrodma. Lemą įrodime taikdami matematinė indkcijo metodą. Pirmiaia patikrinime, kad ii teiginiai ra teiingi, kai k =. Tikrai, tada tik pradinė iršūnė ra pilko palo iršūnė, io kito iršūnė ra balto, o attma iki jų ra ne maženi ž ienetą. Viršūnę agome eilėje Q, o d() =. e to, π() = NULL, todėl ir (4) lemo teigin ra teiinga. Dabar tarkime, kad lema ra teiinga, kai k = j. Įrodime, kad tada egitoja tok paieško platn algoritmo kdmo momenta, kai ii lemo teiginiai ra teiingi ir kai k = j+. Pažmėkime Q(j),W(j) pilkų ir baltų iršūnių aibe, kria ganame kddami k = j algoritmą. Vkddami algoritmą iš Q, išimame pilka iršūne, jų balta kaimne dažome pilka pala ir dedame į eilė Q galą. Išimta iršūne ndažome joda pala. Remianti eilė domenų trktūro abėmi, iš Q pirmiaia b išimto ankčiaiai ten patekio iršūnė. Nagrinėkime momentą,
.. SPECIALIEJI GRAFŲ ALGORITMAI kai ja išimto io pilko iršūnė, ten patekio prieš pradedant (j + ) etapą, ir tik jo, t.. aibė Q(j) iršūnė. Jodo palo iršūnėmi tapo io Q(j) iršūnė iki šiol bio pilkomi. Jų d() reikšmė nepaikeitė, todėl, remianti lemo (3) teigini, d() = j. Taigi dali lemo () teiginio ra teiinga jei attma iki iršūnė ra maženi ž (j +), tai iršūnė ra joda. Dabar parodime, kad jei d() = j+, tai ra pilko palo iršūnė. Pilkomi iršūnėmi tapo to balto iršūnė W(j), krio bo gretimo eilėje Q(j) agotom iršūnėm. e to, remianti indkcine prielaida, d() = j, jei Q(j). Todėl ganame, kad najom pilkom iršūnėm teiinga lgbė d() = d()+ = j +. Lieka įitikinti, kad ši attma apkaičiota teiingai. Tieiogine briana (, ) jngtų iršūnių attmam galioja nelgbė δ(,) δ(,)+, ne galbūt trmpiaia kelia no iki neina per. Remdamiei šia nelgbe ir įerčiai δ(,) = j, jei Q(j), δ(,) j +, jei W(j), ganame, kad į eilę Q patekių iršūnių attmai ra δ(,) = j +. Vio šio iršūnė ra pilko, jų attmai įertinti teiingomi reikšmėmi d() = j +. Dabar įrodime, kad pilkomi tapo io iršūnė, krių attmai iki ra lgū (j +). Tarkime, kad δ(,) = j +, tada būtinai egitoja tokia gretima iršūnė, kad δ(,) = j. Iš tieų, trmpiaiame kelje no iki imkime paktinę brianą (,). Tada trime j ilgio kelią, edantį į, o trmpenio kelio ir negali būti, atiželgiant į indkcinę prielaidą. Vadinai, bo pilka iršūnė ir priklaė eilei Q(j), todėl kažkrio algoritmo žingni b gretima kriai nor eilėje Q(j) agotai iršūnei (nebūtinai ) ir ji b pateikta aibėje Q(j +). Iš pateikto analiė ir paieško platn algoritmo išeina, kad taip pat galioja (3) ir (4) lemo teiginiai.
SKYRIUS. ALGORITMAI GRAFUOSE