58131 Tietorakenteet (kevät 2008) 1. kurssikoe, ratkaisuja

Samankaltaiset tiedostot
AVL-puut. eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

v 1 v 2 v 3 v 4 d lapsisolmua d 1 avainta lapsen v i alipuun avaimet k i 1 ja k i k 0 =, k d = Sisäsolmuissa vähint. yksi avain vähint.

3. Hakupuut. B-puu on hakupuun laji, joka sopii mm. tietokantasovelluksiin, joissa rakenne on talletettu kiintolevylle eikä keskusmuistiin.

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe ratkaisuja (Jyrki Kivinen)

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut

(a) L on listan tunnussolmu, joten se ei voi olla null. Algoritmi lisäämiselle loppuun:

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Miten käydä läpi puun alkiot (traversal)?

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 4 To Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

4. Joukkojen käsittely

Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia

Algoritmit 1. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 4 Ke Timo Männikkö

Algoritmi on periaatteellisella tasolla seuraava:

Tietorakenteet, laskuharjoitus 6,

Binäärihaun vertailujärjestys

58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 1, , vastauksia

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

B + -puut. Kerttu Pollari-Malmi

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003

A TIETORAKENTEET JA ALGORITMIT

Koe ma 1.3 klo salissa A111, koeaika kuten tavallista 2h 30min

Algoritmit 2. Luento 7 Ti Timo Männikkö

58131 Tietorakenteet ja algoritmit (syksy 2015) Toinen välikoe, malliratkaisut

Algoritmit 2. Luento 6 Ke Timo Männikkö

58131 Tietorakenteet (kevät 2009) Harjoitus 6, ratkaisuja (Antti Laaksonen)

5. Keko. Tietorakenne keko eli kasa (heap) on tehokas toteutus abstraktille tietotyypille prioriteettijono, jonka operaatiot ovat seuraavat:

Tarkennamme geneeristä painamiskorotusalgoritmia

Fibonacci-kasoilla voidaan toteuttaa samat operaatiot kuin binomikasoilla.

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia

lähtokohta: kahden O(h) korkuisen keon yhdistäminen uudella juurella vie O(h) operaatiota vrt. RemoveMinElem() keossa

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Algoritmien suunnittelu ja analyysi (kevät 2004) 1. välikoe, ratkaisuja

1 Puu, Keko ja Prioriteettijono

Kierros 4: Binäärihakupuut

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Olkoon seuraavaksi G 2 sellainen tasan n solmua sisältävä suunnattu verkko,

811312A Tietorakenteet ja algoritmit V Hash-taulukot ja binääriset etsintäpuut

Algoritmit 1. Luento 4 Ke Timo Männikkö

CS-A1140 Tietorakenteet ja algoritmit

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.

14 Tasapainotetut puurakenteet

Algoritmit 1. Luento 12 Ke Timo Männikkö

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 2. helmikuuta 2012

1.1 Tavallinen binäärihakupuu

Ensimmäinen induktioperiaate

58131 Tietorakenteet (kevät 2009) Harjoitus 9, ratkaisuja (Antti Laaksonen)

Ensimmäinen induktioperiaate

Valitaan alkio x 1 A B ja merkitään A 1 = A { x 1 }. Perinnöllisyyden nojalla A 1 I.

Algoritmit 2. Luento 3 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Algoritmit 2. Luento 3 Ti Timo Männikkö

7. Tasapainoitetut hakupuut

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Tehtävä 4 : 2. b a+1 (mod 3)

Algoritmit 1. Luento 12 Ti Timo Männikkö

T Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 7 (opetusmoniste, kappaleet )

6. Hakupuut. Hakupuu (engl. search tree) on listaa huomattavasti edistyneempi tapa toteuttaa abstrakti tietotyyppi joukko

811312A Tietorakenteet ja algoritmit V Verkkojen algoritmeja Osa 2 : Kruskalin ja Dijkstran algoritmit

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

1.4 Funktioiden kertaluokat

Induktiota käyttäen voidaan todistaa luonnollisia lukuja koskevia väitteitä, jotka ovat muotoa. väite P(n) on totta kaikille n = 0,1,2,...

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Koe ma 28.2 klo salissa A111, koeaika kuten tavallista 2h 30min

Ohjelmoinnin perusteet Y Python

verkkojen G ja H välinen isomorfismi. Nyt kuvaus f on bijektio, joka säilyttää kyseisissä verkoissa esiintyvät särmät, joten pari

Algoritmit 2. Luento 10 To Timo Männikkö

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 9. lokakuuta 2016

(p j b (i, j) + p i b (j, i)) (p j b (i, j) + p i (1 b (i, j)) p i. tähän. Palaamme sanakirjaongelmaan vielä tasoitetun analyysin yhteydessä.

Algoritmit 2. Luento 9 Ti Timo Männikkö

Algoritmit 1. Luento 13 Ti Timo Männikkö

2 Sanoja järjestävän funktion ohjelmoiminen

A TIETORAKENTEET JA ALGORITMIT KORVAAVAT HARJOITUSTEHTÄVÄT 3, DEADLINE KLO 12:00

Algoritmit 1. Luento 13 Ma Timo Männikkö

Luku 4. Tietorakenteet funktio-ohjelmoinnissa. 4.1 Äärelliset kuvaukset

Ohjelmoinnin peruskurssien laaja oppimäärä

Algoritmit 2. Luento 11 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 2, , vastauksia

ja λ 2 = 2x 1r 0 x 2 + 2x 1r 0 x 2

Tietorakenteet ja algoritmit Hakurakenteet Ari Korhonen

Matemaattisten työvälineiden täydentäviä muistiinpanoja

Pienin virittävä puu (minimum spanning tree)

Paikkatiedon hallinta ja analyysi 4. Paikkatiedon indeksointi (jatkoa)

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

Stabiloivat synkronoijat ja nimeäminen

Transkriptio:

1 Tietorakenteet (kevät 08) 1. kurssikoe, ratkaisuja Tehtävän 1 korjasi Mikko Heimonen, tehtävän 2 Jaakko Sorri ja tehtävän Tomi Jylhä-Ollila. 1. (a) Tehdään linkitetty lista kaikista sukunimistä. Kuhunkin listan solmuun liittyy paitsi sukunimi, myös osoitin kaikki siihen liittyvät etunimet sisältävään listaan. Allaolevassa esimerkissä hakemisto sisältää nimet Maija Niemi, Ville Niemi, Tauno Niemi, Tuula Järvi, Matti Lahti ja Maija Lahti. Listojen toteutukseen on tässä valittu kahteen suuntaan linkitetty rengaslista. head Niemi Maija Ville Tauno sukunimi Järvi Tuula alku loppu taakse eteen sukunimisolmu Lahti Matti Maija etunimi eteen taakse etunimisolmu (b) TULOSTA-SUKUNIMET if head NIL then p head repeat print sukunimi[p] p eteen[p] until p = head TULOSTA-ETUNIMET(suku) if head NIL then p head if sukunimi[p] suku then repeat p eteen[p] until sukunimi[p] = suku or p = head if sukunimi[p] = suku then q alku[p] while q p do print etunimi[q] q eteen[q]

(c) INSERT(etu, suku) if head = NIL then p new sukunimisolmu sukunimi[p] suku eteen[p] taakse[p] alku[p] loppu[p] p else p head if sukunimi[p] suku then repeat p eteen[p] until sukunimi[p] = suku or p = head if sukunimi[p] suku then p new sukunimisolmu sukunimi[p] suku alku[p] loppu[p] p eteen[p] head taakse[p] taakse[head] taakse[head] p eteen[taakse[p]] p head p q new etunimisolmu etunimi[q] etu eteen[q] eteen[p] taakse[q] p eteen[p] q taakse[eteen[q]] q Arvostelusta: Täydet pisteet oli mahdollista saada paitsi listoja sisältävällä listalla myös esimerkiksi listoja sisältävälllä hakupuulla (tai hakupuita sisältävällä hakupuulla), kunhan funktiot toimivat kuten määriteltyä ja hakuoperaatioiden aikavaativuudet eivät ylittyneet. Joitakin yleisiä virheitä: Jos ratkaisu perustui kokonaan taulukoihin, joiden oletettiin olevan äärettömän kokoisia, oli maksimi 4 pistettä. Jos INSERT kasvatti taulukkoa tarpeen mukaan, sai täydet pisteet, mutta ainoa tällaista ratkaisua ehdottanut paperi sisälsi muita ongelmia. Jos ratkaisuna oli taulukkoja sisältävä lista (jonka taulukot vuotivat yli), sai yleensä 6 pistettä. Jos ratkaisu oli yksi linkitetty lista, jonka solmut sisälsivät etunimi, sukunimi -pareja, oli maksimi 4 pistettä, koska tällöin hakuoperaatiot toimivat ajassa O(lisättyjen henkilöiden määrä), joka on eri kuin O(n) tai O(n + m). Lisäksi jos listaa ei pidetty järjestyksessä, tulostuivat sukunimet yleensä useampaan kertaan, mistä menetti vielä yhden pisteen. Jos ratkaisuissa käytti jotain listaoperaatiota (kuten SEARCH) eikä esittänyt itse sen toteutusyksityiskohtia, menetti yhden pisteen. Useammasta saman operaation käytöstä ei rangaistu erikseen. Lisäksi koodin epäloogisuudet tai puutteet toiminnallisuudessa verottivat pisteitä. 2. (a) AVL-puussa jokaisen solmun vasemman ja oikean alipuun korkeuksien ero saa olla vain 1, 0 tai +1. AVL-tasapainoehdosta seuraa, että n-solmuisen puun korkeus on O(log n). Tästä edelleen seuraa, että joukko-operaatiot n-alkioisella joukolla toimivat pahimmassakin tapauksessa ajassa O(log n), kun tasapainottamattomalla binääripuulla pahimman tapauksen aikavaativuudet ovat O(n). Arvostelusta: Yksi piste tasapainoehdosta, toinen AVL-puun edusta tasapainottamattomaan binääripuuhun nähden. Kohta oli osattu pääsääntöisesti hyvin ja pistemenetyksiä tuli etupäässä ylimal-

kaisuuksista. Kahta pistettä ei saanut vain toteamalla, että AVL-puut ovat nopeampia, jos ei vihjaissut mitään siitä, missä ne ovat nopeampia tai miksi. (b) Lisätään alkio, jolloin solmu joutuu epätasapainoon (vasemman alipuun korkeus 2, oikean 0): 4 1 4 2 1 7 7 Kierretään oikealle solmussa, jolloin puu päätyy tasapainoon: 4 1 4 2 1 7 7

Avaimen 8 lisääminen ei riko puun tasapainoa, joten kiertoja ei tarvita: 4 1 4 2 1 7 8 7 Avaimen 27 lisääminen saattaa solmun epätasapainoon (vasemman alipuun korkeus, oikean 1): 4 1 4 2 1 7 8 7 27

Koska lisäys on tehty solmun vasemman lapsen oikeaan alipuuhun, tarvitaan vasen-oikeakaksoiskierto: 4 1 4 2 1 7 8 27 7 Arvostelusta: Kohdasta oli mahdollista saada täysin oikealla vastauksella ja riittävillä selityksillä tai välivaiheiden piirtämisellä pistettä. Kustakin virheestä ja olennaisten välivaiheiden puuttumisesta rokotettiin yhdellä pisteellä. Kohta oli osattu varsin hyvin. Harmittavan monelta oli kuitenkin jäänyt huomaamatta, että avaimen lisääminen vie solmun epätasapainoon, vaikka tasapainoehto olikin a-kohdassa osattu. Myös avaimen 27 lisäämisen aiheuttama kaksoiskierto aiheutti monelle päänvaivaa. Täydet pisteet sai vain näyttämällä, miten kaksoiskierto tehdään oikeaoppisesti. Vastauksista, joissa oli päädytty oikeaan lopputilanteeseen ilman selityksiä tai välivaiheita vähennettiin yksi piste, samaten niistä, joissa lopputilanne oli laillinen AVL-puu, mutta matkan varrella tehtiin laittomia kiertoja tai tarpeettoman monta laillista kiertoa. Jos lopputilanne ei täyttänyt AVL-puun tasapainoehtoa, vähennettiin kaksi pistettä. (c) Koska solmulla on kaksi lasta, normaali binääripuun poisto siirtää avaimen sisältäneeseen solmuun seuraaja-avaimen. Avaimen sisältänyt solmu poistetaan puusta. Puu on edelleen tasapainossa: 4 1 4 2 1 7 7

Avain 7 on lehdessä, joka voidaan suoraan poistaa. Nyt solmu joutuu epätasapainoon (vasemman alipuun korkeus 0, oikean 2): 4 1 4 2 1 7 Solmu tasapainottuu tekemällä siinä oikea-vasen-kaksoiskierto: 4 1 4 2 1 7

Nyt kuitenkin solmu joutui epätasapainoon (vasemman alipuun korkeus 4, oikean 2). Koska korkein alipuu on vasemman lapsen oikea alipuu, tehdään vasen-oikea-kaksoiskierto: 4 1 4 2 1 7 Puu on nyt tasapainossa. Arvostelusta: Pisteytysperusteet samat kuin edellä, eli max. pistettä, virheistä rokotettiin yksi piste. Välivaiheiden näyttämistä pyydettiin tehtävänannossa, joten täysiä pisteitä ei tässäkään kohdassa saanut pelkillä oikeilla lopputilanteilla. Kohta näytti olleen tehtävän vaikein. Avainta poistettaessa seuraajan kaivaminen puusta aiheutti hankaluuksia, mikä johti usein eriskummallisten operaatioiden sarjaan. Näistä vähennettiin pääsääntöisesti vain yksi piste. Lehden 7 poistaminen oli osattu paremmin ja myös siitä aiheutuva solmun epätasapaino oli huomattu mukavasti. Tosin tasapainotuksen vaatima kaksoiskierto aiheutti joillekin päänvaivaa, ja muutamissa vastauksissa lopputilanteeksi jäi laiton binääripuu (yleensä avain oli avaimen oikea lapsi), mistä rokotettiin armotta. Yleisempi virhe oli kuitenkin se, että solmun tasapainotuksen aiheuttama epätasapaino solmussa jäi huomaamatta. Täydet pisteet sai vain huomaamalla kaikki epätasapainot ja näyttämällä oikeat kierrot puun tasapainottamiseksi. Välivaiheiden puuttuminen tulkittiin virheeksi.. (a) Väite: Epätyhjässä täydessä binääripuussa lehtien lukumäärä = sisäsolmujen lukumäärä + 1. Todistus: Tehdään induktio puun korkeuden suhteen. Koska väite koskee epätyhjiä puita, korkeuden 1 osalta ei ole mitään todistettavaa. Jos T on täysi binääripuu, jonka korkeus on nolla, siinä on yksi lehti ja nolla sisäsolmua. Väite siis pätee. Tehdään nyt induktio-oletus, että väite pätee kaikilla puille, joiden korkeus on korkeintaan h 0. Olkoon T täysi binääripuu, jonka korkeus on h+1. Siis T :n vasemman ja oikean alipuun korkeudet ovat kumpikin korkeintaan h (ja ainakin toinen on tasan h, mutta sitä ei tässä tarvita). Oletuksen mukaan T on täysi eli jokaiselle sen solmulla on 0 tai 2 lasta; tämä pätee erityisesti vasemman ja oikean alipuun solmuille, joten oikea ja vasen alipuu ovat täysiä. Lisäksi myös juurella on kaksi lasta (koska korkeus ei ole nolla), eli T :n vasen ja oikea alipuu ovat epätyhjiä. Vasen ja oikea alipuu ovat siis epätyhjiä täysiä binääripuita, joiden korkeus on korkeintaan h, ja niihin voidaan soveltaa induktio-oletusta. Olkoon vasemman alipuun sisäsolmujen lukumäärä s L ja lehtien l L ; oikeassa alipuussa vastaavasti s R ja l R. Induktio-oletuksen nojalla l L = s L + 1 ja l R = s R + 1. Olkoon s T koko puun T sisäsolmujen lukumäärä ja l T lehtien lukumäärä. Puun T lehtiä ovat vasemman ja oikean alipuun lehdet. Puun T sisäsolmuja ovat vasemman ja oikean alipuun sisäsolmut sekä lisäksi juuri. Saadaan l T = l L + l R = (s L + 1) + (s R + 1) (induktio-oletus) = (s L + r L + 1) + 1 = s T + 1

eli väite pätee myös puulle T. Arvostelusta: Vastaukset on arvosteltu seuraavien tekijöiden mukaisesti. Perustapaus on käsitelty oikein (2 p). Tässä riittää esitellä sellainen tapaus, jonka voi täydentää sopivalla induktioaskeleella siten, että väite tulee osoitetuksi kaikille täysille binääripuille. Yksinkertaisin tapa on esitellä yksisolmuinen puu. Induktioaskel on tehty oikein (6 p): Induktio-oletuksessa käytetään täysiä puita, joihin oletusta voidaan soveltaa (2 p). Induktioaskelta toistuvasti soveltamalla voidaan muodostaa kaikki täydet binääripuut perustapauksesta lähtien (2 p). Uuden puun lehtien ja sisäsolmujen määrä on laskettu oikein (2 p). (Pisteitä olisi vähennetty, mikäli itsessään validi perustapaus ja induktioaskel eivät olisi sopineet yhteen toistensa kanssa, mutta tällaisia vastauksia ei ollut.) Moni vastaajista oli esittänyt todistuksen täydellisille binääripuille, jotka ovat erikoistapaus täysistä puista. Tästä annettiin esitystarkkuudesta riippuen 2 tai pistettä. Yleinen puute muuten oikeissa ratkaisuissa oli se, että induktioaskeleessa ei käytetty nimenomaan täysiä binääripuita eikä perusteltu, miksi niistä muodostettu uusi puu on täysi. (b) Tehtävänä oli esittää yksityiskohtainen pseudokoodi algoritmille POISTA-PIENEMMÄT(T,k), joka poistaa puusta T kaikki avainta k pienemmät avaimet. POISTA-PIENEMMÄT(T, k) root[t] PIENEMMÄT-POISTETTU(root[T], k) PIENEMMÄT-POISTETTU(x, k) if x = NIL then return NIL elseif key[x] k then Poistot tehdään vasemmassa alipuussa left[x] PIENEMMÄT-POISTETTU(left[x], k) return x else Juuri ja vasen alipuu poistetaan kokonaan return PIENEMMÄT-POISTETTU(right[x], k) Arvostelusta: Vastaukset on arvosteltu seuraavien tekijöiden mukaisesti. Algoritmi toimii oikein (8 p). Pienempi avain löydetään oikein (2 p). Pienemmän avaimen löytyessä se ja sen vasen alipuu poistetaan oikein ja jatketaan tarkastelua oikeassa alipuussa (s.e. oikeaan alipuuhun säilytetään viite oikein) (4 p). Puussa eteneminen päättyy oikein (2 p). Jos algoritmin aikavaativuus ei ollut O(h), vähennettiin 1 p. Isäviitteiden käyttö on sallittu, kunhan nämä viitteet päivitetään poistojen yhteydessä oikein. Tyypillinen virhe oli poistaa vasen alipuu kokonaan sellaiselta solmulta x, jolle key[x] = k. Täältä voi kuitenkin edelleen löytyä solmuja, joilla on yhtä suuri avain. Monissa vastauksissa viitteitä lapsisolmuihin (ja isäsolmuihin, mikäli ne olivat käytössä) ei ollut päivitetty oikein, vaan poistettavan solmun oikea alipuu hukattiin. Myös DELETE-operaation käyttö oli suosittua, mutta tämä johti algoritmin hidastumiseen. Lisäksi poistetun solmun korvaajaa ei ollut aina muistettu käsitellä.