CS-A1140 Tietorakenteet ja algoritmit

Koko: px
Aloita esitys sivulta:

Download "CS-A1140 Tietorakenteet ja algoritmit"

Transkriptio

1 CS-A1140 Tietorakenteet ja algoritmit Kierros 3: Puut Tommi Junttila Aalto-yliopisto Perustieteiden korkeakoulu Tietotekniikan laitos Syksy 2016

2 Sisältö Puut yleisesti Matemaattinen määrittely Puiden läpikäynti (esi-, jälki-, sisä- ja tasojärjestykset) Puihin pohjautuvia tietorakenteita ja algoritmeja Keot ja prioriteettijonot Erilliset joukot eli yhdistä-ja-etsi (engl. union-find) 2/61

3 Materiaali kirjassa Introduction to Algorithms, 3rd ed. (online via Aalto lib): Binääripuut: Liite B5 Puiden esitysmuodoista: Kappale 10.4 Keot: Luku 6 Yhdistä-ja-etsi: Luku 21 3/61

4 Samantapaista materiaalia muualla: Yhdistä-ja-etsi: kappale 1.5 kirjassa Algorithms, 4th ed. Keot OpenDSA-kirjassa Yhdistä-ja-etsi OpenDSA-kirjassa Muita linkkejä: MIT OCW video on heaps and heap sort 4/61

5 Puut 5/61

6 Puita ollaan tavattu aiemminkin: Rekursiopuut Ohjelmointi 2- ja tällä kurssilla Lausekkeiden jäsennyspuut oliodiagrammien muodossa Ohjelmointi 2-kurssin Expressions osuudessa rekursiokierroksella... Pikajärjestämisalgoritmin kutsupuu input partition(0,7) quicksort(0,4) quicksort(6,7) partition(0,4) partition(6,7) quicksort(2,4) partition(2,4) quicksort(2,3) 17 7 partition(2,3) 7 17 Lausekkeen (2.0x + y) jäsennyspuu oliodiagrammina Num value = 2.0 Multiply left right Negate expr Add left right Var name = "x" Var name = "y" sorted /61

7 Puut ovat yleinen käsite ja myös tietorakenne tietotekniikassa ja tietojenkäsittelytieteessä Tällä kierroksella tarkastellaan puita 1. matemaattisina olioina ja 2. tietorakenteena, jota voidaan käyttää toteuttamaan muita tietorakenteita ja algoritmeja Toisen kohdan esimerkkeinä tarkastellaan kuinka prioriteettijonot voidaan toteuttaa kekoina eli puina, joilla on tiettyjä myöhemmin määriteltäviä ominaisuuksia, ja erillisten joukkojen esittämistä ja yhdistämistä puiden avulla Puita käsitellään myös tulevilla kierroksilla 7/61

8 Perusmäärittelyjä Puut ovat verkkojen aliluokka 1 Suuntaamaton verkko on pari (V, E), missä V on (yleensä äärellinen) joukko solmuja (engl. vertex, node) ja E on joukko kaaria solmujen välillä eli joukko pareja muotoa {u,v} siten, että u,v V ja u v 2 Esimerkki: Tarkastellaan verkkoa (V, E) missä solmut ovat V = {a,b,c,d,e,f,g,h} ja e c g kaaret ovat E = {{a,b},{a,c},{a,e},{a,f }, {b,f },{e,f },{c,d},{c,g},{d,g}}. a d Graafisesti verkko on esitetty oikealla; solmut ovat ympyröitä ja kaaret niitä yhdistäviä viivoja f b 1 Palaamme verkkoihin ja verkkoalgoritmeihin myöhemmin kurssilla 2 Silmukat eli kaaret solmun ja sen itsensä välillä eivät siis ole nyt sallittuja 8/61

9 polku solmusta v 0 solmuun v k on sekvenssi (v 0,v 1,...,v k ) solmuja siten, että {v i,v i+1 } E jokaiselle i = 0,1,...k 1; polun pituus on k Solmu v on saavutettavissa solmusta u jos on olemassa polku solmusta u solmuun v. Huomaa, että jokainen solmu u on saavutettavissa itsestään koska (u) on 0 askeleen pituinen polku Polku on yksinkertainen jos kaikki solmut siinä ovat erillisiä Verkko on yhtenäinen jos jokainen solmu siinä on saavutettavissa jokaisesta muusta solmusta Esimerkki: Oikealla oleva verkko sisältää (ei-yksinkertaisen) polun (a,c,d,g,c,d) solmusta a solmuun d sisältää yksinkertaisen 2 askeleen polun (a, c, d) solmusta a solmuun d on yhtenäinen mutta kaaren {a, c} poistaminen tekisi siitä ei-yhtenäisen e f a c b g d 9/61

10 Sykli (engl. cycle) on polku (v 0,v 1,...,v k ) missä k 3 ja v 0 = v k Sykli (v 0,v 1,...,v k ) on yksinkertainen jos v 1,v 2,...,v k ovat erillisiä Verkko on syklitön (engl. acyclic) jos siinä ei ole yhtään yksinkertaista sykliä Esimerkki: Vasemmanpuoleinen verkko ei ole syklitön koska se sisältää yksinkertaisen syklin (a,e,f,a) Oikeanpuoleinen verkko on syklitön e c g e c g a d a d f b f b 10/61

11 Puut ja metsät Juureton puu on yhtenäinen syklitön suuntaamaton verkko Puhutaan vain puista jos juurettomuus on selvää asiayhteydestä Suuntaamaton verkko, joka on syklitön muttei välttämättä yhtenäinen on metsä Esimerkki: Vasemmanpuoleinen verkko on puu Oikeanpuoleinen verkko on kahdesta puusta koostuva metsä e c g e c g a d a d f b f b 11/61

12 Teoreema B.2 kirjassa Introduction to Algorithms, 3rd ed. (online via Aalto lib) Jos G = (V, E) on suuntaamaton verkko, niin seuraavat lauseet ovat yhtäpäteviä: G on juureton puu Jokainen solmupari verkossa G on yhdistetty yhdellä yksinkertaisella polulla G on yhtenäinen mutta minkä tahansa kaaren poistaminen tekee siitä epäyhtenäisen G on yhtenäinen ja E = V 1 G on syklitön ja E = V 1 G on syklitön mutta minkä tahansa kaaren lisääminen siihen saa aikaan syklin 12/61

13 Juurelliset puut Juurellinen puu on kuten juureton puu mutta yksi solmuista on puun juuri Esimerkki: Alla oleva kuva esittää juurellisen version aiemman esimerkin juurettomasta puusta kun juurena toimii solmu c. Puita piirrettäessä juurisolmu piirretään aina samaan kohtaan, yleensä ylimmäiseksi solmuksi. c d g a b e f Kuten aiemminkin, jos puiden juurellisuus on selvää asiayhteydestä, niin puhutaan vain puista 13/61

14 Tarkastellaan juurellista puuta, jonka juurisolmu on r Solmu y, joka on ainoalla yksinkertaisella polulla juuresta r johonkin solmuun x on solmun x edeltäjä Jos y on solmun x edeltäjä, niin x on solmun y jälkeläinen Jos y on solmun x edeltäjä ja x y, niin y on solmun x aito edeltäjä ja x on solmun y aito jälkeläinen Jos y on solmun x edeltäjä ja {y,x} on kaari, niin y on solmun x ainoa vanhempi ja x on solmun y lapsi Jos kahdella solmulla on sama vanhempi, niin ne ovat sisaruksia Juurella ei ole vanhempaa ja lapsettomat solmut ovat lehtiä Lehtisolmuja sanotaan myös uloimmaisiksi solmuiksi ja muita solmuja sisäsolmuiksi Esimerkki: Oikealla olevassa puussa solmun e edeltäjät ovat e, a ja c solmun a jälkeläiset ovat a, b, e ja f solmun a vanhempi on c ja sen lapset ovat b ja e lehtisolmut ovat d, g, b ja f c d g a b e f 14/61

15 Solmun x alipuu on solmun x jälkeläisistä koostuva aliverkko Solmun x syvyys (engl. depth) on juuresta siihen tulevan yksinkertaisen polun pituus Puun taso (engl. level) koostuu kaikista niistä solmuista, joilla on jokin sama syvyys Solmun x korkeus (engl. height) on pisimmän yksinkertaisen polun pituus siitä johonkin lehtisolmuun Puun korkeus on sen juurisolmun korkeus Puun solmun asteluku on sen lasten lukumäärä Esimerkki: Oikeanpuoleisessa puussa solmun a alipuu koostuu solmuista a, b, e ja f solmun b syvyys on 2 solmut tasolla 1 ovat d, g ja a c d g a b e solmun a korkeus on 2 ja asteluku 2 f koko puun korkeus on 3 15/61

16 Järjestetty puu on juurellinen puu, jonka jokaisen solmun lapsilla on jokin järjestys Eli jos solmulla on k lasta, niin yksi niistä on ensimmäinen lapsi, yksi on toinen lapsi, jne Esimerkki: Alla olevat juurelliset puut ovat samoja jos ne tulkitaan ei-järjestetyiksi kuten aiemmin mutta erilaisia jos ne tulkitaan järjestetyiksi c c d g a g a d b e e b f f Vasemmanpuoleisessa puussa solmun c ensimmäinen lapsi on d, toinen g ja kolmas a 16/61

17 Binääripuut Binääripuut ovat järjestettyjen puiden eräs yleinen aliluokka, missä jokaisella solmulla on enintään kaksi lasta, vasen ja oikea lapsi, ja jompikumpi tai kumpikin näistä voi puuttua Tämä on eri asia kuin korkeintaan asteluvun 2 järjestetty puu koska jos solmulla on vain yksi lapsi, binääripuussa sen täytyy olla joko vasen tai oikea lapsi Esimerkki: Alla olevat puut ovat binääripuita (vasen lapsi piirretään vanhempansa vasemmalle puolelle, oikea oikealle) Ne ovat eri binääripuita mutta samoja jos ne tulkitaan vain järjestetyiksi puiksi c c d a d a b e b e f f 17/61

18 Binääripuu on täysi (engl. full) jos jokainen solmu on joko lehti tai sisäsolmu, jolla on kaksi lasta. Binääripuu on täydellinen (engl. complete) jos kaikki lehdet ovat samalla syvyydellä Esimerkki: Vasen puu ei ole täysi eikä täydellinen Keskimmäinen puu on täysi muttei täydellinen Oikea puu on täydellinen c c c d a d a d a b e b e i m b e f g f k l n o h j g f 18/61

19 Täydellinen binääripuu, jonka korkeus on h, sisältää 2 h lehteä ja 2 h 1 sisäsolmua Harjoitus: todista ylläoleva väite induktiolla puun korkeuden suhteen Täydellisen binääripuun, jossa on n lehteä, korkeus on log 2 n 19/61

20 Tietorakenteita puiden esittämiseen Eri puutyyppejä voidaan esittää erilaisilla tietorakenteilla Eri puualgoritmit tarvitsevat erilaista tietoa, esimerkiksi jotkut algoritmit käyvät puita läpi juuresta lähtien ja ne tarvitsevat siten tietoa solmujen lapsista mutta jotkut algoritmit tarvitsevat vain tiedon solmun vanhemmasta Täten ei ole universaalisti parasta puiden esitysmuotoa 20/61

21 Yleinen tapa esittää binääripuita on esittää solmut olioina jokainen solmuolio sisältää viittauksen vanhempaan (jos solmu on juuri, tämä on joko null tai solmu itse) vasempaan ja oikeaan lapseen (null jos puuttuu) avaimeen/arvoon/alkioon/tms koska puita käytetään usein muun tiedon tallentamiseen Esimerkki: key parent left child right child Käytetään esitystä solmuille. Vasemmanpuoleisen puun oliodiagrammi on esitetty oikealla. Tässä ei olla kiinnostuttu solmujen nimistä ja täten nimien sijaan solmuihin liitetty arvo on piirretty myös vasemmanpuoleisessa puussa solmujen sisään /61

22 Juurellisia puita, joissa solmuilla voi olla mielivaltainen määrä lapsia voidaan esittää solmuolioilla, joista on viittaus ensimmäiseen omaan lapseen ja seuraavaan sisarukseen Esimerkki: key parent Käyttäen esitystä first child next sibling solmuolioille, vasemmanpuoleiselle puulle saadaan oikealla esitetty oliodiagrammi Jos solmulla on n lasta, tällä tavalla esitettynä i:n lapsen löytäminen vaatii pahimmillaan ajan Θ(n) kun i = n mutta lasten läpikäynti yksi kerrallaan on helppoa 22/61

23 Puiden läpikäynti Juurellisten puiden läpikäynti on tarpeen monessa algoritmissa Tähän on monta eri tapaa rippuen siitä, missä järjestyksessä solmut käsitellään: Esijärjestyksessä (engl. preorder) käsitellään ensin kyseinen solmu ja sen jälkeen lapset yksi kerrallaan Sisäjärjestyksessä (engl. inorder), erityisesti binääripuilla, käsitellään ensin vasen lapsi, sitten solmu itse ja lopuksi oikea lapsi Jälkijärjestyksessä (engl. postorder) käsitellään ensin lapset yksi kerrallaan ja sitten solmu itse Tasojärjestyksessä (engl. level order) käsitellään solmut tasoittain alkaen juuresta (harvinaisempi) traverse-preorder(tree T): def traverse(n): visit(n) for each child c of n: traverse(c) traverse(t.root) traverse-inorder(tree T): def traverse(n): traverse(n.leftchild) visit(n) traverse(n.rightchild) traverse(t.root) 23/61

24 traverse-postorder(tree T): def traverse(n): for each child c of n: traverse(c) visit(n) traverse(t.root) Esimerkki: Vasemmalla olevan binääripuun läpikäynti: Esijärjestyksessä: c,d,e,g,f,a,b,h Sisäjärjestyksessä: g,e,f,d,c,b,a,h Jälkijärjestyksessä: g,f,e,d,b,h,a,c Tasojärjestyksessä: c,d,a,e,b,h,g,f traverse-levelorder(tree T): level new Queue level.enqueue(t.root) while level is non-empty: nextlevel new Queue while level is non-empty: n level.dequeue() visit(n) for each child c of n: nextlevel.enqueue(c) level nextlevel g e d f c b a h 24/61

25 Läpikäynti ei ole aina niin puhdasoppista kuin pseudokoodissa Esimerkki: Aritmeettisten lausekkeiden tulostaminen prefix-, infix- ja postfixesitysmuodoissa abstract class Expr { def p r e f i x S t r : S t r i n g def i n f i x S t r : S t r i n g def p o s t f i x S t r : S t r i n g } case class Negate ( expr : Expr ) extends Expr { def p r e f i x S t r : S t r i n g = " Negate ( " +expr. p r e f i x S t r + " ) " def i n f i x S t r : S t r i n g = " " +expr. i n f i x S t r def p o s t f i x S t r : S t r i n g = expr. p o s t f i x S t r + " " } case class Add ( l e f t : Expr, r i g h t : Expr ) extends Expr { def p r e f i x S t r : S t r i n g = " Add ( " + l e f t. p r e f i x S t r + ", " + r i g h t. p r e f i x S t r + " ) " def i n f i x S t r : S t r i n g = " ( " + l e f t. i n f i x S t r + " + " + r i g h t. i n f i x S t r + " ) " def p o s t f i x S t r : S t r i n g = l e f t. p o s t f i x S t r + " " + r i g h t. p o s t f i x S t r + " + " }... case class Num( value : Double ) extends Expr { def p r e f i x S t r : S t r i n g = "Num( " +value. t o S t r i n g + " ) " def i n f i x S t r : S t r i n g = value. t o S t r i n g def p o s t f i x S t r : S t r i n g = value. t o S t r i n g } 25/61

26 Lauseketta (2.0x + y) vastaava puu saadaan komennolla val e = Negate(Add(Multiply(Num(2.0),Var("x")),Var("y"))) e.prefixstr tuottaa Negate(Add(Multiply(Num(2.0),Var("x")),Var("y"))) e.infixstr tuottaa -((2.0*x)+y) e.postfixstr tuottaa 2.0 x * y + - Postfix-muodossa ei tarvita sulkeita ja se voidaan lukea ja evaluoida tekstimuodosta helposti käyttämällä pinoa (ks. esim. tämä artikkeli) Num value = 2.0 Multiply left right Negate expr Add left right Var name = "x" Var name = "y" 26/61

27 Keot 27/61

28 Kekotietorakennetta (engl. heap) voidaan käyttää toteuttamaan prioriteettijonoja ja järjestämiseen (kekojärjestäminen) Abstraktilla tasolla prioriteettijono on säiliötietorakenne, joka tukee alkioiden, joilla on prioriteettiavain, lisäämistä suurimman avaimen omaavan alkion etsimistä, ja suurimman avaimen omaavan alkion poistamista. (Oltaisiin voitu tehdä sama määrittely myös pienimmälle avaimelle.) Usealla alkiolla voi olla sama avain Täten prioriteettijono on abstrakti tietotyyppi, jonka rajapinta voisi olla INSERT(x) lisää alkion x avaimella x.key jonoon MAX() palauttaa jonon alkion, jolla on suurin avain REMOVE-MAX() poistaa jonosta alkion, jolla on suurin avain INCREASE-KEY(x, v) kasvattaa alkion x avaimen arvoa arvoon v DECREASE-KEY(x, v) pienentää alkion x avaimen arvoa arvoon v 28/61

29 Prioriteettijonojen käyttökohteita voisivat olla esim. avointen tilausten priorisointi asiakastyypin mukaan, verkkoliikennepakettien priorisointi yhteystyypin tai aiemman käyttöasteen mukaan, saapuvien tapahtumien suorittaminen aikajärjestyksessä simulaatio-ohjelmistossa, ja parhaan seuraavan alkion valinta toisissa algoritmeissa (Dijkstran algoritmi myöhemmin tällä kurssilla jne) Huomionarvoista on, että alkioita lisätään ja poistetaan jonoon koko ajan (engl. online) eli kaikkia alkioita ei välttämättä alussa tiedetä eikä niitä voida siten vain järjestää kertaalleen Voitaisiin käyttää dynaamisia taulukoita ja sitten jotain ajassa O(nlog 2 n) toimivaa järjestämisalgoritmia ennen jokaista etsi/poista suurin/pienen alkio -operaatiota mutta tahdotaan saada aikaan parempi algoritmi siten, että jokainen lisäys ja poisto on vie ajan O(log 2 n) jos jonossa on sillä hetkellä n alkiota 29/61

30 Keot ja keko-ominaisuudet Keko on melkein täydellinen binääripuu, missä kaikki tasot ovat täysiä paitsi mahdollisesti viimeinen, joka sekin on täynnä vasemmalta oikealle johonkin solmuun asti jokaiseen solmuun on liitetty alkio ja alkioilla on keskenään vertailtavissa oleva avain (kokonaisluku tms) jompikumpi keko-ominaisuus pätee: jokaisen solmun avain on vähintään yhtä suuri kuin kummankin sen lapsen avain (tällöin kyseessä on maksimikeko), tai jokaisen solmun avain on korkeintaan yhtä suuri kuin kummankin sen lapsen avain (tällöin kyseessä on minimikeko) Suorana seurauksena saadaan, että n-solmuisen keon korkeus on log2 n Ei-tyhjässä maksimikeossa juurisolmu sisältää (erään) alkion, jolla on suurin avain Ei-tyhjässä minimikeossa juurisolmu sisältää (erään) alkion, jolla on pienin avain 30/61

31 Esimerkki: Kolme melkein täydellistä binääripuuta; solmuihin liitettyjen alkioden avaimet on kuvattu solmujen sisällä solmun nimen sijaan Maksimikeko Minimikeko Puu, joka ei ole keko 31/61

32 Kekojen esittäminen muistissa Kekoja ei yleensä tallenneta muistiin solmuina, joista on viittauksia lapsisolmuihin jne Sen sijaan käytetään hyväksi sitä, että keot ovat melkein täydellisiä binääripuita ne voidaan esittää hyvin tiiviisti taulukoiden avulla Idea: n-solmuinen keko esitetään taulukkona, jossa on n alkiota Solmut numeroidaan välille 0,..., n 1 tasoittain, jokainen taso vasemmalta oikealle Solmun i alkio talletetaan taulukon alkioon a[i] Solmun i vasen lapsi on solmu 2i + 1 Jos 2i + 1 n, niin solmulla i ei ole vasenta lasta Solmun i oikea lapsi on solmu 2i + 2 Jos 2i + 2 n, niin solmulla i ei ole oikeaa lasta Solmun i, joka ei ole juuri, vanhempi on solmu parent(i) = i /61

33 Esimerkki: Edellisen esimerkin maksimi- ja minimikeot puina, kunkin solmun numero näkyvillä solmun vieressä, ja taulukoina /61

34 Kekojen rakentaminen Tarkastellaan jatkossa vain maksimikekoja minimikekojen käsittely samantapaista Monissa keko-operaatioissa, kuten alkioiden lisäämisessä, 1. aloitetaan kunnossa olevasta maksikeosta, 2. tehdään pieni paikallinen muutos, kuten alkion lisäys, ja 3. jos maksimikeko-ominaisuus ei enää päde, tehdään sarja muunnoksia, joiden jälkeen se jälleen pätee Ennen varsinaisten keko-rajapinnan operaatioiden kuvaamista esitetään kaksi apumenetelmää, joita käyttämällä rikki mennyt keko-ominaisuus saadaan korjattua (kolmas askel yllä) 34/61

35 upheap tai swim Nimellä Heap-Increase-Key kirjassa Introduction to Algorithms, 3rd ed. (online via Aalto lib) Oletetaan, että solmun i avaimen arvoa kasvatetaan Maksimikeko-ominaisuus voi nyt olla rikki jos avaimesta tuli suurempi kuin sen vanhemman parent(i) avaimesta Tällöin vaihdetaan solmujen i ja parent(i) alkiot Maksimikeko-ominaisuus pätee nyt alipuussa, jonka juuri on solmu i koska solmun parent(i) avain oli suurempi kuin solmun i ennen avaimen arvon kasvattamista alipuussa, jonka juuri on solmu parent(i) koska solmun parent(i) uusi avain on suurempi kuin sen entinen avain Mutta maksimikeko-ominaisuus voi nyt olla rikki jos solmun parent(i) uusi avain on suurempi kuin sen vanhemman avain toistetaan korjausprosessia kunnes maksimikeko-ominaisuus pätee koko puussa Jokaisella askeleella yllä tehdään vakiomäärä operaatioita Prosessi toistuu korkeintaan O(log 2 n) kertaa koska se pysähtyy viimeistään juurisolmussa 35/61

36 Esimerkki: Solmun avaimen kasvattaminen ja upheap-menetelmän käyttäminen maksimikeko-ominaisuuden palauttamiseksi Aloitus Kasvatetaan Vaihdetaan solmujen Vaihdetaan solmujen solmun 4 avainta 1 ja 4 alkiot 0 ja 1 alkiot 36/61

37 downheap aka sink Nimellä Max-Heapify kirjassa Introduction to Algorithms, 3rd ed. (online via Aalto lib) Oletetaan, että solmun i avaimen arvoa pienennetään Maksimikeko-ominaisuus voi tällöin mennä rikki jos uusi vain on pienempi kuin jommankumman tai kummankin lapsisolmun avain Tällöin vaihdetaan solmun i ja suuremman avaimen omistavan lapsen j alkiot solmun i avain on nyt vähintään yhtä suuri kuin toisenkin lapsen korkeintaan yhtä suuri kuin solmun parent(i) koska solmun i alkuperäinen avain oli vähintään yhtä suuri kuin solmun j avain Maksimikeko-ominaisuus voi nyt olla rikki koska solmun j uusi pienempi avain voi olla pienempi kuin jompikumpi sen lapsen avaimista toistetaan prosessia kunnes maksimikeko-ominaisuus pätee Jokaisella askeleella yllä tehdään vakiomäärä operaatioita Tehdään korkeitaan O(log 2 n) askelta koska prosessi päättyy viimeistään lehtisolmussa 37/61

38 Esimerkki: Avaimen pienentäminen ja maksimikeko-ominaisuuden palauttaminen downheap -menetelmällä Aloitus Pienennetään Vaihdetaan solmujen Vaihdetaan solmujen solmun 0 avainta 1 ja 2 alkiot 2 ja 5 alkiot 38/61

39 Maksimikeko-operaatiot: alkion lisääminen Käyttämällä upheap-menetelmää, alkioiden lisääminen on helppoa Esimerkki: 1. Kasvatetaan taulukon kokoa yhdellä ja lisätään alkio uuteen solmuun taulukon lopussa 2. Käytetään upheap-menetelmää uuteen solmuun maksimikeko-ominaisuuden aikaansaamiseksi Alkion, jonka avain on 42, lisääminen kekoon: Aloitus Lisätään uusi Upheap Upheap solmu loppuun /61

40 Maksimikeko-operaatiot: maksimialkion löytäminen ja poistaminen Alkio (ei välttämättä ainoa), jolla on suurin avain, on taulukon alussa Sen poistaminen keosta voidaan tehdä downheap-menetelmällä 1. Siirretään viimeinen solmu taulukon lopusta taulukon ensimmäiseen kohtaan (sen avaimen arvo on korkeintaan sama kuin poistuvan solmun) 2. Pienennetään taulukon kokoa yhdellä 3. Käytetään downheap-menetelmää juurisolmuun maksimikeko-ominaisuuden palauttamiseksi Esimerkki: Suurimman avaimen sisältävän alkion poistaminen: Aloitus Siirretään viimeinen Downheap Downheap /61

41 Toteutuksia standardikirjastoissa java.util.priorityqueue toteuttaa prioriteettijonot minimikeoilla Alkioiden lisääminen ja pienimmän poisto ajassa O(log 2 n) Mielivaltaisen alkion etsintä ja poisto ajassa O(n) PriorityQueue Scala-kielessä käyttää maksimikekoja Alkioiden lisääminen ja suurimman poisto ajassa O(log 2 n) Mielivaltaisen alkion etsintä ja poistaminen ja muita operaatioita ajassa O(n) C++ priority_queue käyttää maksimikekoja Alkioiden lisääminen ja suurimman poisto ajassa O(log 2 n) Ei tukea mielivaltaisten alkioiden etsimiselle jne Mielenkiintoista sinänsä, etteivät yllä mainitut tue kasvata alkion avainta tai pienennä alkion avainta operaatioita 41/61

42 Erilliset joukot eli yhdistä-ja-etsi 42/61

43 Toinen esimerkki puiden käyttämisestä tietorakenteena on erillisten joukkojen esittäminen Tällainen erillisten joukkojen tietorakenne (engl. disjoint sets data structure, union-find data structure) pitää yllä jonkin alkiojoukon S jakoa pistevieraisiin osajoukkoihin S 1,...,S k eli S 1... S k = S ja S i S j = /0 kaikille 1 i < j k. Alussa jokainen alkio a on omassa joukossaan {a} Kaksi alkiota, x ja y, sisältävät joukot S x ja S y voidaan yhdistää yhdeksi joukoksi S x S y Jokaiselle joukolle on määritelty edustaja-alkio, ja joukon alkioille saadaan selville tämä alkio voidaan tarkastaa ovatko kaksi alkiota samassa joukossa tarkastamalla, ovatko niiden edustaja-alkiot samat 43/61

44 Abstrakti tietotyyppi Erillisten joukkojen abstraktilla tietotyyppillä on seuraava rajapinta ja toiminnalisuus: MAKE-SET(x) esittelee uuden alkion x ja laittaa sen omaan yksikköjoukkoonsa {x} FIND-SET(x) etsii alkion x sisältävän joukon nykyisen edustaja-alkion Kaksi alkiota, x ja y, ovat samassa joukossa jos ja vain jos niiden edustaja-alkiot (engl. representative) ovat samat eli FIND-SET(x) = FIND-SET(y) UNION(x, y) yhdistää alkiot x ja y sisältävät joukot yhdeksi. Uuden joukon kaikkien alkioiden edustaja-alkio voi tällöin muuttua. 44/61

45 Esimerkki: Suuntaamattoman verkon yhtenäisyyden tarkastaminen Tarkastellaan oikealla olevaa verkkoa. Alustetaan erillisten joukkojen tietorakenne kutsumalla MAKE-SET(x) jokaiselle x {a,b,c,d,e,f,g} Erilliset joukot ovat nyt {a},{b},{c},{d},{e},{f },{g} Kutsutaan UNION(x, y) jokaiselle verkon kaarelle {x, y} e f a c b g d Jokaisen kutsun jälkeen kaksi solmua x ja y ovat samassa joukossa jos jo käsiteltyjen kaarten avulla päästään solmusta x solmuun y Erilliset joukot ovat lopussa {a,b,e,f } ja {c,d,g} Koska erillisiä joukkoja on 2 kappaletta, verkko ei ole yhtenäinen Kaksi solmua x ja y kuuluvat samaan yhtenäiseen komponenttiin jos FIND-SET(x) = FIND-SET(y) 45/61

46 Yhdistä-ja-etsi erillisten joukkojen metsillä Juurellisista puista koostuvat metsät mahdollistavat erillisten joukkojen tehokkaan esittämisen Jokainen joukko on esitetty puuna siten, että puiden solmuihin on liitetty joukossa esiintyvät alkiot Jokaisen puun juuri on ko. joukon edustaja-alkio Operaatiot toteuttavat algoritmit käyvät puita läpi vain lehdistä juureen päin viittauksia lapsisolmuihin ei tarvita, vain vanhempaan Esimerkki: Olkoon esiteltyinä alkiot a, b,..., f ja sitten yhdistetty joukkoja niin, että nykyiset joukot ovat {a,c,d,e} ja {b,f }. Oikealla on eräs mahdollinen esitys näille joukoille Joukkojen edustaja-alkiot ovat nyt e ja f a e d c f b 46/61

47 Operaatiot: Alkioiden esittely eli MAKE-SET(x) Uusien alkioiden esittely omaksi yksikköjoukokseen on helppoa, lisätään metsään vain uusi ko. alkion sisältävä solmu, joka ei ole kytköksissä mihinkään aiempaan solmuun Pseudokoodina // Insert the element x as a singleton set if not already in any set MAKE-SET(x): if x is not yet in any set: insert x in some data structure recording the elements in the sets x.parent NIL // as a field or with a map Kuten aiemmin mainittiin, puita käydään läpi vain vanhempiin joten viittauksia lapsisolmuihin ei tarvita Rivin kaksi tarkistus voidaan tehdä jollakin hakurakenteella (hajautustaulu eli Scalan HashSet tms), joiden toteutusta tarkastellaan seuraavilla kierroksilla Samoin x.parent tarkoittaa, että alkioon x liitetään jollain tapaa tieto sen vanhemmasta; helpoiten ehkäpä assosiatiivisen taulukon (Scalan HashMap tms) avulla, jolloin alkioon ei tarvitse lisätä uusia kenttiä 47/61

48 Operaatiot: Edustaja-alkion etsiminen eli FIND-SET(x) Alkion x sisältävän joukon edustaja-alkion löytäminen on myös helppoa: etsitään alkion sisältävä solmu metsistä ja seurataan viittauksia vanhempiin kunnes tullaan ko. joukkoa esittävän puun juureen Pseudokoodina // Find the representative of the set containing x FIND-SET(x): raise an error if x is not in any set while x.parent NIL: x x.parent return x 48/61

49 Operaatiot: Joukkojen yhdistäminen eli UNION(x, y) Alkiot x ja y sisältävien joukkojen yhdistäminen on myös melko suoraviivaista: Ensin etsitään alkiot sisältävien puiden juurisolmut edellä kuvatulla tavalla Jos juuret eivät ole sama solmu eli alkiot eivät ole vielä samassa joukossa, yhdistetään puut laittamalla toinen juurisolmu olemaan toisen lapsi Pseudokoodina UNION(x, y): Check that y and y are in some set x FIND-SET(x) // Find the root of the tree with x y FIND-SET(y) // Find the root of the tree with y if x y : // Not yet in the same set? x.parent = y // Merge the trees by making x a subtree of y 49/61

50 Esimerkki: Alkioiden lisääminen ja joukkojen yhdistäminen b c d e f b d e f a b c d e f MAKE-SET()-metodi kutsuttu kutsuttu alkioille a,..., f UNION(a, d) UNION(a, c) a a c f e f b e d e f d b d a c b a c kutsuttu kutsuttu kutsuttu UNION(b, f ) UNION(c, e) UNION(d, b) a c 50/61

51 Valitettavasti yllä esitetyt perusversiot operaatioiden toteutuksesta eivät ole riittäviä halutun suorituskyvyn saavuttamiseksi Pahimmassa tapauksessa puut degeneroituvat lineaarisiksi puiksi, jotka muistuttavat linkitettyjä listoja tällöin sekä etsi- että yhdistä-operaatiot vievät lineaarisen ajan Esimerkki: Pahimman tapauksen puut Jos tehdään operaatiot UNION(a, b), UNION(a, c), UNION(a, d), UNION(a, e) ja UNION(a, f ), tuloksena on lineaarinen puu. f e d c b a b c d e f (a) alussa a (b) lopussa 51/61

52 Tasapainottaminen Edellisen esimerkin puun ongelmana on, ettei se ole kovinkaan tasapainoinen Jos voidaan jotenkin pakottaa puut (edes suurinpiirtein) tasapainoisiksi niin, että lehtiä lukuunottamatta lapsia on vähintään kaksi ja lapsien alipuut ovat suurinpiirtein samankokoisia, puun korkeudeksi tulee O(log 2 n) ja tällöin etsija yhdistä-operaatiot ovat myös logaritmisen ajan operaatioita Onneksi tasapainoisuuden saavuttaminen on melko helppoa tässä yhteydessä: Jokaiseen solmuun liitetään rankki (engl. rank), joka kertoo solmun alipuun korkeuden Kun yhdistetään kaksi joukkoa, pienemmän korkeuden omaava alipuu liitetään toisen alipuuksi (saman korkeuden puut yhdistetään jomminkummin päin) 52/61

53 Päivitetty pseudokoodi: // Insert the element x as a singleton set if not already in any set MAKE-SET(x): if x is not yet in any set: insert x in some data structure recording the elements in the sets x.parent NIL // as a field or with a map x.rank 0 // as a field or with a map UNION(x, y): Check that y and y are in some set x FIND-SET(x) // Find the root of the tree with x y FIND-SET(y) // Find the root of the tree with y if x y : // Not yet in the same set? if x.rank < y.rank: // Subtree at x has less height? x.parent y // Merge the trees by making x a subtree of y else: y.parent x // Merge the trees by making y a subtree of x if x.rank = y.rank: x.rank x.rank /61

54 Esimerkki: Aiempi esimerkki päivitetyllä koodilla, rankit on annettu solmujen vierellä: a 0 b 0 c 0 d 0 e 0 f 0 b 0 c 0 d 1 e 0 f 0 b 0 d 1 e 0 f 0 a 0 alussa UNION(a, d) UNION(a, c) a 0 c 0 f 2 d 1 e 0 f 1 d 1 f 1 b 0 d 1 a 0 c 0 b 0 a 0 c 0 e 0 b 0 a 0 c 0 e 0 UNION(b, f ) UNION(c, e) UNION(d, b) 54/61

55 Esimerkki: Aiempi pahimman tapauksen esimerkki tasapainotuksella. Operaatioiden UNION(a,b), UNION(a,c), UNION(a,d), UNION(a,e) ja UNION(a,f ) tekeminen ei nyt saa aikaan lineaarista puuta vaan hyvin matalan puun. a 1 a 0 b 0 c 0 d 0 e 0 f 0 (a) alussa b 0 c 0 d 0 e 0 f 0 (b) lopussa 55/61

56 Teoreema Rankkeihin pohjautuvalla tasapainotuksella metsän jokaisen puun korkeus on korkeintaan log 2 s, missä s on kyseisen puun solmujen määrä. Todistus Induktiolla tehtyjen operaatioiden määrän suhteen. Perustapaus: 0 tehdyn operaation jälkeen väite pätee koska metsässä ei ole puita. Induktiohypoteesi: oletetaan, että väite pätee m tehdyn operaation jälkeen. Induktioaskel: Jos seuraava operaatio on etsi, metsä ei muutu ja väite pätee m + 1 tehdyn operaation jälkeen. Jos lisätään uusi alkio, (i) lisätään uusi yksinäinen puu, jossa on 1 solmu ja jonka korkeus on 0 = log 2 1 ja (ii) muut puut eivät muutu. Koska minkä tahansa toisen puun korkeus oli korkeintaan log 2 s hypoteesin mukaan, sen korkeus on korkeintaan log 2 (s + 1) lisäyksen jälkeen. 56/61

57 Yhdistettäessä alkiot x ja y sisältävät joukot tarkastellaan kahta eri tapausta. 1. Jos alkiot ovat jo samassa joukossa, puut pysyvät muuttumattomina. 2. Jos alkiot ovat eri joukoissa, joiden koot ovat s x ja s y, niin vastaavien puiden korkeudet ovat hypoteesin mukaan h x log 2 s x ja h y log 2 s y. Jos h x < h y, niin uusi puu sisältää s x + s y solmua ja sen korkeus on h y. Koska h y log 2 s y, niin h y log 2 (s x + s y ). Tapaus h y < h x on symmetrinen edellisen kanssa. Jos h x = h y, niin uusi puu sisältää s = s x + s y solmua ja sen korkeus on h = h x + 1 = h y + 1. Jos s x s y, niin s 2s x ja log 2 (s ) log 2 (2s x ) = log 2 (2) + log 2 s x = 1+ log 2 s x = h. Vastaavasti jos s x s y, niin s 2s y ja log 2 (s ) log 2 (2s y ) = log 2 (2) + log 2 s y = 1+ log 2 s y = h. Täten väite pätee m + 1 tehdyn operaation jälkeen ja siten induktioperiaatteen mukaisesti kaikille arvoille m. 57/61

58 Olkoon n kulloisissa joukoissa esiintyvien alkioiden lukumäärä Oletetaan, että voidaan 1. löytää alkion sisältävä solmu ajassa O(log 2 n) 2. lukea ja päivittää solmun viittaus vanhempaan ja rankki-arvoon vakioajassa Seuraus Rankkeihin pohjautuvalla tasapainottamisella alkioiden lisääminen, edustaja-alkion etsiminen ja joukkojen yhdistäminen voidaan tehdä ajassa O(log 2 n). 58/61

59 Polkujen tiivistäminen Toinen idea, jolla voidaan saada syntyvät puut vieläkin matalammiksi, on tiivistää polkuja solmuista juureen päin etsi-operaatioiden yhteydessä Tehdään haku juureen päin rekursiivisesti, palautetaan löydetty juurisolmu kutsun lopuksi, ja päivitetään välisolmujen vanhempi osoittamaan suoraan juurisolmuun Pseudokoodina: // Find the representative of the set containing x FIND-SET(x): raise an error if x is not in any set def FIND-AND-COMPRESS(y): if y.parent = NIL: // In the root? return y else r FIND-AND-COMPRESS(y.PARENT) y.parent r return r return FIND-AND-COMPRESS(x) 59/61

60 Esimerkki: Taskastellaan vasemmalla näkyvää erillisten joukkojen metsää. Jos kutsutaan metodia FIND-SET(c), niin metsä muovautuu oikealla puolella esitetyksi. e f e f d b c d b a c a Huomaa, että etsi-operaatiota kutsutaan myös yhdistämis-operaation aikana, joten polkujen tiivistämistä tapahtuu myös tuolloin 60/61

61 Teoreema Jos käytetään sekä rankkeihin pohjautuvaa tasapainottamista että polkujen tiivistämistämistä, niin m operaation tekeminen n alkion joukoille vie ajan O(m α(m)), missä α on hyvin hitaasti kasvava funktio, jolle pätee α(m) 4 kaikille m Todistus Kappale 21.4 kirjassa Introduction to Algorithms, 3rd ed. (online via Aalto lib), ei kuulu kurssin sisältöön. 61/61

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

Kierros 3: Puut. Tommi Junttila. Aalto University School of Science Department of Computer Science Kierros 3: Puut Tommi Junttila Aalto University School of Science Department of Computer Science CS-A1140 Data Structures and Algorithms Autumn 2017 Tommi Junttila (Aalto University) Kierros 3 CS-A1140

Lisätiedot

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina Hakupuut tässä luvussa tarkastelemme puita tiedon tallennusrakenteina hakupuun avulla voidaan toteuttaa kaikki joukko-tietotyypin operaatiot (myös succ ja pred) pahimman tapauksen aikavaativuus on tavallisella

Lisätiedot

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö Algoritmit 2 Luento 2 To 14.3.2019 Timo Männikkö Luento 2 Tietorakenteet Lineaarinen lista, binääripuu Prioriteettijono Kekorakenne Keko-operaatiot Keon toteutus taulukolla Algoritmit 2 Kevät 2019 Luento

Lisätiedot

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö Algoritmit 2 Luento 2 Ke 15.3.2017 Timo Männikkö Luento 2 Tietorakenteet Lineaarinen lista, binääripuu Prioriteettijono Kekorakenne Keko-operaatiot Keon toteutus taulukolla Algoritmit 2 Kevät 2017 Luento

Lisätiedot

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö Algoritmit 1 Luento 8 Ke 1.2.2017 Timo Männikkö Luento 8 Järjestetty binääripuu Solmujen läpikäynti Binääripuun korkeus Binääripuun tasapainottaminen Graafit ja verkot Verkon lyhimmät polut Fordin ja Fulkersonin

Lisätiedot

Algoritmi on periaatteellisella tasolla seuraava:

Algoritmi on periaatteellisella tasolla seuraava: Algoritmi on periaatteellisella tasolla seuraava: Dijkstra(V, E, l, v 0 ): S := { v 0 } D[v 0 ] := 0 for v V S do D[v] := l(v 0, v) end for while S V do valitse v V S jolle D[v] on minimaalinen S := S

Lisätiedot

Kierros 4: Binäärihakupuut

Kierros 4: Binäärihakupuut Kierros 4: Binäärihakupuut Tommi Junttila Aalto University School of Science Department of Computer Science CS-A1140 Data Structures and Algorithms Autumn 2017 Tommi Junttila (Aalto University) Kierros

Lisätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 TIETORAKENTEET JA ALGORITMIT 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.

Lisätiedot

CS-A1140 Tietorakenteet ja algoritmit

CS-A1140 Tietorakenteet ja algoritmit CS-A1140 Tietorakenteet ja algoritmit Kierros 4: Binäärihakupuut Tommi Junttila Aalto-yliopisto Perustieteiden korkeakoulu Tietotekniikan laitos Syksy 2016 Sisältö Binäärihakupuut Avainten lisääminen,

Lisätiedot

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

AVL-puut. eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta AVL-puut eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta pohjana jo esitetyt binäärihakupuiden operaatiot tasapainotus vie pahimmillaan lisäajan lisäys- ja

Lisätiedot

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

Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia Kukin alkio (viite) talletettuna solmuun (node) vastaa paikan käsitettä

Lisätiedot

Algoritmit 2. Luento 4 To Timo Männikkö

Algoritmit 2. Luento 4 To Timo Männikkö Algoritmit 2 Luento 4 To 21.3.2019 Timo Männikkö Luento 4 Hajautus Yhteentörmäysten käsittely Avoin osoitteenmuodostus Hajautusfunktiot Puurakenteet Solmujen läpikäynti Algoritmit 2 Kevät 2019 Luento 4

Lisätiedot

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 1. Luento 7 Ti Timo Männikkö Algoritmit 1 Luento 7 Ti 31.1.2017 Timo Männikkö Luento 7 Järjestetty binääripuu Binääripuiden termejä Binääripuiden operaatiot Solmun haku, lisäys, poisto Algoritmit 1 Kevät 2017 Luento 7 Ti 31.1.2017

Lisätiedot

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

3. Hakupuut. B-puu on hakupuun laji, joka sopii mm. tietokantasovelluksiin, joissa rakenne on talletettu kiintolevylle eikä keskusmuistiin. 3. Hakupuut Hakupuu on listaa tehokkaampi dynaamisen joukon toteutus. Erityisesti suurilla tietomäärillä hakupuu kannattaa tasapainottaa, jolloin päivitysoperaatioista tulee hankalampia toteuttaa mutta

Lisätiedot

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

58131 Tietorakenteet ja algoritmit (syksy 2015) Toinen välikoe, malliratkaisut Tietorakenteet ja algoritmit (syksy 0) Toinen välikoe, malliratkaisut. (a) Alussa puu näyttää tältä: Lisätään 4: 4 Tasapaino rikkoutuu solmussa. Tehdään kaksoiskierto ensin oikealle solmusta ja sitten

Lisätiedot

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista 811312A Tietorakenteet ja algoritmit 2016-2017 III Lajittelualgoritmeista Sisältö 1. Johdanto 2. Pikalajittelu 3. Kekolajittelu 4. Lajittelualgoritmien suorituskyvyn rajoista 811312A TRA, Lajittelualgoritmeista

Lisätiedot

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.

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. Yleiset hakupuut 4 Monitiehakupuu: Binäärihakupuu 0 1 3 5 6 7 8 v k 1 k k 3 v v 3 v 4 k 1 k 3 k 1 k k k 3 d lapsisolmua d 1 avainta Yleinen hakupuu? Tietorakenteet, syksy 007 1 Esimerkki monitiehakupuusta

Lisätiedot

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö Algoritmit 2 Luento 7 Ti 4.4.2017 Timo Männikkö Luento 7 Joukot Joukko-operaatioita Joukkojen esitystapoja Alkiovieraat osajoukot Toteutus puurakenteena Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 2/26

Lisätiedot

Algoritmit 2. Luento 4 Ke Timo Männikkö

Algoritmit 2. Luento 4 Ke Timo Männikkö Algoritmit 2 Luento 4 Ke 22.3.2017 Timo Männikkö Luento 4 Hajautus Yhteentörmäysten käsittely Avoin osoitteenmuodostus Hajautusfunktiot Puurakenteet Solmujen läpikäynti Algoritmit 2 Kevät 2017 Luento 4

Lisätiedot

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

Miten käydä läpi puun alkiot (traversal)? inääripuut ieman lisää aidon binääripuun ominaisuuksia lehtisolmuja on yksi enemmän kuin sisäsolmuja inääripuut tasolla d on korkeintaan 2 d solmua pätee myös epäaidolle binääripuulle taso 0: 2 0 = 1 solmu

Lisätiedot

4. Joukkojen käsittely

4. Joukkojen käsittely 4 Joukkojen käsittely Tämän luvun jälkeen opiskelija osaa soveltaa lomittuvien kasojen operaatioita tuntee lomittuvien kasojen toteutuksen binomi- ja Fibonacci-kasoina sekä näiden totetutusten analyysiperiaatteet

Lisätiedot

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

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003 Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003 Matti Nykänen 5. joulukuuta 2003 1 Satelliitit Muunnetaan luennoilla luonnosteltua toteutusta seuraavaksi: Korvataan puusolmun p kentät p. key ja

Lisätiedot

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

lähtokohta: kahden O(h) korkuisen keon yhdistäminen uudella juurella vie O(h) operaatiota vrt. RemoveMinElem() keossa Kekolajittelu Prioriteettijonolla toteutettu keko InsertItem ja RemoveMinElem: O(log(n)) Lajittelu prioriteettijonolla: PriorityQueueSort(lajiteltava sekvenssi S) alusta prioriteettijono P while S.IsEmpty()

Lisätiedot

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö Algoritmit 2 Luento 5 Ti 28.3.2017 Timo Männikkö Luento 5 Puurakenteet B-puu B-puun korkeus B-puun operaatiot Algoritmit 2 Kevät 2017 Luento 5 Ti 28.3.2017 2/29 B-puu Algoritmit 2 Kevät 2017 Luento 5 Ti

Lisätiedot

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen) TKT0001 Tietorakenteet ja algoritmit Erilliskoe 5.1.01, malliratkaisut (Jyrki Kivinen) 1. [1 pistettä] (a) Esitä algoritmi, joka poistaa kahteen suuntaan linkitetystä järjestämättömästä tunnussolmullisesta

Lisätiedot

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

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia 58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, 10..2014, vastauksia 1. [9 pistettä] (a) Todistetaan 2n 2 + n + 5 = O(n 2 ): Kun n 1 on 2n 2 + n + 5 2n 2 + n 2 +5n 2 = 8n 2. Eli

Lisätiedot

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

5. Keko. Tietorakenne keko eli kasa (heap) on tehokas toteutus abstraktille tietotyypille prioriteettijono, jonka operaatiot ovat seuraavat: 5. Keko Tietorakenne keko eli kasa (heap) on tehokas toteutus abstraktille tietotyypille prioriteettijono, jonka operaatiot ovat seuraavat: Insert(S, x): lisää avaimen x prioriteettijonoon S Maximum(S):

Lisätiedot

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

58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut 58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut 1. Palautetaan vielä mieleen O-notaation määritelmä. Olkoon f ja g funktioita luonnollisilta luvuilta positiivisille

Lisätiedot

811312A Tietorakenteet ja algoritmit 2015-2016. V Verkkojen algoritmeja Osa 2 : Kruskalin ja Dijkstran algoritmit

811312A Tietorakenteet ja algoritmit 2015-2016. V Verkkojen algoritmeja Osa 2 : Kruskalin ja Dijkstran algoritmit 811312A Tietorakenteet ja algoritmit 2015-2016 V Verkkojen algoritmeja Osa 2 : Kruskalin ja Dijkstran algoritmit Sisältö 1. Johdanto 2. Leveyshaku 3. Syvyyshaku 4. Kruskalin algoritmi 5. Dijkstran algoritmi

Lisätiedot

1 Puu, Keko ja Prioriteettijono

1 Puu, Keko ja Prioriteettijono TIE-20100 Tietorakenteet ja algoritmit 1 1 Puu, Keko ja Prioriteettijono Tässä luvussa käsitellään algoritmien suunnitteluperiaatetta muunna ja hallitse (transform and conquer) Lisäksi esitellään binääripuun

Lisätiedot

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö Algoritmit 2 Luento 5 Ti 26.3.2019 Timo Männikkö Luento 5 Puurakenteet B-puu B-puun korkeus B-puun operaatiot B-puun muunnelmia Algoritmit 2 Kevät 2019 Luento 5 Ti 26.3.2019 2/34 B-puu B-puut ovat tasapainoisia

Lisätiedot

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen) 58131 Tietorakenteet Erilliskoe 11.11.2008, ratkaisuja (Jyrki Kivinen) 1. (a) Koska halutaan DELETEMAX mahdollisimman nopeaksi, käytetään järjestettyä linkitettyä listaa, jossa suurin alkio on listan kärjessä.

Lisätiedot

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

58131 Tietorakenteet (kevät 2008) 1. kurssikoe, ratkaisuja 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

Lisätiedot

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.

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. Tietorakenteet, laskuharjoitus 11, ratkaisuja 1. Leveyssuuntaisen läpikäynnin voi toteuttaa rekursiivisesti käsittelemällä jokaisella rekursiivisella kutsulla kaikki tietyllä tasolla olevat solmut. Rekursiivinen

Lisätiedot

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

58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 2, , vastauksia 58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 2, 652013, vastauksia 1 [6 pistettä] Vastaa jokaisesta alla olevasta väittämästä onko se tosi vai epätosi ja anna lyhyt perustelu Jokaisesta kohdasta

Lisätiedot

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

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe ratkaisuja (Jyrki Kivinen) 58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe 12.9.2018 ratkaisuja (Jyrki Kivinen) 1. [10 pistettä] Iso-O-merkintä. (a) Pitääkö paikkansa, että n 3 + 5 = O(n 3 )? Ratkaisu: Pitää paikkansa.

Lisätiedot

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

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ... 1. Tietorakenteet Tietorakenteet organisoivat samankaltaisten olioiden muodostaman tietojoukon. Tämä järjestys voidaan saada aikaan monin tavoin, esim. Keräämällä oliot taulukkoon. Liittämällä olioihin

Lisätiedot

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä Luku 7 Verkkoalgoritmit Verkot soveltuvat monenlaisten ohjelmointiongelmien mallintamiseen. Tyypillinen esimerkki verkosta on tieverkosto, jonka rakenne muistuttaa luonnostaan verkkoa. Joskus taas verkko

Lisätiedot

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö Algoritmit 2 Luento 6 To 28.3.2019 Timo Männikkö Luento 6 B-puun operaatiot Nelipuu Trie-rakenteet Standarditrie Pakattu trie Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 2/30 B-puu 40 60 80 130 90 100

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Rekursio Rekursion käyttötapauksia Rekursio määritelmissä Rekursio ongelmanratkaisussa ja ohjelmointitekniikkana Esimerkkejä taulukolla Esimerkkejä linkatulla listalla Hanoin

Lisätiedot

V. V. Vazirani: Approximation Algorithms, luvut 3-4 Matti Kääriäinen

V. V. Vazirani: Approximation Algorithms, luvut 3-4 Matti Kääriäinen V. V. Vazirani: Approximation Algorithms, luvut 3-4 Matti Kääriäinen Luento omatoimisen luennan tueksi algoritmiikan tutkimusseminaarissa 23.9.2002. 1 Sisältö Esitellään ongelmat Steiner-puu Kauppamatkustajan

Lisätiedot

Johdatus graafiteoriaan

Johdatus graafiteoriaan Johdatus graafiteoriaan Syksy 2017 Lauri Hella Tampereen yliopisto Luonnontieteiden tiedekunta 126 Luku 3 Puut 3.1 Puu 3.2 Virittävä puu 3.3 Virittävän puun konstruointi 3.4 Minimaalinen virittävä puu

Lisätiedot

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu 1312A Tietorakenteet ja algoritmit, 2016-2017, Harjoitus 5, Ratkaisu Harjoituksen aihe ovat hash-taulukot ja binääriset etsintäpuut Tehtävä 5.1 Tallenna avaimet 10,22,31,4,15,28,17 ja 59 hash-taulukkoon,

Lisätiedot

Fibonacci-kasoilla voidaan toteuttaa samat operaatiot kuin binomikasoilla.

Fibonacci-kasoilla voidaan toteuttaa samat operaatiot kuin binomikasoilla. 4.2 Fibonacci-kasat Fibonacci-kasoilla voidaan toteuttaa samat operaatiot kuin binomikasoilla. Pääsiallinen ero on, että paljon Decrease-Key-operaatioita sisältävät jonot nopeutuvat. Primin algoritmi pienimmälle

Lisätiedot

Algoritmit 2. Demot Timo Männikkö

Algoritmit 2. Demot Timo Männikkö Algoritmit 2 Demot 1 27.-28.3.2019 Timo Männikkö Tehtävä 1 (a) 4n 2 + n + 4 = O(n 2 ) c, n 0 > 0 : 0 4n 2 + n + 4 cn 2 n n 0 Vasen aina tosi Oikea tosi, jos (c 4)n 2 n 4 0, joten oltava c > 4 Kokeillaan

Lisätiedot

Binäärihaun vertailujärjestys

Binäärihaun vertailujärjestys Järjestetyn sanakirjan tehokas toteutus: binäärihaku Binäärihaku (esimerkkikuassa aain = nimi) op Eea 5 op 5 op op 8 op 5 6 7 8 op Eea 5 op 5 op op 8 op 5 6 7 8 op Eea 5 op 5 op op 8 op 5 6 7 8 op Eea

Lisätiedot

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö Algoritmit 2 Luento 3 Ti 20.3.2018 Timo Männikkö Luento 3 Järjestäminen eli lajittelu Kekorakenne Kekolajittelu Hajautus Yhteentörmäysten käsittely Ketjutus Algoritmit 2 Kevät 2018 Luento 3 Ti 20.3.2018

Lisätiedot

Algoritmit 1. Luento 6 Ke Timo Männikkö

Algoritmit 1. Luento 6 Ke Timo Männikkö Algoritmit 1 Luento 6 Ke 25.1.2017 Timo Männikkö Luento 6 Järjestetty lista Listan toteutus dynaamisesti Linkitetyn listan operaatiot Vaihtoehtoisia listarakenteita Puurakenteet Binääripuu Järjestetty

Lisätiedot

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

58131 Tietorakenteet (kevät 2009) Harjoitus 9, ratkaisuja (Antti Laaksonen) 58131 Tietorakenteet (kevät 2009) Harjoitus 9, ratkaisuja (Antti Laaksonen) 1. Lisäysjärjestämisessä järjestetään ensin taulukon kaksi ensimmäistä lukua, sitten kolme ensimmäistä lukua, sitten neljä ensimmäistä

Lisätiedot

Algoritmit 2. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 9 Ti Timo Männikkö Algoritmit 2 Luento 9 Ti 17.4.2018 Timo Männikkö Luento 9 Merkkitiedon tiivistäminen Huffmanin koodi LZW-menetelmä Taulukointi Editointietäisyys Algoritmit 2 Kevät 2018 Luento 9 Ti 17.4.2018 2/29 Merkkitiedon

Lisätiedot

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

Olkoon seuraavaksi G 2 sellainen tasan n solmua sisältävä suunnattu verkko, Tehtävä 1 : 1 a) Olkoon G heikosti yhtenäinen suunnattu verkko, jossa on yhteensä n solmua. Määritelmän nojalla verkko G S on yhtenäinen, jolloin verkoksi T voidaan valita jokin verkon G S virittävä alipuu.

Lisätiedot

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö Algoritmit 2 Luento 3 Ti 21.3.2017 Timo Männikkö Luento 3 Järjestäminen eli lajittelu Kekorakenne Kekolajittelu Hajautus Yhteentörmäysten käsittely Ketjutus Algoritmit 2 Kevät 2017 Luento 3 Ti 21.3.2017

Lisätiedot

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

A TIETORAKENTEET JA ALGORITMIT KORVAAVAT HARJOITUSTEHTÄVÄT 3, DEADLINE KLO 12:00 A274101 TIETORAKENTEET JA ALGORITMIT KORVAAVAT HARJOITUSTEHTÄVÄT 3, DEADLINE 9.2.2005 KLO 12:00 PISTETILANNE: www.kyamk.fi/~atesa/tirak/harjoituspisteet-2005.pdf Kynätehtävät palautetaan kirjallisesti

Lisätiedot

Algoritmit 2. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 6 Ke Timo Männikkö Algoritmit 2 Luento 6 Ke 29.3.2017 Timo Männikkö Luento 6 B-puun operaatiot B-puun muunnelmia Nelipuu Trie-rakenteet Standarditrie Pakattu trie Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 2/31 B-puu

Lisätiedot

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö Algoritmit 1 Luento 5 Ti 24.1.2017 Timo Männikkö Luento 5 Järjestetty lista Järjestetyn listan operaatiot Listan toteutus taulukolla Binäärihaku Binäärihaun vaativuus Algoritmit 1 Kevät 2017 Luento 5 Ti

Lisätiedot

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet 58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe 15.6.2018 malliratkaisut ja arvosteluperusteet 1. [10 pistettä] Hakemistorakenteet. Vertaa linkitettyjen listojen, tasapainoisten hakupuiden ja

Lisätiedot

Tietorakenteet, laskuharjoitus 6,

Tietorakenteet, laskuharjoitus 6, Tietorakenteet, laskuharjoitus, 23.-2.1 1. (a) Kuvassa 1 on esitetty eräät pienimmistä AVL-puista, joiden korkeus on 3 ja 4. Pienin h:n korkuinen AVL-puu ei ole yksikäsitteinen juuren alipuiden keskinäisen

Lisätiedot

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

verkkojen G ja H välinen isomorfismi. Nyt kuvaus f on bijektio, joka säilyttää kyseisissä verkoissa esiintyvät särmät, joten pari Tehtävä 9 : 1 Merkitään kirjaimella G tehtäväpaperin kuvan vasemmanpuoleista verkkoa sekä kirjaimella H tehtäväpaperin kuvan oikeanpuoleista verkkoa. Kuvan perusteella voidaan havaita, että verkko G on

Lisätiedot

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

58131 Tietorakenteet (kevät 2009) Harjoitus 6, ratkaisuja (Antti Laaksonen) 58131 Tietorakenteet (kevät 2009) Harjoitus 6, ratkaisuja (Antti Laaksonen) 1. Avaimet 1, 2, 3 ja 4 mahtuvat samaan lehtisolmuun. Tässä tapauksessa puussa on vain yksi solmu, joka on samaan aikaan juurisolmu

Lisätiedot

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012 ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012 1.1. (a) Jaettava m, jakaja n. Vähennetään luku n luvusta m niin kauan kuin m pysyy ei-negatiivisena. Jos jäljelle jää nolla, jaettava oli tasan jaollinen. int m,

Lisätiedot

Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmit 1. Luento 9 Ti Timo Männikkö Algoritmit 1 Luento 9 Ti 7.2.2017 Timo Männikkö Luento 9 Graafit ja verkot Kaaritaulukko, bittimatriisi, pituusmatriisi Verkon lyhimmät polut Floydin menetelmä Lähtevien ja tulevien kaarien listat Forward

Lisätiedot

Eräs keskeinen algoritmien suunnittelutekniikka on. Palauta ongelma johonkin tunnettuun verkko-ongelmaan.

Eräs keskeinen algoritmien suunnittelutekniikka on. Palauta ongelma johonkin tunnettuun verkko-ongelmaan. 5. Verkkoalgoritmeja Eräs keskeinen algoritmien suunnittelutekniikka on Palauta ongelma johonkin tunnettuun verkko-ongelmaan. Palauttaminen edellyttää usein ongelman ja algoritmin pientä modifioimista,

Lisätiedot

10. Painotetut graafit

10. Painotetut graafit 10. Painotetut graafit Esiintyy monesti sovelluksia, joita on kätevä esittää graafeina. Tällaisia ovat esim. tietoverkko tai maantieverkko. Näihin liittyy erinäisiä tekijöitä. Tietoverkkoja käytettäessä

Lisätiedot

Pienin virittävä puu (minimum spanning tree)

Pienin virittävä puu (minimum spanning tree) Pienin virittävä puu (minimum spanning tree) Jatkossa puu tarkoittaa vapaata puuta (ks. s. 11) eli suuntaamatonta verkkoa, joka on yhtenäinen: minkä tahansa kahden solmun välillä on polku syklitön: minkä

Lisätiedot

B + -puut. Kerttu Pollari-Malmi

B + -puut. Kerttu Pollari-Malmi B + -puut Kerttu Pollari-Malmi Tämä monista on alunperin kirjoitettu sksn 2005 kurssille osittain Luukkaisen ja Nkäsen vanhojen luentokalvojen pohjalta. Maaliskuussa 2010 pseudokoodiesits on muutettu vastaamaan

Lisätiedot

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

58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 1, , vastauksia 58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 1, 25.2.2013, vastauksia 1. (a) O-merkintä Ω-merkintä: Kyseessä on (aika- ja tila-) vaativuuksien kertalukumerkinnästä. O-merkintää käytetään ylärajan

Lisätiedot

Tietorakenteet ja algoritmit - syksy 2015 1

Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 2 Tietorakenteet ja algoritmit Johdanto Ari Korhonen Tietorakenteet ja algoritmit - syksy 2015 1. JOHDANTO 1.1 Määritelmiä

Lisätiedot

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Tietorakenteet, laskuharjoitus 7, ratkaisuja Tietorakenteet, laskuharjoitus, ratkaisuja. Seuraava kuvasarja näyttää B + -puun muutokset lisäysten jälkeen. Avaimet ja 5 mahtuvat lehtisolmuihin, joten niiden lisäys ei muuta puun rakennetta. Avain 9

Lisätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 TIETORAKENTEET JA ALGORITMIT A274101 TIETORAKENTEET JA ALGORITMIT PERUSTIETORAKENTEET LISTA, PINO, JONO, PAKKA ABSTRAKTI TIETOTYYPPI Tietotyyppi on abstrakti, kun se on määritelty (esim. matemaattisesti) ottamatta kantaa varsinaiseen

Lisätiedot

Kysymyksiä koko kurssista?

Kysymyksiä koko kurssista? Kysymyksiä koko kurssista? Lisää kysymyksesi osoitteessa slido.com syötä event code: #8777 Voit myös pyytää esimerkkiä jostain tietystä asiasta Vastailen kysymyksiin luennon loppupuolella Tätä luentoa

Lisätiedot

Tietorakenteet, laskuharjoitus 3, ratkaisuja

Tietorakenteet, laskuharjoitus 3, ratkaisuja Tietorakenteet, laskuharjoitus 3, ratkaisuja 1. (a) Toistolauseen runko-osassa tehdään yksi laskuoperaatio, runko on siis vakioaikainen. Jos syöte on n, suoritetaan runko n kertaa, eli aikavaativuus kokonaisuudessaan

Lisätiedot

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

Oikeasta tosi-epätosi -väittämästä saa pisteen, ja hyvästä perustelusta toisen. Tietorakenteet, kevät 2012 Kurssikoe 2, mallivastaukset 2. (a) Järjestämistä ei voi missään tilanteessa suorittaa nopeammin kuin ajassa Θ(n log n), missä n on järjestettävän taulukon pituus. Epätosi: Yleisessä

Lisätiedot

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

private TreeMap<String, Opiskelija> nimella; private TreeMap<String, Opiskelija> numerolla; Tietorakenteet, laskuharjoitus 7, ratkaisuja 1. Opiskelijarekisteri-luokka saadaan toteutetuksi käyttämällä kahta tasapainotettua binäärihakupuuta. Toisen binäärihakupuun avaimina pidetään opiskelijoiden

Lisätiedot

useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero

useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero Alkioiden avaimet Usein tietoalkioille on mielekästä määrittää yksi tai useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero 80 op

Lisätiedot

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

811312A Tietorakenteet ja algoritmit II Perustietorakenteet 811312A Tietorakenteet ja algoritmit 2017-2018 II Perustietorakenteet Sisältö 1. Johdanto 2. Pino 3. Jono 4. Lista 811312A TRA, Perustietorakenteet 2 II.1. Johdanto Tietorakenne on tapa, jolla algoritmi

Lisätiedot

Algoritmit 1. Luento 13 Ma Timo Männikkö

Algoritmit 1. Luento 13 Ma Timo Männikkö Algoritmit 1 Luento 13 Ma 26.2.2018 Timo Männikkö Luento 13 Suunnittelumenetelmät Taulukointi Kapsäkkiongelma Ahne menetelmä Verkon lyhimmät polut Dijkstran menetelmä Verkon lyhin virittävä puu Kruskalin

Lisätiedot

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 1. Luento 12 Ti Timo Männikkö Algoritmit 1 Luento 12 Ti 19.2.2019 Timo Männikkö Luento 12 Osittamisen tasapainoisuus Pikalajittelun vaativuus Lajittelumenetelmien vaativuus Laskentalajittelu Lokerolajittelu Kantalukulajittelu Algoritmit

Lisätiedot

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu 1312A Tietorakenteet ja algoritmit, 2018-2019, Harjoitus 5, Ratkaisu Harjoituksen aihe ovat hash-taulukot ja binääriset etsintäpuut Tehtävä 5.1 Tallenna avaimet 10,22,31,4,15,28,17 ja 59 hash-taulukkoon,

Lisätiedot

Algoritmit 1. Luento 12 Ke Timo Männikkö

Algoritmit 1. Luento 12 Ke Timo Männikkö Algoritmit 1 Luento 12 Ke 15.2.2017 Timo Männikkö Luento 12 Pikalajittelu Pikalajittelun vaativuus Osittamisen tasapainoisuus Lajittelumenetelmien vaativuus Laskentalajittelu Lokerolajittelu Kantalukulajittelu

Lisätiedot

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

(a) L on listan tunnussolmu, joten se ei voi olla null. Algoritmi lisäämiselle loppuun: 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

Lisätiedot

Johdatus graafiteoriaan

Johdatus graafiteoriaan Johdatus graafiteoriaan Syksy 2017 Lauri Hella Tampereen yliopisto Luonnontieteiden tiedekunta 62 Luku 2 Yhtenäisyys 2.1 Polku 2.2 Lyhin painotettu polku 2.3 Yhtenäinen graafi 2.4 Komponentti 2.5 Aste

Lisätiedot

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari 1 1. JOHDANTO 1.1 Määritelmiä 1.2 Tietorakenteen ja algoritmin valinta 1.3 Algoritmit ja tiedon määrä 1.4 Tietorakenteet ja toiminnot 1.5 Esimerkki:

Lisätiedot

Luku 8. Aluekyselyt. 8.1 Summataulukko

Luku 8. Aluekyselyt. 8.1 Summataulukko Luku 8 Aluekyselyt Aluekysely on tiettyä taulukon väliä koskeva kysely. Tyypillisiä aluekyselyitä ovat, mikä on taulukon välin lukujen summa tai pienin luku välillä. Esimerkiksi seuraavassa taulukossa

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 11.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 11.2.2009 1 / 33 Kertausta: listat Tyhjä uusi lista luodaan kirjoittamalla esimerkiksi lampotilat = [] (jolloin

Lisätiedot

1.1 Tavallinen binäärihakupuu

1.1 Tavallinen binäärihakupuu TIE-20100 Tietorakenteet ja algoritmit 1 1 Puurakenteet http://imgur.com/l77fy5x Tässä luvussa käsitellään erilaisia yleisiä puurakenteita. ensin käsitellään tavallinen binäärihakupuu sitten tutustutaan

Lisätiedot

Tarkennamme geneeristä painamiskorotusalgoritmia

Tarkennamme geneeristä painamiskorotusalgoritmia Korotus-eteen-algoritmi (relabel-to-front) Tarkennamme geneeristä painamiskorotusalgoritmia kiinnittämällä tarkasti, missä järjestyksessä Push- ja Raise-operaatioita suoritetaan. Algoritmin peruskomponentiksi

Lisätiedot

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmit 2. Luento 14 Ke Timo Männikkö Algoritmit 2 Luento 14 Ke 3.5.2017 Timo Männikkö Luento 14 Ositus ja rekursio Rekursion toteutus Kertaus ja tenttivinkit Algoritmit 2 Kevät 2017 Luento 14 Ke 3.5.2017 2/30 Ositus Tehtävän esiintymä ositetaan

Lisätiedot

Datatähti 2019 loppu

Datatähti 2019 loppu Datatähti 2019 loppu task type time limit memory limit A Summa standard 1.00 s 512 MB B Bittijono standard 1.00 s 512 MB C Auringonlasku standard 1.00 s 512 MB D Binääripuu standard 1.00 s 512 MB E Funktio

Lisätiedot

7. Tasapainoitetut hakupuut

7. Tasapainoitetut hakupuut 7. Tasapainoitetut hakupuut Tässä luvussa jatketaan järjestetyn sanakirjan tarkastelua esittämällä kehittynyt puutietorakenne. Luvussa 7.1. esitetään monitiehakupuun käsite. Se on järjestetty puu, jonka

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 2. helmikuuta 2012 TIEA241 Automaatit ja, kevät 2012 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 2. helmikuuta 2012 Sisällys Sisällys Chomskyn hierarkia kieli säännöllinen kontekstiton kontekstinen rekursiivisesti lueteltava

Lisätiedot

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta 811312A Tietorakenteet ja algoritmit 2016-2017 Kertausta jälkiosasta IV Perustietorakenteet Pino, jono ja listat tunnettava Osattava soveltaa rakenteita algoritmeissa Osattava päätellä operaatioiden aikakompleksisuus

Lisätiedot

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

ja λ 2 = 2x 1r 0 x 2 + 2x 1r 0 x 2 Johdatus diskreettiin matematiikkaan Harjoitus 4, 7.10.2015 1. Olkoot c 0, c 1 R siten, että polynomilla r 2 c 1 r c 0 on kaksinkertainen juuri. Määritä rekursioyhtälön x n+2 = c 1 x n+1 + c 0 x n, n N,

Lisätiedot

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

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Esimerkki otteluvoiton todennäköisyys A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Yksittäisessä pelissä A voittaa todennäköisyydellä p ja B todennäköisyydellä q =

Lisätiedot

= 5! 2 2!3! = = 10. Edelleen tästä joukosta voidaan valita kolme särmää yhteensä = 10! 3 3!7! = = 120

= 5! 2 2!3! = = 10. Edelleen tästä joukosta voidaan valita kolme särmää yhteensä = 10! 3 3!7! = = 120 Tehtävä 1 : 1 Merkitään jatkossa kirjaimella H kaikkien solmujoukon V sellaisten verkkojen kokoelmaa, joissa on tasan kolme särmää. a) Jokainen verkko G H toteuttaa väitteen E(G) [V]. Toisaalta jokainen

Lisätiedot

3. Binääripuu, Java-toteutus

3. Binääripuu, Java-toteutus 3. Binääripuu, Java-toteutus /*-------------------------------------------------------------/ / Rajapinta SearchTree: binäärisen hakupuun käsittelyrajapinta / / Metodit: / / void insert( Comparable x );

Lisätiedot

isomeerejä yhteensä yhdeksän kappaletta.

isomeerejä yhteensä yhdeksän kappaletta. Tehtävä 2 : 1 Esitetään aluksi eräitä havaintoja. Jokaisella n Z + symbolilla H (n) merkitään kaikkien niiden verkkojen joukkoa, jotka vastaavat jotakin tehtävänannon ehtojen mukaista alkaanin hiiliketjua

Lisätiedot

Algoritmit 2. Luento 10 To Timo Männikkö

Algoritmit 2. Luento 10 To Timo Männikkö Algoritmit 2 Luento 10 To 19.4.2018 Timo Männikkö Luento 10 Peruutusmenetelmä Osajoukon summa Verkon 3-väritys Pelipuut Pelipuun läpikäynti Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 2/34 Algoritmien

Lisätiedot

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta 811312A Tietorakenteet ja algoritmit 2018-2019 Kertausta jälkiosasta V Hashtaulukot ja binääriset etsintäpuut Hashtaulukot Perusajatus tunnettava Tiedettävä mikä on tiivistefunktio Törmäysongelman hallinta:

Lisätiedot

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

Valitaan alkio x 1 A B ja merkitään A 1 = A { x 1 }. Perinnöllisyyden nojalla A 1 I. Vaihto-ominaisuudella on seuraava intuition kannalta keskeinen seuraus: Olkoot A I ja B I samankokoisia riippumattomia joukkoja: A = B = m jollain m > 0. Olkoon vielä n = m A B, jolloin A B = B A = n.

Lisätiedot