A274101 TIETORAKENTEET JA ALGORITMIT



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

3. Binääripuu, Java-toteutus

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

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

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

Algoritmit 2. Luento 2 To Timo Männikkö

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

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

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

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

Algoritmit 1. Luento 7 Ti Timo Männikkö

Binäärihaun vertailujärjestys

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.

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

Algoritmit 2. Luento 4 Ke Timo Männikkö

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

Kierros 4: Binäärihakupuut

A TIETORAKENTEET JA ALGORITMIT

CS-A1140 Tietorakenteet ja algoritmit

Algoritmit 2. Luento 4 To Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö

Tietorakenteet ja algoritmit Puurakenteet Ari Korhonen

Tietorakenteet, laskuharjoitus 6,

1.1 Tavallinen binäärihakupuu

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Kysymyksiä koko kurssista?

Muita linkattuja rakenteita

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

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

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

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

puuta tree hierarkkinen hierarchical

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

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

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

1 Puu, Keko ja Prioriteettijono

10. Painotetut graafit

Luku 8. Aluekyselyt. 8.1 Summataulukko

Algoritmi on periaatteellisella tasolla seuraava:

Algoritmit 2. Luento 6 Ke Timo Männikkö

A TIETORAKENTEET JA ALGORITMIT

7. Tasapainoitetut hakupuut

private TreeMap<String, Opiskelija> nimella; private TreeMap<String, Opiskelija> numerolla;

Tietorakenteet ja algoritmit Hakurakenteet Ari Korhonen

Tietorakenteet ja algoritmit - syksy

TIEA341 Funktio-ohjelmointi 1, kevät 2008

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Algoritmit 1. Luento 6 Ke Timo Männikkö

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

Kierros 3: Puut. Tommi Junttila. Aalto University School of Science Department of Computer Science

B + -puut. Kerttu Pollari-Malmi

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

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

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

6. Sanakirjat. 6. luku 298

Tiraka, yhteenveto tenttiinlukua varten

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 2. Demot Timo Männikkö

CS-A1140 Tietorakenteet ja algoritmit

Algoritmit 2. Luento 6 To 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.

Algoritmit 1. Luento 1 Ti Timo Männikkö

TIETORAKENTEET JA ALGORITMIT

14 Tasapainotetut puurakenteet

Algoritmit 1. Luento 13 Ti Timo Männikkö

Tietorakenteet ja algoritmit. Kertaus. Ari Korhonen

4. Joukkojen käsittely

18. Abstraktit tietotyypit 18.1

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 12 Ke Timo Männikkö

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Algoritmit 2. Luento 3 Ti Timo Männikkö

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

Kaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PushFront(x): lisää tietoalkion x jonon eteen

Datatähti 2019 loppu

Tietorakenteet ja algoritmit

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

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

4. Perustietorakenteet

9.3 Algoritmin valinta

Algoritmit 1. Luento 12 Ti Timo Männikkö

4 Tehokkuus ja algoritmien suunnittelu

Luento 3: Tietorakenteiden esittäminen

Helsingin yliopisto/tktl XML-metakieli XPath

A TIETORAKENTEET JA ALGORITMIT

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

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

Tietorakenteet ja algoritmit II Loppuraportti, ryhmä 7

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

ITKP102 Ohjelmointi 1 (6 op)

10. Painotetut graafit

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

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

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

Transkriptio:

A274101 TIETORAKENTEET JA ALGORITMIT PUURAKENTEET, BINÄÄRIPUU, TASAPAINOTETUT PUUT MIKÄ ON PUUTIETORAKENNE? Esim. Viereinen kuva esittää erästä puuta. Tietojenkäsittelytieteessä puut kasvavat alaspäin. Puu on abstrakti tietotyyppi Puun määrittely: Puu on joko tyhjä, tai se sisältää alkion, johon liittyy nolla tai useampia puita. Oheinen kuva on vain yksi tapa esittää puu D B E A F C G H I 4.10.2005 KyAMK - TiRak, syksy 2005 2 MIKÄ ON PUUTIETORAKENNE? Sama puu voidaan myös esittää seuraavasti: (A(B(D,E),C(F(I),G,H))) Tai seuraavasti: Käytetään jatkossa ensimmäistä esitystapaa, ellei toisin mainita Tieto sijoitetaan puussa solmuihin (node l. vertex) Solmuja yhdistävät sivut eli särmät (edge) Solmu, johon ei tule sivuja, on juuri (root) Solmut, joista ei lähde sivuja ovat lehtiä (leaf l. terminal node) Solmusta alkava puu on oksa tai alipuu (subtree, branch) OKSA, ALIPUU D B E LEHTI A JUURI SÄRMÄ SOLMU C F G H I 4.10.2005 KyAMK - TiRak, syksy 2005 3 4.10.2005 KyAMK - TiRak, syksy 2005 4

Toisiinsa yhdistetyt solmut n 1, n 2, n 3,..., n k muodostavat polun (path) Polun pituus (path-length) on k-1 Puussa ei voi olla sulkeutuvia polkuja eli silmukoita Solmun kanssa samassa polussa oleva lähin juurenpuoleinen solmu on isä (father) lähin lehdenpuoleinen on lapsi (child) Polussa kauempana olevat ovat joko esivanhempia eli edeltäjiä (ancestor) tai jälkeläisiä eli seuraajia (descendant) Saman solmun lapset ovat sisaruksia (sibling) Solmun s syvyys eli taso (depth, level) on polun pituus juuresta s:ään Juuren syvyys = 0 Solmun s korkeus (height) on pisimmän polun pituus s:stä lehteen Lehden korkeus on 0 Puun korkeus on sen juuren korkeus Puun syvyys on sen syvimmän lehden syvyys Puun korkeus = puun syvyys Solmun aste on sen lapsiluku Nolla tai useampia puita muodostavat metsän (forest) 4.10.2005 KyAMK - TiRak, syksy 2005 5 4.10.2005 KyAMK - TiRak, syksy 2005 6 Poikkeus esitystapaan: Jos solmuilla on suuresti vaihteleva määrä lapsia, muistinkäytön kannalta 1. kuvan mukainen puun esittäminen ei ole tehokas tapa. class TreeNode { Object item; TreeNode firstchild; TreeNode nextsibling; B A C Linkitetyn listan tyyppisessä esitystavassa puun alkion tietotyyppi vaatisi useita osoitinkenttiä, joiden lukumäärä riippuu suurimmasta yksittäisen solmun lapsiluvusta Haitta voidaan korvata ratkaisulla, jossa isäsolmusta lähtee vain yksi osoitin lapsisolmuun (esikoinen) ja mahdollisesti toinen sisarukseen D E I F G H 4.10.2005 KyAMK - TiRak, syksy 2005 7 4.10.2005 KyAMK - TiRak, syksy 2005 8

BINÄÄRIPUU BINÄÄRIPUU Tärkein tai ainakin yleisin puurakenne on binääripuu (binary tree), jossa jokaisella solmulla on enintään kaksi lapsisolmua Erikoistapaus M-puusta (M-ary tree), missä jokaisen solmun lapsilukumäärä on enintään M Binääripuun solmusta siis lähtee enimmillään kaksi oksaa: vasen oksa ja oikea oksa Esim. Class Node { Object item; Node left; Node right; Tietorakenne on hyvin samankaltainen kuin linkitetyn listan tietorakenne. 4.10.2005 KyAMK - TiRak, syksy 2005 9 4.10.2005 KyAMK - TiRak, syksy 2005 10 BINÄÄRIPUU BINÄÄRIPUU Esim. Lausekepuu Ohjelmointikielten kääntäjät käyttävät tehokkaasti hyväksi puutietorakenteita Tarkastellaan aritmeettisen lausekkeen saattamista muotoon, jossa sen arvo voidaan määrittää (evaluoida) Ensin kääntäjä selaa lausekkeen eritellen siitä yksiköt (tokens: operaattorit, vakiot, muuttujat, funktiot ym.) Selauksen yhteydessä kääntäjä rakentaa lausekepuun, jota seuraa koodin generointi ja evaluointi Esimerkiksi lauseketta ( a + b * c ) + ( ( d * e + f ) * g ) vastaa puu a + b + * + c * * f g 4.10.2005 KyAMK - TiRak, syksy 2005 11 d e 4.10.2005 KyAMK - TiRak, syksy 2005 12

BINÄÄRIPUUN LÄPIKÄYNTI Binääripuu on rekursiivinen rakenne on luonnollista, että sitä käsittelevät funktiot ja metodit ovat myös rekursiivisia Seuraava Java-koodi esittää periaatteen, miten käydään binääripuun jokaisessa solussa void traverse( Node p ) { if ( p == null ) { return; visit( p ); /* Tehdään "visiitti"*/ traverse( p.left ); traverse( p.right ); BINÄÄRIPUUN LÄPIKÄYNTI Edellä kutsu visit( p ) edeltää rekursiivisia kutsuja Se voi olla myös niiden välissä tai niiden molempien jäljessä Riippuen kutsun paikasta saadaan kolme erilaista puun läpikäyntijärjestystä Esijärjestys (Preorder) 1. Solmu 2. Vasen oksa 3. Oikea oksa Sisäjärjestys (Inorder) 1. Vasen oksa 2. Solmu 3. Oikea oksa Jälkijärjestys (Postorder) 1. Vasen oksa 2. Oikea oksa 3. Solmu 4.10.2005 KyAMK - TiRak, syksy 2005 13 4.10.2005 KyAMK - TiRak, syksy 2005 14 BINÄÄRIPUUN LÄPIKÄYNTI Esimerkki: Lausekepuun läpikäyminen Kun edellä kuvattu lausekepuu käydään läpi järjestyksissä 1-3, saadaan lausekkeet: 1. + + a * b c * + * d e f g (lauseke prefix-muodossa) 2. a + b * c + d * e + f * g (lauseke infix-muodossa) 3. a b c * + d e * f + g * + (lauseke postfix-muodossa) Huomataan, että yllättäen saadaan tuloksiksi aritmeettisen lausekkeen kolme eri esitystapaa Binääristä hakupuuta (BST) käytetään tiedon hakemiseen Puu on kätevä tapa organisoida tietoaines etsittävä tieto löytyy nopeasti saadaan nopeasti selville, että tietoa ei löydy Tehokkuudeltaan haku BST:stä vastaa puolitushakua taulukosta BST:n koko voidaan kuitenkin räätälöidä tarkalleen datan koon mukaan Huom. Taulukossahan muistinvaraus pitää tehdä suurimman mahdollisen koon perusteella. 4.10.2005 KyAMK - TiRak, syksy 2005 15 4.10.2005 KyAMK - TiRak, syksy 2005 16

Olkoon tehtävänä järjestää tietoaines jonkin avaimen (key) perusteella Avain voi olla esimerkiksi struktuurin jokin kenttä Jos tietoalkiot ovat yksinkertaisia, vaikkapa kokonaislukuja, tieto itse on samalla avain BST on puu, jonka kaikille paitsi lehtisolmuille pätee: Vasemman oksan kaikki avaimet < solmun avain < oikean oksan kaikki avaimet Huom. Jos sallitaan avainarvojen toistuminen (ei kätevää hakusovelluksissa), tietorakenteeseen voidaan sijoittaa lisäkenttä, joka ilmoittaa lukumäärän ja varsinainen data sijoittaa esimerkiksi solmusta alkavaan järjestettyyn listaan. BST:n konstruointiperiaate on seuraava Ensimmäinen avainarvo sijoitetaan BST:n juureen Seuraava vasemmaksi tai oikeaksi lehdeksi riippuen onko se pienempi vai suurempi kuin juuren avain Kussakin vaiheessa seuraava avain sijoitetaan senhetkisen puun lehdeksi Paikka etsitään etenemällä juuresta lähtien ja kussakin solmussa valitsemalla vasen tai oikea oksa avaimen suuruuden perusteella 4.10.2005 KyAMK - TiRak, syksy 2005 17 4.10.2005 KyAMK - TiRak, syksy 2005 18 Esimerkki: Konstruoidaan BST avaimista 5, 3, 8, 2, 4, 1, 7, 6, 9 (tässä järjestyksessä) 5 Jos n-solmuiseen BST:hen sijoitettavat avaimet ovat suuruusjärjestyksessä suurin mahdollinen korkeus, h = n 1 Pienin mahdollinen korkeus joudutaan laskemaan 3 8 1 + 2 + 4 + 8 +... + 2 h = n (vasen puoli geom. sarja) 2 4 7 9 2 h+1-1 = n h = log(n + 1) 1 1 6 Huom. Merkintä tarkoittaa pyöristämistä kokonaisluvuksi ylöspäin (ceil) ja vastaavasti alaspäin (floor). 4.10.2005 KyAMK - TiRak, syksy 2005 19 4.10.2005 KyAMK - TiRak, syksy 2005 20

Tärkeimmät BST:lle tehtävät toimenpiteet ovat createbst - luo tyhjän BST:n find - etsii tietoa BST:stä avaimen perusteella findmin - etsii pienintä avainarvoa vastaavan tiedon findmax - etsii suurinta avainarvoa vastaavan tiedon insnode - lisää solmun BST:hen delnode - poistaa solmun BST:stä delbst - tuhoaa koko BST:n Voidaan osoittaa, että n-solmuisessa BST:ssä kaikkien näiden toimenpiteiden keskimääräinen suoritusaika on O(log n) AVL-PUU JA MUITA BST:llä on mahdollista, että kaikki tai lähes kaikki solmut ovat joko vasemmassa tai oikeassa oksassa n-solmuisen BST:n korkeus on suurimmillaan n-1 keskeisten toimenpiteiden suoritusaikaluokka O(n) Muodostuu ongelmaksi, jos BST:n koko on vaikkapa miljoona solmua Ongelman ratkaisemiseksi on kehitetty useita menetelmiä, joilla puu tasapainotetaan (balance) estetään O(n)-tapausten syntyminen Tärkeimmät tasapainotetut puutyypit ovat: 1. AVL-puu 2. Puna-musta puu 3. Splay-tree 4. B-tree 4.10.2005 KyAMK - TiRak, syksy 2005 21 4.10.2005 KyAMK - TiRak, syksy 2005 22 AVL-PUU JA MUITA AVL-puu (keksijät Adelson-Velskii ja Landels) on tasapainotettu BST AVL-puun jokaiselle solmulle pätee: vasemman oksan ja oikean oksan korkeudet eroavat enintään yhdellä Esimerkki: Kaksi BST:tä, joista toinen on AVL ja toinen ei. 1 3 2 6 4 7 AVL 8 4.10.2005 KyAMK - TiRak, syksy 2005 23 1 2 4 3 5 6 EI-AVL 8 AVL-PUU JA MUITA Punamusta puu (Red Black Tree) BST, jossa jokaisella solmulla on väri Jokainen solmu on joko musta tai punainen Jokainen lehtisolmu on musta Jos solmu on punainen, sen molemmat lapsisolmut ovat mustia Jokainen polku solmusta lehteen sisältää yhtä monta mustaa solmua Nämä (oudot?) ominaisuudet takaavat, että jokainen ne täyttävä puu on tasapainoinen Splay-tree, B-puu, 4.10.2005 KyAMK - TiRak, syksy 2005 24

AVL-PUU JA MUITA SEURAAVALLA KERRALLA B-puu (B-Tree) on periaatteeltaan erilainen kuin AVL ja punamusta puu Kyseessä ei ole BST. B-puun määritelmä on seuraava: B-puu on tasapainotettu hakupuu, missä jokaisella solmulla on vähintään m/2 ja enintään m lapsisolmua, missä m > 1 on kiinteä kokonaisluku. Juurella pitää olla vähintään 2 lasta. B-puu on varsin paljon käytetty. Sen etu BSTeihin verrattuna on se, että se voidaan tehdä matalaksi, jos m on suuri. Tosin tämä ei ole kovin käytännöllistä toteutuksen kannalta. Prioriteettijono Keko 4.10.2005 KyAMK - TiRak, syksy 2005 25 4.10.2005 KyAMK - TiRak, syksy 2005 26