4 skyrius Algoritmai grafuose 4.1. Grafų teorijos uždaviniai Grafai Tegul turime viršūnių aibę V = { v 1,v 2,...,v N } (angl. vertex) ir briaun

Panašūs dokumentai
Algoritmø analizës specialieji skyriai

Algoritmai ir duomenų struktūros (ADS) 7 paskaita Saulius Ragaišis, VU MIF

GRAFŲ TEORIJA Pasirenkamasis kursas, Magistrantūra, 3 sem m. rudens semestras Parengė: Eugenijus Manstavičius Įvadas Pirmoji kurso dalis skirta

lec10.dvi

PowerPoint Presentation

MatricosDetermTiesLS.dvi

Atranka į 2019 m. Pasaulinę ir Vidurio Europos matematikos olimpiadas Sprendimai Artūras Dubickas ir Aivaras Novikas 1. Mykolas sugalvojo natūraliųjų

9 paskaita 9.1 Erdvės su skaliarine daugyba Šiame skyriuje nagrinėsime abstrakčias tiesines erdves, kurioms apibrėžta skaliarinė daugyba. Jos sudaro l

Lietuvos mokinių matematikos olimpiada Rajono (miesto) etapo užduočių klasei sprendimai 2015 m. 1 uždavinys. Aistė užrašė skaičių seką: 1 (2 3)

10 Pratybos Oleg Lukašonok 1

Algebra ir geometrija informatikams. Paskaitu¾ konspektas Rimantas Grigutis 7 paskaita Matricos. 7.1 Apibr eµzimas. Matrica A yra m eiluµciu¾ir n stul

* # * # # 1 TIESĖS IR PLOKŠTUMOS 1 1 Tiesės ir plokštumos 1.1 Lygtys ir taškų aibės Sferos lygtis Tarkime, kad erdvėje apibrėžta Dekarto stačiak

LIETUVOS JAUNŲJŲ MATEMATIKŲ MOKYKLA 7. PAPRASČIAUSIOS DIFERENCIALINĖS LYGTYS ( ) Teorinę medžiagą parengė ir septintąją užduotį sudarė prof. d

TIESINĖ ALGEBRA Matricos ir determinantai Matricos. Transponuota matrica. Nulinė ir vienetinė matrica. Kvadratinė matrica. Antrosios ir trečiosios eil

DISKREČIOJI MATEMATIKA. Grafai serija 5800 variantas 001 Grafas G 1 = (V, B 1 ) apibrėžtas savo viršūnių bei briaunų aibėmis: V = {i, p, z, u, e, s},

PowerPoint Presentation

QR algoritmas paskaita

Algoritmai ir duomenų struktūros (ADS) 2 paskaita Saulius Ragaišis, VU MIF

III. SVEIKI NENEIGIAMI SKAIČIAI 3.1 Indukcijos aksioma Natūraliu ju skaičiu aibės sa voka viena svarbiausiu matematikoje. Nors natūralaus skaičiaus sa

PS_riba_tolydumas.dvi

Printing AtvirkstineMatrica.wxmx

Teorinių kontrolinių sąlygos ir sprendimai Vytautas Kazakevičius 2016 m. gruodžio 20 d. Teiginiai ( ). 1. (0.05 t.) Užrašykite formule tokį t

Printing triistr.wxmx

Slide 1

L I E T U V O S J A U N Ų J Ų M A T E M A T I K Ų M O K Y K L A 2. TRIKAMPIŲ ČEVIANOS ( ) Teorinę medžiagą parengė ir antrąją užduotį sudarė V

(Microsoft Word - Pasiruo\360imas EE 10 KD-1)

VI. TOLYDŽIU IR DIFERENCIJUOJAMU FUNKCIJU TEOREMOS 6.1 Teoremos apie tolydžiu funkciju tarpines reikšmes Skaitytojui priminsime, kad nagrinėdami reali

VERSLO IR VADYBOS TECHNOLOGIJŲ PROGRAMA

Printing BaziniaiSprendiniai&KrastutiniaiTaskai.wxm

DISKREČIOJI MATEMATIKA. Grafo tyrimas serija 5705 variantas Grafas (, ) yra 1 pilnasis; 2 tuščiasis; 3 nulinis; 4 dvidalis. 2 Atstumas tarp graf

DB sukūrimas ir užpildymas duomenimis

Neiškiliojo optimizavimo algoritmas su nauju bikriteriniu potencialiųjų simpleksų išrinkimu naudojant Lipšico konstantos įvertį

TAIKOMOJI MATEMATIKA. 1-ojo testo pavyzdžiai serija **** variantas 001 x x + 12 lim = x 4 2x 8 1 2; 3 0; 2 1 2; 5 1; 6 2; 7 ; riba nee

XI skyrius. KŪNAI 1. Kūno sa voka Šiame skyriuje nagrinėsime kūnus. Kūnas tai aibė k, kurioje apibrėžti aibės k elementu du vidiniai kompozicijo

Microsoft PowerPoint Dvi svarbios ribos [Read-Only]

Slide 1

Longse Wi-Fi kameros greito paleidimo instrukcija 1. Jums prireiks 1.1. Longse Wi-Fi kameros 1.2. Vaizdo stebėjimo kameros maitinimo šaltinio 1.3. UTP

Slide 1

Microsoft PowerPoint Ekstremumai_naujas

Vigirdas Mackevičius 2. Sekos riba Paskaitu konspektas Intuityviai realiu ju skaičiu seka vadinama realiu ju skaičiu aibė, kurios elementai (vadinami

Duomenų vizualizavimas

Banko_paslaugu_internetu_teikimo_salygos_

Magistro darbas

Ginčo byla Nr LIETUVOS BANKO PRIEŽIŪROS TARNYBOS FINANSINIŲ PASLAUGŲ IR RINKŲ PRIEŽIŪROS DEPARTAMENTO DIREKTORIUS SPRENDIMAS DĖL A. G. IR

VILNIAUS UNIVERSITETAS MATEMATIKOS IR INFORMATIKOS FAKULTETAS PROGRAMŲ SISTEMŲ KATEDRA Atsitiktinės paieškos optimizavimo algoritmų vertinimas Evaluat

Lietuvos korupcijos žemėlapis m. GYVENTOJŲ IR VERSLO ATSTOVŲ KORUPCIJOS VERTINIMŲ IR PATIRTIES TYRIMAI

Dažniausios IT VBE klaidos

Logines funkcijos termu generavimo algoritmas pagristas funkciniu modeliu

Layout 1

Microsoft Word - 15_paskaita.doc

RR-GSM_IM_LT_110125

Projektas

Isvestiniu_taikymai.dvi

6. ŠAKNIES RADIMO ALGORITMAS Istorija. Babiloniečių arba Herono algoritmas. Jau žiloje senovėje reikėjo mokėti traukti kavadratinę šaknį. Yra išlikęs

_SGD_SPRENDINIAI TARYBAI_AR SANTRAUKA_12005

LIETUVOS ŽEMĖS ŪKIO UNIVERSITETAS

Kauno menų darželis Etiudas Mgr. Virginija Bielskienė, direktorės pavaduotoja ugdymui, II vad. kategorija, auklėtoja metodininkė Žaidimas pagrindinė i

Microsoft Word - DV_Rekomendacijos2

Slide 1

Projektas „Europos kreditų perkėlimo ir kaupimo sistemos (ECTS) nacionalinės koncepcijos parengimas: kreditų harmonizavimas ir mokymosi pasiekimais gr

PATVIRTINTA Kauno sporto mokyklos Startas Direktoriaus 2019 m. balandžio 23 d. įsakymu Nr KAUNO SPORTO MOKYKLOS STARTAS PRIVATUMO POLITIKA Kauno

1. Matematinės dėlionės Įvadas Šiame modulyje pateiktos įvairaus sudėtingumo matematinės dėlionės. Jos padės mokytis skaičiuoti mintinai ir rasti įvai

UGDYMO PLĖTOTĖS CENTRO DIREKTORIUS ĮSAKYMAS DĖL UGDYMO PLĖTOTĖS CENTRO DIREKTORIAUS 2016 M. VASARIO 29 D. ĮSAKYMO NR. VK-24 DĖL BENDROJO UGDYMO DALYKŲ

Microsoft Word - T-Krivousas_magistrinis.doc

TAIKOMOJI MATEMATIKA IR KIEKYBINIAI METODAI. Rašto darbas serija 3081 variantas Nustatykite funkcijos f(x) = x+2 x 6 cos ( 3x) apibrėžimo sritį.

Microsoft Word - pildymo instrukcija (parengta VMI).docx

ES F ben dri Projekto kodas (Įrašoma automatiškai) 1 PROJEKTO SFMIS DUOMENŲ FORMA FORMAI PRITARTA m. Europos Sąjungos struktūrinės paramos a

P. Kasparaitis. Praktinė informatika. Skriptų vykdymas ir duomenų valdymas Skriptų vykdymas ir duomenų valdymas Įvadas Skripto failas tai M

Microsoft Word - Moletu_Raj_Koncepcija_7_Redakcija doc

PowerPoint Presentation

Projektas

LIETUVOS DARBO BIRŽOS

Tyrimu projektas

Mokinių kūrybinių darbų vertinimo kriterijai, vertinimo aptarimas

UAB NAUJASIS TURGUS PREKYBOS VIETŲ KAINOS NUSTATYMO METODIKA UAB Naujasis turgus užsakymu parengė UAB Eurointegracijos projektai Vilnius,

Priedai_2016.indd

Projektas

1 Vaizdu vidurkinimas ir požymiu išskyrimas 1.1 Glodus vienmatis eksponentinis filtras Apibrėšime eksponentini tolydu kintamojo x filtra formule ( v σ

Pirkimų per CPO rezultatai 2012 m. Periodas iki I. Pirkimų vertė ir skaičius Pirkimų vertė, Lt Pirkimų skaičius 1060 Mėnuo Pirki

LIETUVOS RESPUBLIKOS AZARTINIŲ LOŠIMŲ ĮSTATYMO NR. IX-325 2, 10, 15, 16, 29 STRAIPSNIŲ PAKEITIMO IR ĮSTATYMO PAPILDYMO 15 1, 16 1 STRAIPSNIAIS ĮSTATYM

Pagrindiniai algoritmai dirbant su sveikųjų ir realiųjų skaičių masyvų reikšmėmis Sumos skaičiavimo algoritmas Sveikieji skaičiai int Suma (int X[], i

24 VERSLO APSKAITOS STANDARTO MR

I. PERKANČIOJI ORGANIZACIJA, ADRESAS IR KONTAKTINIAI DUOMENYS: I.1. Perkančiosios organizacijos pavadinimas ir įmonės kodas: Širvintų rajon

Mažeikių r. Tirkšlių darželio „Giliukas“ metinio veiklos vertinimo pokalbio su darbuotoju tvarkos aprašas

VALSTYBINIO SOCIALINIO DRAUDIMO FONDO VALDYBOS

ITC ISSN LIETUVOS ŠVIETIMAS SKAIČIAIS Lietuvos Respublikos švietimo ir mokslo ministerija Švietimo informacinių technologijų centras 2017 Ik

A. Merkys ASOCIACIJA LANGAS Į ATEITĮ, 2015 m. Elektroninis mokymasis Tikriausiai šiais laikais daugelis esate girdėję apie elektroninį bei nuotolinį m

PowerPoint Presentation

LIETUVOS RESPUBLIKOS GYVENAMOSIOS VIETOS DEKLARAVIMO ĮSTATYMO NR. VIII-840 PAKEITIMO ĮSTATYMAS 2017 m. gruodžio 21 d. Nr. XIII-961 Vilnius 1 straipsni

PRIEINAMAS TURIZMAS-TURIZMAS VISIEMS UNIVERSALUS DIZAINAS: TEORIJA IR PRAKTIKA

VALSTYBINĖ KAINŲ IR ENERGETIKOS KONTROLĖS KOMISIJA

MATEMATIKOS BRANDOS EGZAMINO PROGRAMOS MINIMALIUS REIKALAVIMUS ILIUSTRUOJANTYS PAVYZDŽIAI Egzamino programos minimalūs reikalavimai 1.3. Paprastais at

Brandos egzaminų organizavimas ir vykdymas 2012 m.

Microsoft Word - 0a AISKINAMASIS

PowerPoint Presentation

TRUMPA AIRTIES AIR4920 DIEGIMO INSTRUKCIJA

(Microsoft Word - Versta i\360 angli\360ko vertimo i\360 dan\370 k.docx)

LMR200.dvi

PowerPoint Presentation

VALSTYBINĖS KELIŲ TRANSPORTO INSPEKCIJOS

Transkriptas:

skyrius Algoritmai grafuose.. Grafų teorijos uždaviniai... Grafai Tegul turime viršūnių aibę V = { v,v,...,v N (angl. vertex) ir briaunų aibę E = { e,e,...,e K, briauna (angl. edge) yra viršūnių pora ej = (v j,v j ). Paprasčiausias grafo pavyzdys yra šalies kelių žemėlapis: miestai ir gyvenvietės sudaro viršūnių aibę, o keliai briaunų aibę. Jei briaunos e j = (v j,v j ) ir e k = (v j,v j ) yra skirtingos (svarbi yra ir jungimo kryptis), tai jos vadinamos orientuotomis, o grafas, sudarytas iš tokių briaunų, yra vadinamas orientuotuoju grafu. Orientuotąją briauną dar vadiname lanku. Miesto keliuose irgi susiduriame su tokia situacija, kai gatvėje leidžiamas tik vienpusis eismas. Dvi grafo viršūnės, sujungtos bent viena briauna, vadinamos gretimomis arba kaimyninėmis, priešingu atveju jos vadinamos nepriklausomomis. Pavyzdžiui, Vilnius ir Kaunas yra gretimi miestai, o Kaunas ir Utena yra nepriklausomos kelių žemėlapio viršūnės. Dažniausiai neužtenka tik žinoti, ar du miestai yra sujungti keliu, bet svarbu ir tai, koks yra atstumas tarp šių miestų, kokia yra kelio danga, koks maksimalus greitis yra leidžiamas važiuojant šiuo keliu. Todėl grafo briaunoms gali būti priskirti realūs skaičiai, įvertinantys atstumą, laiką, 0

0 SKYRIUS. ALGORITMAI GRAFUOSE svorį ir panašius požymius. Toks grafas yra vadinamas svertiniu. Briaunos e j E įvertį (svorį) žymėsime w(e j ) (svoris angliškai weight). Viršūnės v kaimynų (angl. neighbours) aibę žymėsime N(v) = { u : u V, (u,v) E arba (v,u) E ir vadinsime viršūnės aplinka. Viršūnės v laipsnis deg(v) yra kaimynų skaičius. Jei viršūnė neturi kaimynų (deg(v) = 0), tai ji vadinama izoliuota. Kai deg(v) =, tai v vadinama nusvirusia viršūne. Orientuoto grafo atveju skiriame viršūnės įėjimo ir išėjimo puslaipsnius. Svarbiausi grafų atvejai yra pavaizduoti. brėžinyje. 7 5 5 5 a) b) c). pav. Grafų pavyzdžiai: a) neorientuotas grafas, V = 7, E = 7, viršūnių v, v, v laipsnis yra lygus, viršūnių v, v 5 laipsnis lygus, v yra galinė viršūnė, v 7 yra izoliuota viršūnė, b) orientuotas grafas, V =, E =, c) svertinis grafas, V =, E = 8. Viršūnių seka p = { v i0, v i,..., v ik yra vadinama k keliu (maršrutu, angl. path), jei sekos visos gretimos viršūnės yra sujungtos briaunomis, t.y. (v ij,v ij+ ) E, j = 0,,...,k. Ciklu vadiname k kelią, kuriame pradinė viršūnė sutampa su paskutine v i0 = v ik, o kitos viršūnės kelyje nesikartoja. Grafas vadinamas jungiu, jei tarp bet kurių jo viršūnių egzistuoja kelias. Pavyzdžiui, jeigu turime kelių žemėlapį ir grafas yra jungus, tai iš bet kurio miesto ar gyvenvietės galima nuvažiuoti į kitą vietovę. Pavasarinių potvynių metu kai kurios gyvenvietės tampa nepasiekiamomis.

.. GRAFŲ TEORIJOS UŽDAVINIAI 05 Nagrinėkime svertinį grafą. Kelio p ilgiu vadinsime skaičių k W(p) = w ( (v ij,v ij+ ) ). j=0 Tuo atveju, kai grafo briaunų svoriai nėra užduoti, kelio ilgiu vadiname kelio briaunų skaičių. Trumpiausiu keliu, jungiančiu dvi grafo viršūnes a ir b, vadinsime kelią p = { a, v i,..., v ik,b, tenkinantį sąlygą W(p) W(p ), čia p yra bet koks kitas kelias, jungiantis a ir b. Jei visų briaunų svoriai yra teigiami skaičiai, tai trumpiausias kelias visada egzistuoja. Šį teiginį įrodome tokiais samprotavimais: kadangi briaunų svoris yra teigiami skaičiai, tai trumpiausiame kelyje negali būti ciklų. Tada lieka baigtinis (nors gal būt ir labai didelis) skirtingų kelių skaičius, tarp jų ir išrenkame trumpiausią. Grafas yra vadinamas pilnu, jei visos jo viršūnės tarpusavyje sujungtos briaunomis, t.y.: N(v j ) = V \ {v j, j =,,..., V.... Pagrindiniai uždaviniai uždavinys. Duotas grafas G = (V, E). Reikia rasti trumpiausią kelią tarp dviejų jo viršūnių a,b V. uždavinys. Reikia rasti trumpiausius kelius tarp viršūnės a ir visų kitų grafo viršūnių v V. uždavinys. Jeigu grafas G yra orientuotas, tai reikia rasti trumpiausius kelius iš visų grafo viršūnių v V iki duotosios viršūnės a V.

0 SKYRIUS. ALGORITMAI GRAFUOSE uždavinys. Kiekvienai grafo viršūnių porai a, b V reikia rasti trumpiausią jas jungiantį kelią. Aišku, kad išmokę spręsti uždavinį, uždavinį galėsime išspręsti tuo pačiu algoritmu, prieš tai pakeitę briaunų kryptis. Taigi lieka trys skirtingi uždaviniai. Atrodytų, kad užtenka išmokti spręsti uždavinį, tada ir uždavinius spręsime, kaip seką paprastesnių pirmojo tipo uždavinių. Bet toks būdas nebūtinai yra geriausias: pirma, sudėtingesnio uždavinio tiesioginis sprendimo algoritmas gali būti daug efektyvesnis, antra, pamatysime, kad paprastesnį uždavinį pavyksta išspręsti tik algoritmu, skirtu uždavinio sprendimui. Pastarasis faktas yra pakankamai pamokantis: dažnai lengviau yra išspręsti tinkamai suformuluotą bendresnį uždavinį, nei rasti atskirojo uždavinio sprendinį. 5 uždavinys. Minimalus dengiantis medis. Kitas uždavinys labai dažnai sutinkamas planuojant komunikacinius tinklus, pavyzdžiui, kompiuterinį tinklą, jungiantį visus įstaigos kompiuterius. Tokį tinklą vaizduojame grafu, kurio viršūnių aibę V sudaro asmeniniai kompiuteriai, darbo stotys ir serveriai, o briaunų aibę E sudaro jungtys, jungiančios šiuos kompiuterius. Aišku, gautasis grafas turi būti jungiu, tik tada visi darbuotojai galės keistis informacija. Taip pat siekiame, kad komunikacinių linijų kaina būtų minimali, todėl reikia mažinti grafo briaunų skaičių. Pirmiausia apibrėžiame svarbų grafo atvejį. Medis yra jungus grafas, kuriame nėra ciklų. Aptarsime kai kurias medžių savybes, kurios ir charakterizuoja šią struktūrą.. teorema. Tegul v ir w yra skirtingos medžio viršūnės, tada egzistuoja vienintelis jas jungiantis paprastas kelias. Įrodymas. Tarkime priešingai, kad egzistuoja du skirtingi keliai, jungiantys v ir w. Tada gauname, kad grafo briaunos sudaro ciklą, bet taip būti negali, nes grafas yra medis.. teorema. Medis, kuriame yra n viršūnių, turi n briauną. Įrodymas. Jei turime tik vieną viršūnę, tai briaunų aibė yra tuščia. Pridėdami papildomą briauną turime pridėti ir naują viršūnę, nes priešingu atveju gausime ciklą. Tegul G = (V,E) yra jungus grafas. Tada grafo G dengiančiu medžiu (angl. spanning tree) vadinsime medį T = (V,E ), kurio briaunų aibė E yra grafo G briaunų aibės poaibis, t.y. E E.

.. GRAFŲ TEORIJOS UŽDAVINIAI 07 Aišku, kad grafo dengiantis medis nebūtinai yra vienintelis. Yra daug algoritmų, leidžiančių sukonstruoti dengiančius medžius. Susipažinsime tik su vienu paprastu algoritmu. Pasirenkame bet kurią grafo G viršūnę. Kadangi grafas yra jungus, tai randame naują viršūnę, sujungtą briauna su viena iš jau parinktų viršūnių. Šį ciklą kartojame tol, kol parenkame visas n viršūnes. Uždavinys pasunkėja, kai grafas G yra įvertintasis. Tada reikia rasti minimalų dengiantį medį T, t.y. medį, kurio bendrasis briaunų svoris W(T) yra mažiausias, čia W(T) = w(e). e E Dengiančių medžių pavyzdžiai yra pavaizduoti. brėžinyje. 8 5 0 8 5 0 5 7 7 8 7 8 7 9 9 7 7 5 a) b) c) 8. pav. Dengiančių medžių pavyzdžiai: a) grafas G, b) dengiantis medis W(T) = 5, c) minimalus dengiantis medis W(T) = 8.... Grafų vaizdavimas Duomenų struktūros, vaizduojančios grafą, parinkimas nėra labai paprastas. Būtina atsižvelgti į du svarbius kriterijus: saugomos informacijos apimtį ir veiksmų (metodų) su grafais atlikimo efektyvumą. Ypač dažnai reikia mokėti rasti viršūnes, kurios yra gretimos duotajai. Orientuoto grafo atveju dar skiriamos gretimos įeinančios ir išeinančios viršūnės. Turime grafą G = (V, E). Api- Grafo viršūnių gretimumo matrica. brėžiame n n dydžio matricą S = s s... s n s s... s n............ s n s n... s nn,

08 SKYRIUS. ALGORITMAI GRAFUOSE kurios elementai yra tokie: s ij = {, jei eij := (v i,v j ) E, 0, jei e ij E. Jei grafas yra svertinis, tai gretimumo matricoje saugome ir briaunų svorius: s ij = { wij, jei e ij E, 0, jei e ij E. Jei grafas nėra orientuotas, tai jo gretimumo matrica S yra simetrinė: s ij = s ji, i,j n. Matricos S i-osios eilutės nenuliniai elementai apibrėžia viršūnes v j, į kurias galima patekti iš v i viršūnės. Atitinkamai, j-ojo stulpelio nenuliniai elementai apibrėžia viršūnes v i, iš kurių galima patekti į v j. Saugomos informacijos apimtis yra n skaičių, viršūnės v i visas gretimas viršūnes randame atlikę n veiksmų. Ši duomenų struktūra ypač efektyvi, kai reikia patikrinti ar e ij E, tokio veiksmo kaštai yra O() eilės dydis. Suspausto formato matrica. Dažniausiai grafo viršūnių laipsnis (gretimų viršūnių skaičius) yra daug mažesnis už n. Todėl didesnioji grafo gretimumo matricos koeficientų dalis yra lygi nuliui ir toks informacijos saugojimo būdas nėra ekonomiškas. Tiesinėje algebroje matricos, kurių eilučių nenulinių koeficientų skaičius yra daug mažesnis už stulpelių skaičių, yra vadinamos retomis matricomis (angl. sparse matrix). Jų saugojimui naudojame įvairius informacijos suspaudimo būdus. Vieną jų pritaikysime ir grafo duomenų vaizdavimui. Masyve A iš eilės surašome visų viršūnių gretimas viršūnes. Šio masyvo ilgis yra lygus grafo briaunų skaičiui dime. Masyvo R elementas r i nurodo viršūnės v i gretimų viršūnių sąrašo pradžią masyve A, taigi v i kaimynų aibė yra N(v i ) = { v aj : r i j < r i+. Masyvo R ilgis yra n+, paskutinis elementas r n+ = E + yra naudojamas apibrėžiant viršūnės v n kaimynus. Jeigu turime įvertintąjį grafą G, tai W masyve saugome atitinkamų briaunų svorius. Briaunos numeruojamos taip pat, kaip ir gretimos viršūnės A masyve.

.. TRUMPIAUSIO KELIO RADIMAS 09. pavyzdys. Grafų vaizdavimas suspaustu formatu. Pateiksime grafų, pavaizduotų. brėžinyje, suspausto formato matricas: A = (,,,,5,,,,,,5,,, ), R = (,,,9,,,5); A = (,,,,,), R = (,,,5,7); A = (,,,,,,,5,,,5,,,,,), W = (,,,,5,,,,,,,,,,5,), R = (,,,9,,5,7)... Trumpiausio kelio radimas Pirmiausia spręsime uždavinį, t.y. rasime trumpiausius kelius nuo viršūnės v iki visų kitų įvertintojo grafo viršūnių w V.... Deikstros algoritmas Šį efektyvų algoritmą pasiūlė E. Dijkstra. Masyve D saugome trumpiausių kelių iki kiekvienos viršūnės ilgius. Masyvas P yra naudojamas optimalaus maršruto atstatymui, jo i-ojo elemento reikšmė p i = k parodo, kad į v i viršūnę patenkame iš v k viršūnės. Tegul S yra aibė viršūnių, iki kurių jau radome trumpiausią kelią. Pradžioje šiai aibei priklauso tik pradinė viršūnė v. Vykdydami algoritmą kiekviename žingsnyje aibę S papildome viena nauja viršūne. Aibėje Q saugome viršūnes, iki kurių trumpiausias kelias dar nežinomas. Aišku, taupant kompiuterio atmintį, galima apsiriboti tik vienos iš aibių S arba Q naudojimu, nes Q = V \ S, tačiau algoritmo realizacija yra efektyvesnė, kai parenkame tinkamą duomenų struktūrą aibės Q saugojimui. Tarsime, kad pradinė yra v viršūnė.

0 SKYRIUS. ALGORITMAI GRAFUOSE Deikstros algoritmas () for ( i = ; ( i n ; i++ ) { () if (v,v i ) E ) d i = w i ; () else d i = ; () p i = ; (5) S = {v ; Q = V \ S; () for ( i = ; i < n ; i++ ) { (7) randame v k Q: d k d j, v j Q; (8) if ( d k = ) stop // Grafas nejungus (9) S = S v k ; Q = Q \v k ; (0) for ( v j N(v k ) Q ) { () d = d k + w kj () if ( d j > d ) { () d j = d; () p j = k; Aišku, kad po pirmo žingsnio randame viršūnę v k, iki kurios kelias iš v yra trumpiausias (tai kaimyninė viršūnė). Po to nagrinėjame visas naujosios viršūnės dar neparinktas kaimynes v j ir palyginame dviejų kelių ilgius: geriausio žinomo iki šiol ir naujo, kai pirmiausia trumpiausiu keliu einame į v k viršūnę, o iš jos pasiekiame v j. Šiame algoritme naudojame godaus metodo principą: kiekviename žingsnyje pasirenkame geriausią lokalų sprendinį. Kaip matėme, godusis algoritmas nebūtinai garantuoja gautojo sprendinio globalų optimalumą. Kitame poskyryje įrodysime, kad Deikstros algoritmu tikrai randame trumpiausius kelius. uždavinio sprendimas. Jei užtenka rasti trumpiausią kelią tik iki vienos viršūnės w, tai Deikstros algoritme pakeičiame () sąlygą tokia: () while (w S ) { Tačiau blogiausiu atveju teks atlikti N algoritmo žingsnį, nes w gali būti parinkta pati paskutinė.

.. TRUMPIAUSIO KELIO RADIMAS. pavyzdys. Trumpiausių kelių radimas orientuotatame grafe. Turime orientuotą svorinį grafą, pavaizduotą. brėžinyje. 00 0 5 50 70 0 5 0 5 5 0. pav. Orientuotas įvertintasis grafas Rasime trumpiausius kelius iš viršūnės v iki visų likusių grafo viršūnių. Pradinės aibės S ir masyvų D, P reikšmės yra tokios: S = { v, P = (,,,,, ). Algoritmo vykdymo eiga yra tokia: i = : S = { v, v, D = (0, 70, 50,, 00, ), D = (0, 70, 50, 5, 00, ), P = (,,,,, ), i = : S = { v, v, v, D = (0, 70, 50, 5, 95, 0), P = (,,,,, ), i = : S = { v, v, v, v, D = (0, 70, 50, 5, 95, 90), P = (,,,,, ), i = : S = { v, v, v, v, v, D = (0, 70, 50, 5, 9, 90), P = (,,,,, ), i = 5 : S = { v, v, v, v, v, v 5, D = (0, 70, 50, 5, 9, 90), P = (,,,,, ), Tada, trumpiausias kelias, jungiantis v ir v 5, yra p = (v,v,v,v 5 ), o jo ilgis p = 9. Jeigu būtų reikėję rasti trumpiausią kelią iki v viršūnės, tai algoritmas užsibaigtų po antrojo žingsnio, o p = (v,v,v ).

SKYRIUS. ALGORITMAI GRAFUOSE Algoritmo sudėtingumo įvertinimas. Vykdydami Deikstros algoritmą () ciklą kartojame n (t.y. V ) kartą. Kiekviename žingsnyje randame aibės Q viršūnę, iki kurios žinomo kelio ilgis yra trumpiausias. Šios operacijos sudėtingumas priklauso nuo duomenų struktūros, realizuojančios aibę Q. Jei naudojame masyvą, tai veiksmų skaičius yra O( Q ). Todėl trumpiausių kelių ilgių paieška viso reikalauja O( V ) veiksmų. Kiekviena grafo briauna yra analizuojama tik vieną kartą, todėl kelių ilgiai yra perskaičiuojami E kartų ir atliekame O( E ) veiksmų. Taigi Deikstros algoritmo skaičiavimų apimtis yra O( V + E ) = O( V ) veiksmų (čia pasinaudojome nelygybe E < V ). Jeigu grafo G gretimumo matrica yra reta, t.y. E = m V, m V (daugelyje taikomųjų uždavinių m yra nedidelė konstanta), tai pagrindinė skaičiavimų dalis tenka trumpiausio kelio paieškai aibėje Q. Šį uždavinį spręsime efektyviau, kai Q yra piramidė. Piramidės formavimo kaštai yra O( V ) veiksmų, o trumpiausių kelių ilgių perskaičiavimo ir piramidės struktūros išsaugojimo skaičiavimų apimtis yra O( V log V ) veiksmų. Taigi modifikuoto Deikstros algoritmo apimtis yra O( V log V + E ) veiksmų. Deikstros algoritmo teisingumo įrodymas. viršūnės a iki viršūnės v, nepriklausančios aibei S: Imkime kelią p iš grafo p = (a, w, w,..., w k, v). Jeigu visos tarpinės viršūnės priklauso aibei S, t.y. w j S,j =,...,k, tai toks kelias vadinamas S specialiuoju. Teisinga tokia teorema, kuri pagrindžia godaus metodo naudojimą sprendžiant uždavinį apie trumpiausius kelius nuo duotosios grafo viršūnės iki visų kitų viršūnių:. teorema. Tegul G yra įvertintasis grafas ir visų jo briaunų svoriai yra neneigiami skaičiai. Pradinę viršūnę pažymėkime v V. Po kiekvieno Deikstros algoritmo žingsnio yra teisingi šie du teiginiai: a) jei v j S, tai d j yra trumpiausio kelio nuo v iki šios viršūnės ilgis, b) jei v j Q, tai d j yra trumpiausio S specialaus kelio nuo v iki šios viršūnės ilgis. Įrodymas. Teoremą įrodysime matematinės indukcijos metodu. Pažymėkime S i ir S i aibę S prieš ir po i ojo algoritmo žingsnio. Atitinkamai, kelių ilgius iki v j viršūnės žymėsime d j,i ir d j,i.

.. TRUMPIAUSIO KELIO RADIMAS Pirmiausia įsitikinsime, kad abu teiginiai yra teisingi prieš pirmąjį žingsnį. Kadangi S 0 = { v, tai visos likusios viršūnės priklauso Q0. Taigi a teiginio teisingumo nereikia tikrinti nei vienai viršūnei. S 0 specialiuoju keliu yra briaunos, išeinančios iš pradinės viršūnės v, todėl ir b teiginys yra teisingas. Tarkime, kad abu teiginiai yra teisingi prieš k-ąjį algoritmo žingsnį. Įrodysime, kad jie lieka teisingais ir atlikus šio žingsnio pertvarkymus. Tegul jo metu minimalų kelio ilgį turėjo v k viršūnė, todėl S k = S k v k. Jei v j S k, tai keliais iki viršūnės nebuvo pakeistas. Toks kelias buvo optimalus pagal indukcinę prielaidą, todėl jis liko trumpiausiu ir po k-ojo žingsnio. Lieka įsitikinti, kad ir kelias iki v k, kuris taip pat nepakito šio žingsnio metu, yra trumpiausias. Remiantis indukcine prielaida jis yra trumpiausias S k specialusis kelias. Tarkime priešingai, kad egzistuoja trumpesnis kelias p nuo v iki v k, toks, kad p < d k,k = d k,k. Jis jau negali būti S k specialiuoju keliu, todėl jame yra viršūnių nepriklausančių S k, tegul ṽ yra pirmoji tokia viršūnė: p = { v, v i,..., v il, ṽ,..., ṽ m,...,v k. Tada kelio dalis nuo v iki ṽ yra S k specialusis kelias (nebūtinai trumpiausias) p = { v, v i,..., v il, ṽ. Tegul ṽ = v j. Gauname tokius p ilgio įverčius: p p d j,k. Paskutinė nelygybė seka iš indukcinės prielaidos, kad d j,k yra ilgis trumpiausio S k specialaus kelio iki viršūnės ṽ. Kadangi ṽ S k, tai d k,k d j,k, priešingu atveju, vykdydami Deikstros algoritmo k-ąjį žingsnį, būtume pasirinkę ṽ viršūnę. Bet tada gauname, kad p d k,k, o tai prieštarauja prielaidai, jog p yra trumpesnis kelias. Taigi a teiginys išlieka teisingas ir baigus k-ojo žingsnio pertvarkymus. Dabar nagrinėsime b teiginį. Tegul v j Q k. Tada k-ajame žingsnyje perskaičiuojame trumpiausio S k specialaus kelio ilgį d j,k = min ( d j,k, d k,k + w kj )

SKYRIUS. ALGORITMAI GRAFUOSE ir pasirenkame trumpesnį iš dviejų galimų kelių. Turime dvi galimybes:. Egzistuoja trumpiausias S k specialusis kelias, kuris neina per viršūnę v k.. Visi trumpiausi S k specialieji keliai eina per viršūnę v k. Nagrinėkime pirmąjį atvejį. Tada trumpiausias S k specialusis kelias yra ir trumpiausias S k specialusis kelias, todėl d j,k = d j,k. Deikstros algoritme tokį variantą ir pasirenkame, nes, jei būtų išpildyta nelygybė d k,k + w k,j < d j,k, tai rastume trumpesnį S k specialųjį kelią iki viršūnės v j ir jis eitų per v k, o tai prieštarauja mūsų prielaidai. Taigi šiuo atveju b teiginys lieka teisingas ir po atliktų pertvarkymų. Nagrinėkime antrąjį atvejį. Įrodysime, kad v k visada yra paskutinė S k specialaus kelio viršūnė. Tarkime priešingai, kad v s S k yra paskutinė kelio viršūnė. Kadangi v s v k, tai v s S k. Tada teisinga nelygybė d s,k d k,k, nes priešingu atveju v k viršūnė būtų pasirinkta anksčiau už v s. S(k) S(k-) k s j. pav. Antrojo atvejo analizė: trumpiausias S k specialusis kelias Trumpiausią S k specialųjį kelią p išskaidome į tris dalis (žr.. paveikslą): S k specialųjį kelią p, jungiantį pradinę viršūnę v ir v k, kelią p, jungiantį v k ir v s, bei briauną e sj. Aišku, kad p yra trumpiausias S k specialusis kelias.

.. TRUMPIAUSIO KELIO RADIMAS 5 Įvertiname kelio p ilgį: p = p + p + e sj p + e sj = d k,k + w sj d s,k + w sj. Taigi radome dar vieną S k specialųjį kelią, trumpiausiu būdu jungiantį v su v s ir po to tiesiogine briauna e sj sujungtą su v j. Jo ilgis yra nedidesnis už p ir šis kelias neina per viršūnę v k, o tai prieštarauja prielaidai, kad visi trumpiausi S k specialieji keliai eina per v k. Deikstros algoritme tada ir pasirenkame naują trumpiausią kelią, taigi b teiginys lieka teisingas ir po atliktų pertvarkymų.... Floido algoritmas Šiame poskyryje spręsime uždavinį, kai reikia rasti trumpiausius kelius tarp visų įvertintojo grafo G viršūnių porų. Ir šį uždavinį galime spręsti Deikstros algoritmu, kurį kartojame n kartų su vis kita pradine viršūne. Tokio metodo skaičiavimų apimtis yra O ( V log V + V E ). Priminsime, kad Deikstros algoritmas priklauso godžiųjų metodų klasei. Susipažinsime su Floido (Floyd) algoritmu, kuriame panaudotas dinaminio programavimo metodas. Metodo idėja yra paprasta. Pažymėkime D k matricą, kurios koeficientai d ij (k) apibrėžia ilgį trumpiausio kelio nuo viršūnės v i iki viršūnės v j ir šiame kelyje nėra viršūnių, kurių indeksas didesnis už k. Pradinės matricos D 0 koeficientai yra tokie: 0, kai i = j, d ij (0) = w ij, kai e ij E,, kai e ij E. Toliau skaičiuojame matricas D,D,...,D n. Sudarant matricą D k galimi du atvejai:. Trumpiausio kelio visų tarpinių viršūnių numeriai yra mažesni už k, tada teisinga lygybė d ij (k) = d ij (k ).. Trumpiausias kelias eina per viršūnę v k, tada jo ilgis yra lygus atkarpų nuo v i iki v k ir nuo v k iki v j ilgių sumai (visų tarpinių viršūnių numeriai yra mažesni už k): d ij (k) = d ik (k ) + d kj (k ).

SKYRIUS. ALGORITMAI GRAFUOSE Kadangi nežinome, kuris iš šių dviejų kelių yra trumpesnis, tai gauname matricos D k koeficientų skaičiavimo formulę d ij (k) = min ( d ij (k ), d ik (k ) + d kj (k ) ). Pastebėsime, kad kai kurių koeficientų nereikia skaičiuoti, nes teisingos tokios lygybės d ii (k) = 0, d ik (k) = min ( d ik (k ), d ik (k ) + d kk (k ) ) = d ik (k ), d kj (k) = min ( d kj (k ), d kk (k ) + d kj (k ) ) = d kj (k ). Optimalų kelią saugome matricoje P, kurios koeficientas p ij yra lygus trumpiausio kelio nuo v i iki v j tarpinių viršūnių didžiausiam numeriui. Floido algoritmas () for ( i = ; i n ; i++ ) () for ( j = ; j n ; j++ ) { () () if ( i == j ) d ii = 0 ; else if ( (v i,v j ) E ) d ij = w ij ; (5) else d ij = ; () p ij = 0; (7) for ( k = ; k n ; k++ ) { (8) for ( i = ; i n ; i++ ) (9) for ( j = ; ( j n ; j++ ) (0) if (i k) && (j k) && (i j) ) { () d = d ik + d kj () if ( d ij > d ) { () d ij = d; () p ij = k; Pateiksime ir algoritmą, kuris atspausdina trumpiausio kelio tarpinių viršūnių numerius.

.. TRUMPIAUSIO KELIO RADIMAS 7 Trumpiausio kelio spausdinimo algoritmas Path ( i, j ) begin () k = p ij ; () if ( k 0 ) { () Path ( i, k ); () Spausdiname k; (5) Path ( k, j ); end Path. pavyzdys. Trumpiausių kelių radimas Floido algoritmu. Turime orientuotą svorinį grafą, pavaizduotą.5 brėžinyje. 8 5 0 0.5 pav. Orientuotas įvertintasis grafas Rasime trumpiausius kelius tarp visų grafo viršūnių. masyvų D ir P reikšmės yra tokios: D 0 = 0 8 0 5 0 0 0 0, P 0 = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0. Pradinės Floido algoritmo vykdymo eiga yra tokia: D = 0 8 0 0 5 0 0 0 0, P = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0,

8 SKYRIUS. ALGORITMAI GRAFUOSE D = D = D = 0 8 9 0 0 0 8 0 0 0 0 8 0 0 0 8 0 8 0 0 0 8 0 0 8 0 8 0, P =, P =, P = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0,,. Algoritmo sudėtingumo įvertinimas. Vykdydami Floido algoritmo (7) ciklo vieną žingsnį atliekame O( V ) veiksmų. Šio ciklo ilgis yra n = V žingsnių, todėl Floido algoritmo apimtis yra O( V ).