Algoritmit 2. Luento 6 To Timo Männikkö

Samankaltaiset tiedostot
Algoritmit 2. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 2. Luento 4 To Timo Männikkö

Algoritmit 2. Luento 4 Ke Timo Männikkö

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.

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

Algoritmit 2. Luento 9 Ti Timo Männikkö

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 1. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Algoritmit 1. Luento 12 Ke Timo Männikkö

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 12 To Timo Männikkö

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

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 10 To Timo Männikkö

Luku 8. Aluekyselyt. 8.1 Summataulukko

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

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 2. Luento 8 To Timo Männikkö

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

Algoritmit 2. Luento 11 Ti Timo Männikkö

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

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

Binäärihaun vertailujärjestys

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

Algoritmit 2. Luento 11 Ti Timo Männikkö

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

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Algoritmit 1. Luento 4 Ke Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 10 To Timo Männikkö

Algoritmit 2. Luento 9 Ti Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Algoritmit 2. Demot Timo Männikkö

Paikkatiedon käsittely 5. Paikkatiedon indeksointi

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

Datatähti 2019 loppu

1.1 Tavallinen binäärihakupuu

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 1. Luento 11 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

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

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

B + -puut. Kerttu Pollari-Malmi

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

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

Ohjelmoinnin perusteet Y Python

Paikkatiedon hallinta ja analyysi 4. Paikkatiedon indeksointi

Ohjelmoinnin perusteet Y Python

Algoritmit 2. Luento 12 Ke Timo Männikkö

Tehtävä 2: Loppuosataulukko

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

A TIETORAKENTEET JA ALGORITMIT

7. Tasapainoitetut hakupuut

Algoritmit 1. Luento 14 Ke Timo Männikkö

14 Tasapainotetut puurakenteet

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

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

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

Johdatus graafiteoriaan

4. Joukkojen käsittely

Algoritmit 1. Demot Timo Männikkö

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

Tieto- ja tallennusrakenteet

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

Paikkatiedon käsittely 6. Kyselyn käsittely

Algoritmit 2. Luento 14 To Timo Männikkö

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

Algoritmi on periaatteellisella tasolla seuraava:

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

Algoritmit 1. Luento 13 Ma Timo Männikkö

Paikkatiedon hallinta ja analyysi 4. Paikkatiedon indeksointi (jatkoa)

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

8. Kieliopit ja kielet

Algoritmit 1. Luento 13 Ti Timo Männikkö

Union-find-delete-algoritmien vertailua. Sari Itäluoma

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

Kysymyksiä koko kurssista?

Yhtälöryhmät 1/6 Sisältö ESITIEDOT: yhtälöt

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

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

Kaulaketju. Syöte. Tuloste. Esimerkki 1. Esimerkki 2

Algoritmit 1. Demot Timo Männikkö

Graafit ja verkot. Joukko solmuja ja joukko järjestämättömiä solmupareja. eli haaroja. Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria

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

Transkriptio:

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 200 250 340 400 150 180 Astetta m oleva B-puu: 210 220 240 270 300 Alkioita m 1... 2m 1 Osoittimia m... 2m 360 370 420 440 460 Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 3/30

B-puun operaatiot: Haku Alkion haku: Aloitetaan juurisolmusta Etsitään alkiota solmusta Jos alkio ei ole solmussa, siirrytään alkion avainta vastaavaan alipuuhun Jatketaan samalla tavalla Tarvittaessa johonkin lehtisolmuun saakka Lopetetaan kun alkio löytyy, tai kun todetaan että alkiota ei ole puussa Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 4/30

B-puun operaatiot: Lisäys Alkion lisäys: Kuljetaan juurisolmusta kohti avainta vastaavaa lehtisolmua Jos hakupolulla täysi solmu, halkaistaan se kahdeksi solmuksi ennen kuin jatketaan Jos juurisolmu täysi, muodostetaan uusi taso juurisolmun alapuolelle Lisätään alkio lehtisolmuun Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 5/30

B-puun operaatiot: Lisäys Hakupolulla on päästy solmuun x Hakupolku jatkuisi solmusta y, mutta y on täysi Solmun halkaisu: y x a x y a z Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 6/30

B-puun operaatiot: Lisäys Juurisolmua ei voi halkaista samalla tavalla Sen sijaan lisätään juurisolmun alapuolelle uusi taso Uuden tason lisääminen: x a y x a z Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 7/30

B-puun operaatiot: Poisto Alkion poisto: Aloitetaan poistettavan alkion etsintä juurisolmusta Pidetään huoli, että mikään solmu ei tule liian vajaaksi Tarvittaessa alkioita siirretään haarautumissolmusta sen lapsisolmuun ja päinvastoin Tarvittaessa täsmälleen puoliksi täysiä sisarussolmuja yhdistetään yhdeksi solmuksi Lopetetaan kun alkio on poistettu, tai kun todetaan että alkiota ei ole puussa Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 8/30

B-puun operaatiot: Poisto Jos hakupolulla puoliksi täysi solmu, alkioita siirretään tai solmuja yhdistetään ennen kuin jatketaan Poistettava alkio lehtisolmussa: Poistetaan alkio (solmu ei tule vajaaksi) Poistettava alkio haarautumissolmussa: Etsitään poistettavan alkion edeltäjä tai seuraaja Poistetaan edeltäjä/seuraaja puusta rekursiivisesti Korvataan poistettava alkio edeltäjällä/seuraajalla Tai: Yhdistetään lapsisolmuja ennen kuin jatketaan Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 9/30

B-puun operaatiot: Poisto Hakupolulla on päästy solmuun x Mutta seuraava solmu y on puoliksi täysi Alkioiden siirto: x a y b z x b y a z (Vastaavasti, jos z on y:n vasemmalla puolella) Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 10/30

B-puun operaatiot: Poisto Hakupolulla on päästy solmuun x Mutta seuraava solmu y ja sen välittömät sisarussolmut puoliksi täysiä Solmujen yhdistäminen: y x a z y x a (Vastaavasti, jos z on y:n vasemmalla puolella) Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 11/30

Nelipuu Kaksiulotteisen tiedon tallennukseen Haarautumissolmuilla neljä alipuuta Esimerkiksi tallennetaan tason pisteitä neliön muotoisessa alueessa Jaetaan alue neljään yhtä suureen osaan koordinaattiakselien suuntaisilla suorilla Jatketaan jakoa, kunnes jokainen piste on yksin omassa neliön muotoisessa alueessaan Juurisolmu vastaa koko aluetta, muut solmut vastaavat yhtä jaossa muodostunutta neljännestä Pisteiden sisältämä tieto tallennetaan lehtisolmuihin Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 12/30

Esimerkki 3 2 6 1 7 4 5 8 4 1 2 3 6 7 5 8 Lapsisolmujen keskinäinen järjestys täytyy määritellä jollain yksikäsitteisellä tavalla Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 13/30

Nelipuun operaatiot Haku: Aloitetaan juurisolmusta Solmussa tutkitaan, mihin neljännekseen haettava piste kuuluu Siirrytään vastaavaan alipuuhun Jatketaan kunnes tullaan lehtisolmuun Tutkitaan, onko lehtisolmuun mahdollisesti tallennettu piste haettava piste Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 14/30

Nelipuun operaatiot Lisäys: Etsitään lehtisolmu, johon piste pitäisi sijoittaa Jos lehtisolmu tyhjä, tallennetaan piste sinne Jos lehtisolmussa on jo piste, jaetaan vastaava alue neljään osaan Tehdään solmusta haarautumissolmu ja lisätään sille neljä lapsisolmua Tarvittaessa jatketaan jakoa, kunnes pisteet yksin omissa alueissaan Tallennetaan pisteet vastaaviin lehtisolmuihin Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 15/30

Nelipuun operaatiot Poisto: Etsitään lehtisolmu, jossa poistettava piste on Jos poiston jälkeen jaetulle alueelle jäisi vain yksi piste, on kyseinen jako turha ja pienemmät alueet voidaan yhdistää takaisin isommaksi alueeksi Poistetaan vastaavat lapsisolmut, muutetaan vanhempi lehtisolmuksi ja tallennetaan yksinäinen piste sinne Tarvittaessa jatketaan alueiden yhdistämistä, kunnes kaikki turhat jaot on peruutettu Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 16/30

Nelipuun versioita Tasajaon asemesta pisteiden muodostama jako: Kun lisätään piste, jaetaan alue neljään osaan koordinaattiakselien suuntaisilla suorilla, jotka kulkevat kyseisen pisteen kautta Jokaisessa haarautumissolmussa myös kyseisen pisteen tiedot Muodostuvat alueet eivät neliötä vaan suorakulmioita Perusoperaatioiden toteutus jonkin verran hankalampaa kuin tasajaossa Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 17/30

Nelipuun versioita Jako vain kahteen osaan: Tehdään jako vuorotellen x-koordinaatin ja y-koordinaatin suhteen Jokaisella haarautumissolmulla vain kaksi lapsisolmua 2-d-puu Tehokkaampi muistitilan käyttö Voidaan yleistää useampiulotteiseen tapaukseen: Esimerkiksi kolmiulotteinen tieto Kuutio jaetaan kolmella tasolla kahdeksaan pienempään kuutioon 8-puu Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 18/30

Trie-rakenteet Merkkijonojen käsittelyyn soveltuva tietorakenne Sanan haku, sanan tai sanan alkuosan sovittaminen Aakkosto A, erilaisia merkkejä d kpl Merkkijonojen joukko S, merkkijonoja s kpl Ehto: Mikään joukon S merkkijono ei ole minkään toisen merkkijonon etuliite (alkuosa) Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 19/30

Standarditrie Joukon S standarditrie on järjestetty puu: Jokaiseen solmuun, paitsi juurisolmuun, liittyy yksi aakkoston merkki Haarautumissolmuissa lapsisolmujen järjestys määräytyy aakkoston luonnollisen järjestyksen mukaan Lehtisolmuja on s kpl Jokaiseen lehtisolmuun liittyy yksi merkkijono, joka saadaan kun kootaan yhteen juurisolmusta kyseiseen lehtisolmuun kulkevalla polulla olevat merkit Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 20/30

Standarditrie Polku juurisolmusta tasolle i saakka vastaa jonkin merkkijonon i:tä ensimmäistä merkkiä Puun korkeus sama kuin S:n pisimmän merkkijonon pituus Mikään merkkijono ei ole toisen merkkijonon etuliite Lehtisolmuihin liittyvät merkkijonot yksikäsitteisiä Haarautumissolmulla 1 d lapsisolmua Yksi lapsisolmu jokaista seuraavana esiintyvää eri merkkiä kohden Pahin tapaus: Millään kahdella merkkijonolla ei ole yhteistä ensimmäistä merkkiä Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 21/30

Esimerkki a l n e s t s e k t u s a i e ä i o t k a Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 22/30

Haku trie-rakenteesta Etsitään merkkijonoa puusta Aloitetaan juurisolmusta ja edetään merkki kerrallaan merkkiä vastaavaan alipuuhun Jos päädytään lehtisolmuun, merkkijono löytyi (tai sen alkuosa, jos merkkejä vielä jäljellä) Jos polku päättyy haarautumissolmuun, merkkijono ei ole puussa Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 23/30

Haku trie-rakenteesta Erilaisten merkkien lukumäärä d Yhdessä solmussa menee aika Θ(d) Haettavan merkkijonon pituus m Haun aikavaativuus Θ(dm) Joskus yhden solmun käsittely voidaan tehdä ajassa Θ(log d) tai Θ(1) Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 24/30

Trien muodostaminen Lisätään merkkijonot yksi kerrallaan Jäljitetään polkua niin pitkälle kuin mahdollista Jos merkkijono ei ole jo puussa, polku päättyy johonkin haarautumissolmuun Lisätään uusi alipuu ja luodaan uusi polku merkkijonon loppuosalle Polku päätetään lehtisolmuun, johon tulee merkkijonon viimeinen merkki Yhden merkkijonon lisäys Θ(dm) Koko trien muodostaminen Θ(dn), missä n on kaikkien merkkijonojen yhteispituus Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 25/30

Pakattu trie Standarditrie: Jos hakupolulla useita yksilapsisia solmuja peräkkäin, on vain yksi mahdollinen reitti edettävänä Haarautumissolmu v on tarpeeton, jos v:llä on vain yksi lapsisolmu v ei ole juurisolmu Peräkkäisten haarojen (v 0, v 1 ), (v 1, v 2 ),..., (v k 1, v k ) muodostama solmujen ketju on tarpeeton, jos v 1, v 2,..., v k 1 ovat tarpeettomia v 0 ja v k eivät ole tarpeettomia Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 26/30

Pakattu trie Trie-rakenteen pakkaaminen: Korvataan jokainen tarpeeton ketju yhdellä haaralla (v 0, v k ) Solmuissa v 1, v 2,..., v k 1 olevat merkit lisätään haaran loppusolmuun v k Haarautumissolmuilla vähintään kaksi lasta Solmuissa ei yksittäisiä merkkejä vaan merkkijonoja Solmujen lukumäärä suhteessa merkkijonojen lukumäärään (ei niiden yhteispituuteen) Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 27/30

Esimerkki le a n s esä k ot sa ti te u i ka Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 28/30

Pakattu trie Tehostetaan rakennetta edelleen: Tallennetaan merkkijonot erilliseen taulukkoon Puun solmuihin tallennetaan indeksejä (kokonaislukuja) Merkkijonot: S[0], S[1],..., S[s-1] Alimerkkijonot: S[i][j..k] (i:nnen merkkijonon merkit paikasta j paikkaan k) Alimerkkijonoon S[i][j..k] viitataan lyhyesti indeksikolmikolla (i,j,k) Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 29/30

Esimerkki 5,1,2 1,0,0 0,0,0 7,1,1 1,1,1 0,1,3 6,1,2 4,2,3 7,2,3 3,2,3 1,2,2 2,3,3 6,3,4 0 1 2 3 4 S[0] k e s ä S[1] a s u S[2] k o t i S[3] a s t e 0 1 2 3 4 S[4] a n s a S[5] a l e S[6] k o t k a S[7] a n t i Algoritmit 2 Kevät 2019 Luento 6 To 28.3.2019 30/30