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

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

Algoritmit 2. Luento 4 Ke Timo Männikkö

Algoritmit 2. Luento 4 To Timo Männikkö

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

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

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

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

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

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

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

Algoritmit 2. Luento 5 Ti Timo Männikkö

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

Algoritmit 2. Luento 7 Ti Timo Männikkö

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Algoritmit 1. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

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

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

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.

Tietorakenteet, laskuharjoitus 10, ratkaisuja. 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

Algoritmit 2. Luento 2 To Timo Männikkö

Tarkennamme geneeristä painamiskorotusalgoritmia

Hajautus. operaatiot insert ja search pyritään tekemään erittäin nopeiksi

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö

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

58131 Tietorakenteet ja algoritmit (syksy 2015)

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Tietorakenteet, laskuharjoitus 3, ratkaisuja

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

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

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

4. Perustietorakenteet: pino, jono ja lista

Algoritmit 1. Luento 7 Ti Timo Männikkö

Binäärihaun vertailujärjestys

1.1 Tavallinen binäärihakupuu

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

Algoritmit 1. Luento 12 Ke Timo Männikkö

Tietorakenteet, laskuharjoitus 6,

5. Hajautus. Tarkastellaan edelleen sivulla 161 esitellyn joukkotietotyypin toteuttamista

Algoritmit 1. Luento 5 Ti Timo Männikkö

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

Algoritmit 1. Luento 12 Ti Timo Männikkö

Oikeasta tosi-epätosi -väittämästä saa pisteen, ja hyvästä perustelusta toisen.

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

Algoritmit 1. Luento 13 Ti Timo Männikkö

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

Algoritmit 1. Demot Timo Männikkö

Ohjelmoinnin peruskurssi Y1

Algoritmit 2. Luento 6 Ke Timo Männikkö

14 Tasapainotetut puurakenteet

9.3 Algoritmin valinta

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

Kysymyksiä koko kurssista?

Algoritmit 1. Demot Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 2. Luento 14 Ke Timo Männikkö

4. Joukkojen käsittely

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

Aikavaativuuden perussäännöt

8. Yhteenvetoa. abstrakti tietotyyppi: mitä datalle halutaan tehdä tietorakenne: miten se tehdään (talletusrakenne, operaatioden toteutus)

Fibonacci-kasoilla voidaan toteuttaa samat operaatiot kuin binomikasoilla.

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

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

Algoritmi on periaatteellisella tasolla seuraava:

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

Pikalajittelu: valitaan ns. pivot-alkio esim. pivot = oikeanpuoleisin

Algoritmit 1. Demot Timo Männikkö

A TIETORAKENTEET JA ALGORITMIT

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

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

Algoritmit 1. Luento 13 Ma Timo Männikkö

Tietorakenteet, laskuharjoitus 8,

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

B + -puut. Kerttu Pollari-Malmi

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

4. Hajautus. Hajautus (hashing) on vaihtoehto tasapainoisille puille dynaamisen joukon toteuttamisessa:

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

Algoritmit 2. Luento 12 To Timo Männikkö

CS-A1140 Tietorakenteet ja algoritmit

Algoritmit 1. Demot Timo Männikkö

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Tietorakenteita 163. Yhteen suuntaan linkitetyn listan rakenne on siis seuraavan kuvan kaltainen:

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

(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ä.

Tietorakenteet, laskuharjoitus 2,

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

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

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

Imperatiivisen ohjelmoinnin peruskäsitteet. Meidän käyttämän pseudokielen lauseiden syntaksi

2. Perustietorakenteet

Algoritmit 1. Luento 4 Ke Timo Männikkö

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.

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

A TIETORAKENTEET JA ALGORITMIT

Johdatus lukuteoriaan Harjoitus 2 syksy 2008 Eemeli Blåsten. Ratkaisuehdotelma

Transkriptio:

Tietorakenteet ja algoritmit, kevät 201 Kurssikoe 1, ratkaisuja 1. Tehtävästä sai yhden pisteen per kohta. (a) Invariantteja voidaan käyttää algoritmin oikeellisuustodistuksissa Jokin väittämä osoitetaan invariantiksi näyttämällä, että 1. invariantti on voimassa tultaessa ensimmäistä kertaa toistolauseeseen 2. invariantti pysyy totena jokaisen toistolauseen rungon suorituksen jälkeen Askelien 1 ja 2 voimassaolosta seuraa se, että jos invariantti on aluksi tosi, pysyy se voimassa koko loopin suorituksen ajan Erityisesti invariantti on vielä totta siinäkin vaiheessa kun loopin suoritus loppuu. Jos invariantti on valittu järkevästi, niin toistolauseen loppuminen yhdessä invariantin voimassaolon kanssa takaa halutun lopputuloksen (b) Binäärihakupuu on ensinnäkin binääripuu, eli jokaisella solmulla on korkeintaan 2 lasta. Lisäksi sille pätee binäärihakupuuehto: jos solmu v on solmun x vasemmassa alipuussa, niin v.key < x.key jos solmu o on solmun x oikeassa alipuussa, niin o.key > x.key (c) Universaalihajautus: valitaan jokaisella ohjelman suorituskerralla satunnainen hajautusfunktio sopivien hajautusfunktioiden perheestä, joka millä tahansa avainten jakaumalla on keskimäärin hyvä. Toteutus: Valitaan alkuluku p joka on vähintään yhtä suuri kuin talletettavien avainten lukumäärä n. Valitaan satunnaisesti kaksi kokonaislukua a ja b väliltä 1 a < p ja 0 b < p. Muodostetaan hajautusfunktio seuraavasti: h(k) = ((a k + b) mod p) mod m (d) Kokeilujono: Avoimessa hajautuksessa kaikki avaimet talletetaan hajautustauluun. Jos paikka T[h(k)] on varattu, etsitään avaimelle k jokin muu paikka taulusta. Uusikin paikka voi olla varattu, tällöin jatketaan etsimistä edelleen. Ne paikat joihin avainta k yritetään laittaa muodostavat k:n kokeilujonon. Huom. Kokeilujono on eri asia kuin kokeilufunktio. 2. Tehtävästä sai 2 pistettä per kohta. (a) L on listan tunnussolmu, joten se ei voi olla null. Algoritmi lisäämiselle loppuun: lisaa(l,k) solmu = new Solmu solmu.key = k solmu.next = null s = L while s.next!= null s = s.next s.next = solmu 1

Algoritmin tilavaativuus on vakio, sillä se käyttää vain kahta apumuuttujaa. Aikavaativuus on O(n), missä n on listan pituus, sillä joudumme käymään listan kokonaisuudessaan läpi löytääksemme viimeisen paikan. (b) Listan ollessa rengaslista pääsemme viimeiseen alkioon listan ensimmäisen jäsenen prev-linkin avulla: lisaa(l,k) solmu = new Solmu solmu.key = k if (L!= null) L.prev.next = solmu solmu.prev = L.prev L.prev = solmu solmu.next = L else solmu.next = solmu solmu.prev = solmu L = solmu Tilavaativuus on taas vakio ja tällä kertaa saamme aikavaativuudenkin vakioksi. (c) Tällä kertaa saamme linkin poistettavaan solmuun, joten meidän ei tarvitse käydä koko listaa läpi etsiäksemme poistettavaa solmua. poista(l,x) edel = x.prev seur = x.next if edel!= null edel.next = seur else L = seur if seur!= null seur.prev = edel Jälleen algoritmin aika- ja tilavaativuus ovat vakioita. 3. Tehtävästä sai 2 pistettä per kohta. (a) Esijärjestys:,3,1,13,7,16,1 Sisäjärjestys: 1,3,,7,13,1,16 Jälkijärjestys: 1,3,7,1,16,13, 2

(b) Lisätään solmu 15: / 1 7 16 / 1 \ 15 Nyt solmu 16 on alin solmu, joka on epätasapainossa. Koska epätasapainon aiheuttaa solmun 16 vasemman lapsen oikea alipuu, niin teemme ensin kierron vasemmalle ja sitten oikealle. Tuloksena oleva puu: / 1 7 15 1 16 Nyt puu on taas tasapainossa ja voimme lisätä solmun 20: / 1 7 15 1 16 \ 20 Solmu 13 on alin, joka on epätasapainossa. Epätasapainon aiheuttaa solmun 13 oikean lapsen oikea alipuu, joten pelkkä vasemmalle kierto riittää. Tuloksena oleva puu: 3

3 15 / 1 13 16 \ 7 1 20 Nyt puu on jälleen tasapainossa. (c) Kun poistamme solmun 1, niin solmu joutuu epätasapainoon. Voimme korjata tilanteen tekemällä kierron vasemmalle solmusta : 13 16 /\ / 3 7 1 Nyt puu on taas tasapainossa. Seuraavaksi poistamme solmun 13. Solmulla 13 on kaksi lasta, joten sen tilalle tulee solmun 13 seuraaja, eli solmu 1: 1 16 /\ 3 7 Puu on tasapainossa, joten olemme valmiita.. Seuraava algoritmi tarkastaa, ovatko kaksi binääripuuta samanlaiset: samat(a,b) if a == null and b == null return true if a == null or b == null if a.key!= b.key if not samat(a.left,b.left) if not samat(a.right,b.right) return true

Toinen vaihtoehto on tarkastaa, onko puiden sisä-ja esijärjestys (tai sisä- ja jälkijärjestys) samat. Nämä määräävät binääripuun yksikäsitteisesti. 5