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

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

PowerPoint Presentation

PowerPoint Presentation

Slide 1

Slide 1

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

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

Algoritmø analizës specialieji skyriai

PS_riba_tolydumas.dvi

Microsoft Word - 15_paskaita.doc

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)

Microsoft PowerPoint Dvi svarbios ribos [Read-Only]

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

* # * # # 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

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

Slide 1

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

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

PATVIRTINTA Lietuvos banko valdybos 2015 m. sausio 29 d. nutarimu Nr (Lietuvos banko valdybos 2018 m. spalio 30 d. nutarimo Nr redakcij

10 Pratybos Oleg Lukašonok 1

MatricosDetermTiesLS.dvi

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

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

DB sukūrimas ir užpildymas duomenimis

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

Microsoft Word - DSEA-3s.doc

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

VILNIAUS KOLEGIJA AGROTECHNOLOGIJ FAKULTETAS CHEMIJOS KATEDRA Tyrimas: STUDENTAI APIE KURSINĮ DARBĄ Dalykas: LABORATORIJ VEIKLA Tyrimą atliko lektorė:

VADOVĖLIO VERTINIMO KRITERIJŲ APRAŠAI 1. MEDŽIAGOS TINKAMUMAS VERTYBINĖMS NUOSTATOMS UGDYTI(S) Vertinimo kriterijai 1.1. Tekstinė ir vaizdinė medžiaga

VERSLO IR VADYBOS TECHNOLOGIJŲ PROGRAMA

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

(Pasiūlymų dėl projektų atrankos kriterijų nustatymo ir keitimo forma) PASIŪLYMAI DĖL PROJEKTŲ ATRANKOS KRITERIJŲ NUSTATYMO IR KEITIMO 2017 m. lapkrič

Elektroninių pažymėjimų tvarkymo sistema

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Ų

DBVS realizavimas Pagrindiniai DBVS komponentai Duomenų saugojimas diske Paruošė J.Skučas

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

VALSTYBINĖS MOKESČIŲ INSPEKCIJOS

EUROPOS KOMISIJA Briuselis, C(2017) 4679 final KOMISIJOS ĮGYVENDINIMO SPRENDIMAS (ES) / dėl bendros sistemos techninių standa

Dažniausios IT VBE klaidos

LIETUVOS RESPUBLIKOS ŽEMĖS ŪKIO MINISTRAS ĮSAKYMAS DĖL VIENKARTINIŲ LEIDIMŲ PURKŠTI AUGALŲ APSAUGOS PRODUKTUS IŠ ORO IŠDAVIMO IR GALIOJIMO PANAIKINIMO

Viešoji konsultacija dėl dezinformacijos apie Lietuvą sklaidos mažinimo užsienyje 2019 m. kovo mėn., Vilnius KONTEKSTAS KONSULTACIJOS TIKSLAS VIEŠOSIO

PATVIRTINTA Lietuvos statistikos departamento generalinio direktoriaus ir Muitinės departamento prie Lietuvos Respublikos finansų ministerijos general

ĮSIVERTINIMO IR PAŽANGOS ATASKAITA M. M. (2018 M.) Įstaigos kodas Mokyklos pavadinimas Kauno Varpo gimnazija Savivaldybė Kauno m.

Printing AtvirkstineMatrica.wxmx

Muzikos duomenų bazės NAXOS Music Library naudojimo vadovas Turinys Kas yra NAXOS Music Library... 2 Kaip pradėti naudotis... 3 Kaip atlikti paiešką..

Verslui skirta Facebook paskyra pilna sudėtingų terminų bei funkcijų Facebook Pixel, conversion rate ir taip toliau. Tačiau darbas su klientais social

Privalomai pasirenkamas istorijos modulis istorija aplink mus I dalis _suredaguotas_

Microsoft Word - Palmolive_Drogas_full_rules_April_2019.doc

VABALNINKO BALIO SRUOGOS GIMNAZIJA Vabalninko Balio Sruogos gimnazija K.Šakenio g. 12, Vabalninkas, Biržų raj. Tel. (8-450)

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

AAA.AIEPI.Mokymu_medziaga_MOK_VI_07.Vandens_inventorizacijos_duomenu_tvarkymas.v.0.4

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

Java esminės klasės, 1 dalis Išimtys, Įvestis/išvestis

PowerPoint Presentation

124

QR algoritmas paskaita

ktu kompiuterių katedra Programavimas asembleriu Darius Birvinskas Ignas Martišius Algimantas Venčkauskas

LUKIŠKIŲ TARDYMO IZOLIATORIUS-KALĖJIMAS TVIRTINU Direktorius Viktoras Davidenko TARNYBINIO PATIKRINIMO DĖL LUKIŠKIŲ TARDYMO IZOLIATORIAUS-KALĖJIMO APS

PATVIRTINTA

Veiksmų programų administravimo

Microsoft Word ESMA CFD Renewal Decision (2) Notice_LT

Kelmės rajono Kražių gimnazija Įmonės kodas , S.Dariaus ir S. Girėno g.2, Kražiai, Kelmės rajonas 2016 m. kovo 18 d. FINANSINIŲ ATASKAITŲ AIŠ

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

Standartinių gamybinių operacijų brėžiniai, sutartiniai žymėjimai 1

LIETUVOS RESPUBLIKOS REGIONINĖS PLĖTROS ĮSTATYMO NR. VIII-1889 PAKEITIMO ĮSTATYMAS 2014 m. rugsėjo 18 d. Nr. XII-1094 Vilnius 1 straipsnis. Lietuvos R

Projektas PATVIRTINTA Alytaus Sakalėlio pradinės mokyklos direktoriaus įsakymu Nr. V- ALYTAUS SAKALĖLIO PRADINĖS MOKYKLOS ELEKTRONINIO DIENYNO T

UAB VALENTIS PRIVATUMO POLITIKA Uždaroji akcinė bendrovė Valentis (toliau Valentis arba mes), įgyvendindama 2016 m. balandžio 27 d. Europos Parlamento

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

VALSTYBINIO SOCIALINIO DRAUDIMO FONDO VALDYBOS

Projektas

Printing triistr.wxmx

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

LT Europos Sąjungos oficialusis leidinys L 79/11 DIREKTYVOS KOMISIJOS DIREKTYVA 2007/16/EB 2007 m. kovo 19 d. įgyvendinanti Tarybos direktyv

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

Microsoft Word - KMAIK dėstytojų konkurso ir atestacijos aprašas (3)

5_3 paskaita

Microsoft Word - Paslauga _leidimai išvezti iš LR_ Į-29 AP-15.doc

Projektas

PATVIRTINTA

DUOMENŲ TEIKIMO SUTARČIŲ REGISTRUI ELEKTRONINIU BŪDU

HISREP sutartis notarams

Priedai_2016.indd

SIŪLOMO ĮRAŠYTI Į KOMPENSAVIMO SĄRAŠUS VAISTINIO PREPARATO FARMAKOEKONOMINĖS VERTĖS NUSTATYMO PROTOKOLAS (data) Vertinimas pirminis patiksl

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

VALSTYBINĖS KELIŲ TRANSPORTO INSPEKCIJOS

AB FREDA

lec10.dvi

Logines funkcijos termu generavimo algoritmas pagristas funkciniu modeliu

INTERVIU CIKLAS DĖL PRAMONĖS 4.0 EKOSISTEMOS VYSTYMO PRIEMONIŲ KAS DALYVAVO? 20 6 apdirbamosios gamybos įmonių (t.y. 25 % Panevėžio regiono apdirbamos

LIETUVOS RESPUBLIKOS ENERGETIKOS MINISTRO

Neformaliojo vaikų švietimo aktualumas ir veiklos gairės

PATVIRTINTA

LIETUVOS RESPUBLIKOS VYRIAUSIOSIOS RINKIMŲ KOMISIJOS POLITINIŲ PARTIJŲ IR POLITINIŲ KAMPANIJŲ FINANSAVIMO KONTROLĖS SKYRIUS PAŽYMA DĖL STRAIPSNIO-INTE

VIEŠO NAUDOJIMO Aplinkos oro teršalų koncentracijos tyrimų, atliktų 2017 m. rugpjūčio d. Šiltnamių g. 23 Vilniaus mieste, naudojant mobiliąją la

Microsoft Word - Naudotojo gidas_aplikacijai_

final_Duju_rinkos_stebesesnos_ataskaita_2011_I_ketv

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},

airbnb-pwc-taxguide-lithuania-lt

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

Transkriptas:

Algoritmai ir duomenų struktūros (ADS) 2 paskaita Saulius Ragaišis, VU MIF saulius.ragaisis@mif.vu.lt 2016-02-15

Tiesinės duomenų struktūros Panagrinėsime keletą žinomų ir įvairiuose taikymuose naudojamų tiesinių duomenų struktūrų. Priklausomai nuo pasirinktos programavimo kalbos, joje gali būti atitinkamas duomenų tipas (pavyzdžiui, LISP kalboje yra duomenų tipas sąrašas) arba gali tekti konstruoti reikiamą duomenų struktūrą, naudojantis kitais programavimo kalbos pateikiamais duomenų tipais. Nagrinėdami duomenų struktūras, kartu apibrėšime ir darbui su jomis reikalingas operacijas bei keletą būdų, kaip tos duomenų struktūros gali būti realizuotos.

Sąrašas Sąrašas arba tiesinis sąrašas (angl. list or linear list) yra sutvarkytas rinkinys (tiesinė seka) elementų, struktūrizuotų taip, kad kiekvienas elementas, išskyrus pirmą, turi vienintelį prieš jį einantį elementą ir kiekvienas elementas, išskyrus paskutinį, turi vienintelį po jo einantį elementą. Kiekvienas sąrašo elementas saugo tam tikrus duomenis. Sąrašo pradžia ir pabaiga dažnai dar vadinamos galva (angl. head) ir uodega (angl. tail) atitinkamai.

Sąrašo operacijos Sukurti tuščią sąrašą Patikrinti, ar sąrašas tuščias Patikrinti, ar sąrašas pilnas (teoriškai sąrašas gali būti bet kokio ilgio, bet praktinėse realizacijose sąrašo ilgis būna daugiau ar mažiau ribotas, priklausomai nuo pasirinkto sąrašo realizavimo būdo) Suskaičiuoti sąrašo elementus Gauti n-tojo sąrašo elemento duomenis Įterpti naujus duomenis (naują elementą) prieš n-tąjį elementą Panaikinti n-tąjį sąrašo elementą Rasti sąrašo elemento numerį su nurodytais duomenimis. Išvesti sąrašo elementus Tai nėra visos operacijos, kurias galima atlikti su sąrašu, bet šis rinkinys yra pakankamas, kad naudojantis šiomis operacijomis, būtų galima atlikti bet kokius veiksmus su sąrašu.

Galimos papildomos operacijos Įterpti naujus duomenis po n-tojo elemento Įterpti naujus duomenis sąrašo pradžioje Įterpti naujus duomenis sąrašo pabaigoje Panaikinti pirmą sąrašo elementą Panaikinti paskutinį sąrašo elementą Prijungti kitą sąrašą duoto sąrašo pabaigoje Įterpti naujus duomenis prieš pirmą elementą su nurodytais duomenimis Įterpti naujus duomenis po pirmo elemento su nurodytais duomenimis Pereiti prie kito sąrašo elemento Įterpti naujus duomenis prieš einamąjį elementą Įterpti naujus duomenis po einamojo elemento Sunaikinti sąrašą (sunaikinti visus sąrašo elementus)

Sąrašų tipai Nusileidžiant arčiau realizacijos galima apibrėžti vienpusį ir dvipusį sąrašus. Vienpusis sąrašas sąrašas, kurio kiekvienas elementas žino tik, koks elementas yra po jo. Dvipusis sąrašas sąrašas, kurioje kiekvienas elementas žino, koks elementas yra po jo ir koks prieš jį. Vienpusis ir dvipusis sąrašai yra apibendrintos duomenų struktūros sąrašas patikslinimai, jau dalinai nusakantys duomenų struktūros realizaciją: tiek pačią duomenų struktūrą (pavyzdžiui, kiek elementas turi nuorodų), tiek galimas operacijas (pavyzdžiui, operacija Pereiti prie ankstesnio sąrašo elemento pakankamai natūrali dvipusio sąrašo atveju; vienpusiam sąrašui tokią operaciją, žinoma, galima būtų realizuoti, bet nėra tikslinga). Kai kuriuose taikymuose tikslinga naudoti specifinį sąrašo atvejį ciklinį sąrašą. Ciklinis sąrašas - sąrašas, kuriame po paskutinio elemento seka pirmas sąrašo elementas. Savo ruožtu ciklinis sąrašas gali būti tiek vienpusis, tiek dvipusis.

Realizacija (1) Masyvas, kurio elementai tokie patys kaip sąrašo elementai (t.y. elementuose nėra saugoma jokių papildomų nuorodų). Tokiu būdu galima vaizduoti tiek vienpusį, tiek dvipusį sąrašą, nes jokios išreikštinės nuorodos nesaugomos, einamasis, kitas ir ankstesnis elementai nustatomi pagal indeksus. Papildomai tereikia žinoti sąrašo elementų skaičių. Sąrašo pradžia yra pirmas masyvo elementas (jei sąrašas nėra tuščias, elementų skaičius daugiau už 0), sąrašo galas nustatomas pagal elementų skaičių (jei masyvas indeksuojamas nuo 1, tai paskutinis sąrašo elementas yra masyvo elementas su indeksu lygiu elementų skaičiui). Privalumai: maksimaliai paprasta struktūra; paprasta operacijų realizacija; laikomi tik patys duomenys (nereikia saugoti nuorodų). Trūkumai: masyvo dydis turi būti nusakytas iš anksto, todėl gali būti arba naudojama tik nedidelė jo dalis, arba pritrūkti vietos; elemento įterpimo/naikinimo operacijos yra neefektyvios, nes reikia perstumti kitus elementus.

Realizacija (2) Du masyvai: pirmame saugomi duomenys, antro masyvo atitinkamame elemente (su tuo pačiu indeksu) saugoma nuoroda į po jo einantį elementą (jei sąrašas vienpusis) arba nuorodos į po jo ir prieš jį einančius elementus (jei sąrašas dvipusis). Jei programavimo kalba leidžia, galima duomenis ir nuorodą apjungti į viena tipą ir naudoti vieną masyvą. Papildomai būtina žinoti sąrašo pradžios (pirmo jo elemento) indeksą masyve (arba požymį, kad sąrašas tuščias). Sąrašo galo nustatymui gali būti arba (1) saugomas sąrašo elementų skaičius, arba (2) paskutinio sąrašo elemento indeksas masyve, arba (3) sąrašo galas gali būti nustatomas pagal tai, kad elementas neturi nuorodos į po jo einantį elementą. Tradiciškai nuorodų masyve saugomas ir laisvų elementų sąrašas. Privalumai (lyginant su 1-u būdu): elemento įterpimas/naikinimas pakankamai efektyvus, nes nereikia perstumti kitų elementų. Trūkumai (lyginant su 1-u būdu): operacijų realizacija gerokai sudėtingesnė reikia papildomos atminties nuorodoms saugoti. Trūkumai: masyvo (tuo pačiu ir sąrašo) dydis turi būti nusakytas iš anksto, todėl gali būti arba naudojama tik nedidelė jo dalis, arba pritrūkti vietos.

Realizacija (3) Dinaminis sąrašas: tokio sąrašo elementai būtų sudaryti iš sąrašo duomenų ir vienos (vienpusio sąrašo atveju) arba dviejų (dvipusio sąrašo atveju) rodyklių. Privalumai: atmintis naudojama tik egzistuojantiems sąrašo elementas, t.y. nerezervuojama vieta potencialiems elementams; elemento įterpimas/naikinimas pakankamai efektyvus. Trūkumai operacijų realizacija sudėtingesnė (ji palyginama su 2-o būdo operacijų realizacija). kiekvienai nuorodai saugoti reikia daugiau atminties (rodyklė užima daugiau atminties nei tipas, kuriuo indeksuojama, pavyzdžiui, sveikų skaičių).

Stekas Stekas (angl. stack) yra sąrašas, kuriame elementai gali būti įterpiami/naikinami tik jo pradžioje, vadinamoje viršūne (angl. top). Taigi stekas yra specifinis sąrašas su apribotomis operacijomis. Tai LIFO (Last In First Out) duomenų struktūra, atitinkanti lietuvišką patarlę "kas pirmas į maišą, paskutinis iš maišo". Kiekvienas steko elementas saugo tam tikrus duomenis. Gyvenime steką atitiktų, pavyzdžiui, automato apkaba (rusiškai ir pati duomenų struktūra taip vadinama - "magazin").

Operacijos Sukurti tuščią steką Patikrinti, ar stekas tuščias Patikrinti, ar stekas pilnas Įdėti (angl. push) naują elementą į steką Išimti (angl. pop) elementą iš steko Sunaikinti steką Pastebėkime, kad steko atveju elemento įterpiamo/naikinamo operacijos turi specifinius pavadinimus, labiau atitinkančius jų prasmę. Nagrinėjant apibendrintą steko realizaciją, pirmiausia pažymėkime, kad nėra prasmės jo vaizduoti kaip dvipusio sąrašo. Kadangi stekas yra atskiras sąrašo atvejis, jo realizacijai galėtų būti panaudoti visi bet kokio sąrašo realizavimo būdai aptarti anksčiau, tačiau naudoti du masyvus (arba masyvą papildytą nuorodomis) nėra prasmės, nes viduriniai steko elementai negali būti liečiami". Trumpai aptarsime kitų dviejų būdų privalumus ir trūkumus steko atveju.

Steko realizacijos 1. Masyvas, kurio elementai tokie patys kaip steko elementai. Steko viršūnė paskutinis užpildytas masyvo elementas, t.y. užpildytas masyvo elementas su maksimaliu indeksu. Privalumai: maksimaliai paprasta struktūra; paprasta operacijų realizacija; laikomi tik patys duomenys (nereikia saugoti nuorodų). Trūkumai: masyvo (tuo pačiu ir steko) dydis turi būti nusakytas iš anksto, todėl gali būti arba naudojama tik nedidelė jo dalis, arba pritrūkti vietos. Reikia pastebėti, kad elemento įterpimo/naikinimo operacijos steko atveju efektyvios. 2. Dinaminis sąrašas. Privalumai: atmintis naudojama tik egzistuojantiems steko elementams, t.y. nerezervuojama vieta potencialiems elementams. Trūkumai: operacijų realizacija truputį sudėtingesnė (reikia mokėti dirbti su rodyklėmis); reikia daugiau atminties, nes saugomi ne tik duomenys, bet ir nuorodos (rodyklės).

Steko naudojimo pavyzdys Stekas taip pat gali būti naudojamas, pavyzdžiui, postfiksinių (angl. postfix) išraiškų skaičiavimui. Mes esame įpratę išraiškas rašyti tokia forma: (A + B) * C. Ji vadinama infiksine (angl. infix) forma, nes operacija yra tarp operandų (operandas operacija operandas). Galimos ir kitos išraiškų užrašymo formos: postfiksinė (angl. postfix), kurioje operacija eina po operandų (operandas operandas operacija), ir prefiksinė (angl. prefix), kurioje operacija eina prieš operandus (operacija operandas operandas). Pastarosios formos dar vadinamos lenkiška ir atvirkštine lenkiška forma. Jos ypatingos tuo, kad išraiškose nereikia skliaustų, todėl jas skaičiuoti žymiai paprasčiau. Postfiksinių išraiškų pavyzdžiai: A B + C * = (A + B) * C 5 2 3 * + = 2 * 3 + 5 5 2 * 4 2 / + = 5 * 2 + 4 / 2

Postfiksinės išraiškos skaičiavimo algoritmas 1. Išskirti eilinį elementą iš išraiškos 2. Jei išskirtas elementas yra operandas, padėti jį į steką. 3. Jei išskirtas elementas yra operacija, ištraukti iš steko operandus, atlikti operaciją ir gautą rezultatą padėti į steką. (Pastaba: pirmuoju iš steko išimamas antras operandas, pavyzdžiui, jei operacija yra "/" ir stekas (2, 4), tai bus skaičiuojama išraiška 4 / 2.) 4. Jei išraiška baigta nagrinėti, rezultatas yra steke, priešingu atveju kartoti žingsnius 1-3. Panagrinėkime, kaip veikia algoritmas, skaičiuodamas išraišką: 5 2 3 * +

Eilė Eilė (angl. queue) yra sąrašas, kuriame elementai gali būti įterpiami tik į galą, o naikinami tik pradžioje. Taigi eilė (kaip ir stekas) yra specifinis sąrašas su apribotomis operacijomis. Tai FIFO (First In First Out) duomenų struktūra (kartais angliškai ji dar vadinama FIFO stack). Operacijos: Sukurti tuščią eilę Patikrinti, ar eilė tuščia Patikrinti, ar eilė pilna Įdėti (angl. enqueue) naują elementą į eilę Išimti (angl. dequeue) elementą iš eilės Gauti pirmo eilės elemento duomenis, neišimant jo iš eilės Gauti eilės elementų skaičių Sunaikinti eilę Kiekvienas eilės elementas saugo tam tikrus duomenis. Nėra prasmės jos vaizduoti kaip dvipusio sąrašo. Naudoti du masyvus (arba masyvą papildytą nuorodomis) irgi neprasminga.

Eilės realizacijos 1. Masyvas, kurio elementai tokie patys kaip eilės elementai Privalumai: maksimaliai paprasta struktūra gana paprasta operacijų realizacija laikomi tik patys duomenys (nereikia papildomos atminties nuorodoms saugoti) Trūkumai: masyvo (tuo pačiu ir eilės dydis turi būti nusakytas iš anksto, todėl gali būti arba naudojama tik nedidelė jo dalis, arba pritrūkti vietos. Reikia pastebėti, kad elemento įterpimo/naikinimo operacijos eilės atveju gali būti realizuotos efektyviai: panaikinus pirmą eilės elementą visai nebūtina visus elementus perstumti, pakanka saugoti pirmo eilės elemento indeksą masyve. 2. Dinaminis sąrašas Privalumai: atmintis naudojama tik egzistuojantiems eilės elementams, t.y. nerezervuojama vieta potencialiems elementams. Trūkumai: operacijų realizacija truputį sudėtingesnė (reikia mokėti dirbti su rodyklėmis); reikia daugiau atminties, nes saugomi ne tik duomenys, bet ir nuorodos (rodyklės).

Dekas Dekas (angl. deck or dequeue) yra sąrašas, kuriame elementai gali būti įterpiami/naikinami tik pradžioje ir gale. Taigi dekas (kaip ir eilė bei stekas) yra specifinis sąrašas su apribotomis operacijomis. Dekas dar vadinamas abipusiu steku (arba abipuse eile), nes galima įsivaizduoti, kad dekas yra du slankiai sujungti stekai, kurių viršūnėse galima atlikti elementų įterpimo/naikinimo operacijas. Operacijos: Sukurti tuščią deką Patikrinti, ar dekas tuščias Patikrinti, ar dekas pilnas Įterpti naujus duomenis (naują elementą) į deko pradžią Išimti elementą iš deko pradžios (gaunami elemento duomenys) Įterpti naujus duomenis (naują elementą) į deko pabaigą Išimti elementą iš deko pabaigos (gaunami elemento duomenys) Gauti deko pradžios elemento duomenis, neišimant jo iš deko Gauti deko pabaigos elemento duomenis, neišimant jo iš deko Gauti deko elementų skaičių Sunaikinti deką Kiekvienas deko elementas saugo tam tikrus duomenis.

Deko realizacijos 1. Masyvas, kurio elementai tokie patys kaip deko elementai Privalumai: maksimaliai paprasta struktūra gana paprasta operacijų realizacija laikomi tik patys duomenys (nereikia papildomos atminties nuorodoms saugoti) Trūkumai: masyvo (tuo pačiu ir deko dydis turi būti nusakytas iš anksto, todėl gali būti arba naudojama tik nedidelė jo dalis, arba pritrūkti vietos. Reikia pastebėti, kad elemento įterpimo/naikinimo operacijos deko atveju gali būti realizuotos efektyviai: pakanka saugoti pirmo ir paskutinio deko elementų indeksus masyve. 2. Dinaminis sąrašas Privalumai: atmintis naudojama tik egzistuojantiems deko elementams, t.y. nerezervuojama vieta potencialiems elementams. Trūkumai: operacijų realizacija truputį sudėtingesnė (reikia mokėti dirbti su rodyklėmis); reikia daugiau atminties, nes saugomi ne tik duomenys, bet ir nuorodos (rodyklės).

Kokia duomenų struktūra tiktų VU? VU sudaro kamieniniai padaliniai (pvz., fakultetai, institutai, centrai) Juose yra šakiniai padaliniai (pvz., katedros) ir t.t. Pastebėkime, padalinių tipų pavadinimai primena medį!?..

Medis Medis yra tokia hierarchinė duomenų struktūra, kurioje: į kiekvieną elementą (viršūnę), išskyrus vieną, vadinamą medžio šaknimi, yra tik vienintelė nuoroda iš kito elemento (viršūnės), iš kiekvieno elemento (viršūnės) gali būti viena arba daugiau nuorodų į kitus elementus (viršūnes) iš šaknies einant nuorodomis galima pasiekti visas kitas viršūnes.

Medis (2) Viena medžio viršūnė (į kurią nėra nuorodų) vadinama medžio šaknimi (angl. root). Viršūnė, iš kurios nėra nuorodų į kitas viršūnes, vadinama lapu. Kiekviena nuoroda su viršūnėmis, į kurias galima patekti, pradėjus eiti ta nuoroda, vadinama medžio šaka arba pomedžiu (nes ši struktūra be pradinės nuorodos savo ruožtu yra medis). Pastebėkime, kad tradiciškai duomenų struktūra medis piešiama iš viršaus žemyn (skirtingai nei auga medžiai gamtoje).

Medis (3) Santykiams tarp medžio viršūnių įvardinti naudojamos tėvovaiko tipo sąvokos. A A, B, C, D, E, F medžio viršūnės (nodes). D B E F C A yra B ir C tėvas (parent), analogiškai, B yra D, E ir F tėvas, o B ir C yra tėvo A vaikai (children). B ir C turi tą patį tėvą, todėl jie vadinami broliais (siblings). A neturi tėvo ir vadinama medžio šaknimi (root). Jei viršūnė neturi vaikų (D, E, F ir C), ji vadinama lapu (leaf). Medis, kuris neturi viršūnių yra tuščias (empty).

Dvejetainis medis Dvejetainis medis (binary tree) tai toks medis, kurio kiekviena viršūnė turi ne daugiau kaip 2 vaikus. Medis yra dvejetainis, jeigu: tuščias, arba yra pavidalo: r Tk Td kur r viršūnė, Tk kairysis pomedis (left subtree) ir Td dešinysis pomedis (right subtree) taip pat yra dvejetainiai medžiai.

Dvejetainio medžio pavyzdys

Medžio aukštis Medžio aukštis (height) tai viršūnių skaičius nuo šaknies iki tolimiausio lapo. Šio medžio aukštis yra 5.

Viršūnės lygis (level) Jei viršūnė medžio šaknis, tai jos lygis 1. Jei viršūnė nėra medžio šaknis, jos lygis vienetu didesnis už tėvo lygį. Medžio aukštį galima apibrėžti ir taip: * Jei medis tuščias, jo aukštis 0. * Jei medis nėra tuščias, jo aukštis lygus maksimaliam viršūnių lygiui.

Pilnas (full) dvejetainis medis Pilnas (full) dvejetainis medis tai dvejetainis medis (aukščio h), kuris: - turi visus lapus h lygyje; - visos mažesnio už h lygį viršūnės turi 2 vaikus. Patogu naudotis šiais rekursyviais apibrėžimais : Jei T yra tuščias, tai T yra pilnas dvejetainis medis, kurio aukštis 0. Jei T nėra tuščias ir aukštis h > 0, tai T yra pilnas dvejetainis medis, jeigu jo šaknies pomedžiai irgi yra pilni dvejetainiai medžiai.

Užbaigtas (complete) dvejetainis medis Užbaigtas (complete) dvejetainis medis, kurio aukštis h, tai dvejetainis medis, kuris: - yra pilnas iki aukščio h-1, - lygyje h pildomas iš kairės į dešinę. Arba dvejetainis medis T, kurio aukštis h, yra užbaigtas, kai: * Visos viršūnės iki h-2 lygio turi po 2 vaikus. * Jei viršūnė turi dešinįjį lygio h paveldėtoją, tai visi lapai jos kairiajame pomedyje yra lygio h, t.y. pomedyje turime visas h lygio viršūnes.

Subalansuotas medis Subalansuotas pagal aukštį (height balanced) medis tai medis, kurio kiekvienos viršūnės kairiojo ir dešiniojo pomedžio aukščiai skiriasi ne daugiau kaip vienu lygiu. Dvejetainis medis yra visiškai subalansuotas (completely balanced), jei kairieji ir dešinieji kiekvienos viršūnės pomedžiai yra to paties aukščio.

Teorema 1. Teoremos Pilnas h (h >= 0) aukščio medis turi 2 h 1 viršūnę. Teorema 2. Medis, kurio aukštis h, turi ne daugiau kaip 2 h 1 viršūnę. Teorema 3. Medžio su N viršūnių minimalus aukštis yra [log 2 (N+1)].

Dvejetainio medžio apėjimas Dvejetainio medžio apėjimo tvarkos klasifikuojamos pagal tai, kada aplankoma pati viršūnė (nuskaitomi jos duomenys). Šiuo požiūriu galimos trys apėjimo tvarkos: VKD: aplankyti Viršūnę; apeiti Kairįjį pomedį; apeiti Dešinįjį pomedį. KVD: apeiti Kairįjį pomedį; aplankyti Viršūnę; apeiti Dešinįjį pomedį. KDV: apeiti Kairįjį pomedį; apeiti Dešinįjį pomedį; aplankyti Viršūnę

Medžio apėjimo pavyzdys E J R Apeinant medį kiekviena tvarka, gautume tokius rezultatus: VKD: J E C G R C G KVD: C E G J R KDV: C G E R J

Išraiškos saugojimas dvejetainiame medyje A * + C B Apeidami medį pagal VKD strategiją, gausime prefiksinę išraišką * + A B C Apeidami medį pagal KVD strategiją, gausime infiksinę išraišką A + B * C kad veiksmai būtų atliekami reikiama tvarka, šią išraišką reikia papildyti skliaustais. Apeidami medį pagal KDV strategiją, gausime postfiksinę išraišką A B + C *

Dvejetainis paieškos medis Dvejetainis paieškos medis (binary search tree) tai dvejetainis medis, kurio viršūnėse saugomos reikšmės sutvarkytos taip: Viršūnės reikšmė yra didesnė už visas reikšmes jos kairiajame pomedyje. Viršūnės reikšmė yra mažesnė už visas reikšmes jos dešiniajame pomedyje. Kairysis ir dešinysis pomedžiai yra dvejetainiai paieškos medžiai.

Dvejetainio paieškos medžio pavyzdys J E R C G Norint atspausdinti dvejetainio paieškos medžio duomenis didėjimo tvarka, reikia naudoti KVD medžio apėjimą. Medis vadinamas paieškos medžiu, nes jame galima efektyviai ieškoti informacijos.

Paieška Patikrinti viršūnę Jei ieškoma reikšmė lygi viršūnės reikšmei, baigti darbą "reikšmė rasta". Jei ieškoma reikšmė mažesnė už viršūnės reikšmę, pereiti į kairįjį pomedį ir kartoti nuo 1-o žingsnio (jei jis tuščias, baigti darbą "reikšmė nerasta"). Jei ieškoma reikšmė didesnė už viršūnės reikšmę, pereiti į dešinįjį pomedį ir kartoti nuo 1-o žingsnio (jei jis tuščias, baigti darbą "reikšmė nerasta"). Įvertinkime žingsnių skaičius: - geriausiu atveju, - blogiausiu atveju, - tikėtinu atveju.

Įterpimas Patikrinti viršūnę. Jei įterpiama reikšmė lygi viršūnės reikšmei, baigti darbą "tokia reikšmė jau yra". Jei įterpiama reikšmė mažesnė už viršūnės reikšmę, - jei kairysis pomedis netuščias, pereiti į jį ir kartoti nuo 1-o žingsnio - jei kairysis pomedis tuščias, sukurti jame naują viršūnę su įterpiamais duomenimis Jei įterpiama didesnė už viršūnės reikšmę, - jei dešinysis pomedis netuščias, pereiti į jį ir kartoti nuo 1-o žingsnio - jei dešinysis pomedis tuščias, sukurti jame naują viršūnę su įterpiamais duomenimis Šis algoritmas yra skirtas reikšmių aibės saugojimui, bet jį (arba pačia duomenų struktūrą) galima modifikuoti reikšmių rinkinio saugojimui.

Išmetimas Duomenų išmetimo iš dvejetainio paieškos medžio algoritmas: 1. Rasti viršūnę su išmetamais duomenimis. 2. Jei viršūnė yra lapas, panaikinti viršūnę ir baigti darbą. 3. Jei viršūnė nėra lapas, sukeisti jos reikšmę su tinkamos viršūnės reikšme ir išmesti tą viršūnę (tęsti algoritmą nuo 2-o žingsnio). Tinkama sukeitimui viršūnė yra - turinti didžiausią reikšmę iš viršūnės kairiojo pomedžio - turinti mažiausią reikšmę iš viršūnės dešiniojo pomedžio

Dvejetainių paieškos medžių optimalumas Tarkime, kad reikšmės į medį ateina atsitiktine tvarka. Norime išsiaiškinti, kiek vidutiniškai daugiau palyginimo operacijų prireiktų, ieškant elemento gautame medyje negu ieškant elemento visiškai subalansuotame medyje. Iš pradžių paverskime medį į 2-medį. Visas medžio viršūnes laikykime skrituliais, o visus tuščius pomedžius (nulines rodykles) pavaizduokime kvadratėliais. Tampa Visos duoto medžio viršūnės tampa naujo 2-medžio vidinėmis viršūnėmis, o naujos išorinėmis (lapais). Sėkminga paieška sustos prie vidinės 2-medžio viršūnės, nesėkminga prie lapo. Remiantis tokia duomenų struktūra galima įrodyti teoremą.

Teorema Teorema: Vidutinis palyginimo operacijų skaičius vidutiniame dvejetainiame paieškos medyje su n viršūnių apytiksliai lygus 2ln n (2ln 2)(log 2n) 2ln 2 1.39 Išvada: Vidutiniškam dvejetainiam paieškos medžiui apytiksliai reikia 1,39 karto daugiau palyginimo operacijų negu visiškai subalansuotam medžiui. Kitaip tariant, vidutinė paieškos nesubalansuotame dvejetainės paieškos medyje kaina yra 39 procentais didesnė.

Dvejetainio medžio realizacijos 1. Dinaminis: elementai su 2 rodyklėmis (tokie patys kaip dvipusiam sąrašui). 2. Masyve: šaknis saugoma elemente su indeksu 1; viršūnės, saugomos elemente su indeksu N: - vaikai saugomi elementuose su indeksais 2N ir 2N+1; - tėvas saugomas elemente su indeksu N div 2. Aptarti privalumus ir trūkumus.

Prioritetinė eilė Gyvenime ne kartą esame susidūrę su situacija, kai yra eilė, bet atsiranda žmonių, kurie aptarnaujami be eilės. Jei tokių atsiranda daug, tai susidaro eilė be eilės... Apibendrinę turime tokią situaciją: - gali būti daugiau nei viena eilė; - kiekvienos eilės elementai turi vienodus prioritetus; - pirmiausia aptarnaujami elementai iš eilės su didžiausiu prioritetu; - elementai su vienodu prioritetu aptarnaujami eilės tvarka. Duomenų struktūra, užtikrinanti tokį elementų aptarnavimo eiliškumą, vadinama prioritetine eile (angl. Priority Queue).

Prioritetinės eilės operacijos Sukurti tuščią prioritetinę eilę Patikrinti, ar prioritetinė eilė tuščia Patikrinti, ar prioritetinė eilė pilna Įdėti naują elementą į prioritetinę eilę Išimti elementą iš prioritetinės eilės Sunaikinti prioritetinę eilę Toliau aptarsime prioritetinės eilės realizacijas. Svarbu atkreipti dėmesį, kad realizacijų aptarime vaizduojami tik elementų prioritetai (elementų reikšmės nevaizduojamos).

Prioritetinės eilės realizacija masyvu Realizacijoje masyvu elementai dažniausiai išdėstomi prioritetų didėjimo tvarka. Tai užtikrina, kad elementas su didžiausia prioriteto reikšme bus masyvo gale. 5 7 7 10... 15 15 min max Išėmimas: išimamas paskutinis elementas. Įdėjimas: randama teisinga pozicija elementas turi būti įterptas pagal savo prioritetą o tarp turinčių tokį prioritetą kaip pirmasis o po to perstumiami visi elementai, kad atsirastų vietos naujam elementui.

Prioritetinės eilės realizacija tiesiniu sąrašu Realizacijoje tiesiniu sąrašu elementai dažniausiai išdėstomi prioritetų mažėjimo tvarka, t.y. elementas su didžiausia prioriteto reikšme yra sąrašo pradžioje. 15 15 10 7 7 5 Išėmimas: išimamas pirmas elementas. Įdėjimas: einama sąrašu tol, kol randama elementui tinkama vieta naujas elementas turi būti įterptas prieš pirmą elementą, turintį mažesnį prioritetą už naują elementą arba sąrašo gale.

Prioritetinės eilės realizacija dvejetainiu paieškos medžiu 7 4 9 1 6 Elementai dėstomi kaip tradiciniame dvejetainiame paieškos medyje tik ne pagal raktus, bet pagal prioritetus. Tokios realizacijos ypatumas yra tame, kad elementas su didžiausia prioriteto reikšme bus pačioje dešinėje viršūnėje. Taigi reikia sekti dešiniuosius vaikus, kol atsiras viršūnė be dešiniojo vaiko. Būtina atkreipti dėmesį, kad viršūnėje saugomas ne 1 elementas, bet eilė elementų, turinčių viršūnėje nurodytą prioritetą.

Klausimai?