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 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 2017 Luento 6 Ke 29.3.2017 3/31
B-puun operaatiot: Haku Alkion haku: Aloitetaan juurisolmusta Etsitään avainta solmusta Jos alkio ei ole solmussa, siirrytään avainta vastaavaan alipuuhun Tarvittaessa jatketaan lehtisolmuun saakka Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 4/31
B-puun operaatiot: Lisäys Alkion lisäys: Kuljetaan juurisolmusta kohti avainta vastaavaa lehtisolmua Jos polulla täysi solmu, halkaistaan se kahdeksi solmuksi Halkaisussa keskimmäisen alkion vasemmalla puolella olevat alkiot jäävät solmuun, oikealla puolella olevat siirretään uuteen solmuun Jos juurisolmu täynnä, muodostetaan sen alkioista uusi taso juuren alapuolelle Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 5/31
B-puun operaatiot: Lisäys Solmun halkaisu: w x a w x a y Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 6/31
B-puun operaatiot: Lisäys Uuden tason lisääminen: x a y x a z Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 7/31
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äynnä olevia sisarussolmuja yhdistetään yhdeksi solmuksi Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 8/31
B-puun operaatiot: Poisto Alkioiden siirto: x a y b z x b y a z Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 9/31
B-puun operaatiot: Poisto Solmujen yhdistäminen: y x a z x a Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 10/31
B-puun muunnelmia B+-puu: Kaikki tieto lehtisolmuissa Haarautumissolmuissa vain avaimia ja osoittimia Lehtisolmut linkitetty toisiinsa kahteen suuntaan linkitettynä listana Sallii lehtisolmujen peräkkäiskäsittelyn Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 11/31
B-puun muunnelmia B*-puu: Solmun tullessa täyteen, ei halkaista välittömästi Ensin yritetään saada lisätilaa naapurisolmusta Lisätään uusi solmu, jos naapurisolmukin on täynnä, ja jaetaan tieto suunnilleen tasan näiden kolmen solmun kesken Keskimääräinen täyttösuhde parempi kuin tavallisella B-puulla Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 12/31
Nelipuu Kaksidimensioisen tiedon tallennukseen Solmulla voi olla neljä alipuuta Esimerkki: Tallennetaan tason pisteitä neliön muotoisessa alueessa Jaetaan neljään yhtä suureen osaan koordinaattiakselien suuntaisilla viivoilla Jatketaan jakoa, kunnes jokainen piste on omassa neliössään Kukin neliö vastaa yhtä solmua nelipuussa Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 13/31
Esimerkki 3 2 6 1 7 4 5 8 4 1 2 3 6 7 5 8 Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 14/31
Nelipuun operaatiot Haku: Solmussa tutkitaan, mihin osaneliöön haettava piste kuuluu Siirrytään vastaavaan alipuuhun, kunnes tullaan lehtisolmuun Tutkitaan, onko lehtisolmuun tallennettu piste haettu piste Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 15/31
Nelipuun operaatiot Lisäys: Haetaan lehtisolmu, johon piste tulisi sijoittaa Jos lehtisolmussa on jo piste, jaetaan vastaava alue osaneliöihin Tehdään jakoa vastaava haarautumissolmu ja neljä lapsisolmua Tarvittaessa jatketaan jakoa, kunnes uusi piste yksin omassa neliössään Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 16/31
Nelipuun operaatiot Poisto: Haetaan lehtisolmu, jossa poistettava piste on Jos kyseiselle alueelle jää vain yksi piste, vastaavat osaneliöt yhdistetään Tehdään vastaavat muutoksen nelipuuhun Tarvittaessa jatketaan yhdistämistä Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 17/31
Nelipuun versioita Tasajaon asemesta pisteiden muodostama jako: Jokaisessa solmussa myös kyseisen pisteen tiedot Lisättäessä piste alue jaetaan neljään osaan koordinaattiakselien suuntaisilla viivoilla, jotka kulkevat kyseisen pisteen kautta Osa-alueet eivät neliötä vaan suorakulmioita Operaatiot jonkin verran hankalampia kuin tasajaossa Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 18/31
Nelipuun versioita Jako vain kahteen alueeseen: Tehdään jako vuorotellen x-koordinaatin ja y-koordinaatin suhteen Kullakin solmulla vain kaksi lapsisolmua Tehokkaampi muistitilan käyttö Voidaan yleistää useampiulotteisen tapaukseen: Esimerkiksi kolmiulotteinen tieto Alue (kuutio) jaetaan kolmella tasolla kahdeksaan osa-alueeseen Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 19/31
Trie-rakenteet Merkkijonojen käsittelyyn liittyvä tallennusmuoto Sanan haku, sanan sovitus, sanan etuosan sovitus Aakkosto A, erilaisten merkkien lkm d Joukko merkkijonoja S, merkkijonojen lkm s Ehto: Mikään joukon S merkkijono ei ole etuosa (etuliite) jostain toisesta joukon S merkkijonosta Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 20/31
Standarditrie Joukon S standarditrie on järjestetty puu T : Jokaiseen solmuun, paitsi juurisolmuun, liittyy yksi aakkoston A merkki Sisäisessä solmussa (haarautumissolmussa) lapsisolmujen järjestys määräytyy aakkoston luonnollisen järjestyksen mukaan Ulkoisia solmuja (lehtisolmuja) on s kpl Jokainen ulkoinen solmu liittyy yhteen merkkijonoon, joka saadaan kun kootaan yhteen polulla juuresta tähän ulkoiseen solmuun olevat merkit Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 21/31
Standarditrie Sisäisellä solmulla lapsia 1... d Polku juuresta syvyydelle i vastaa aina jonkin merkkijonon i:tä ensimmäistä merkkiä Puun korkeus sama kuin S:n pisimmän merkkijonon pituus Mikään merkkijono ei ole toisen merkkijonon etuosa Ulkoisiin solmuihin liittyvät merkkijonot yksikäsitteisiä Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 22/31
Esimerkki a k l n e s t s e t u s a i e ä i o t k a Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 23/31
Haku trie-rakenteesta Etsitään merkkijonoa, jonka pituus on m Aloitetaan juuresta ja edetään merkki kerrallaan vastaavan merkin mukaiseen haaraan (jos mahdollista) Jos polku päättyy ulkoiseen solmuun, merkkijono (tai sen alkuosa) löytyi Jos polku päättyy sisäiseen solmuun, merkkijono ei ole puussa Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 24/31
Haku trie-rakenteesta Käydään läpi m + 1 solmua Yhdessä solmussa menee aika Θ(d) Aikavaativuus Θ(dm) Joskus yhden solmun käsittely voidaan tehdä ajassa Θ(1) tai Θ(log m) Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 25/31
Trien muodostaminen Lisätään merkkijono kerrallaan Jäljitetään polkua niin pitkälle kuin mahdollista Jos merkkijono ei ole jo puussa, polku päättyy johonkin sisäiseen solmuun Luodaan merkkijonon loppuosalle uusi polku, päättyen ulkoiseen solmuun Yhden merkkijonon lisäys Θ(dm) Koko trien muodostaminen Θ(dn), missä n on kaikkien S:n merkkijonojen yhteispituus Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 26/31
Pakattu trie Sisäinen solmu v on tarpeeton, jos v:llä on vain yksi lapsi v ei ole juurisolmu Solmujen ketju (v 0, v 1 ),..., (v k 1, v k ) on tarpeeton, jos v i :t, i = 1,..., k 1, ovat tarpeettomia v 0 ja v k eivät ole tarpeettomia Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 27/31
Pakattu trie Trie-rakenteen pakkaaminen: Korvataan jokainen tarpeeton ketju (v 0, v 1 ),..., (v k 1, v k ) yhdellä haaralla (v 0, v k ) Asetetaan solmun v k tunnukseksi solmujen v 1,..., v k merkkien muodostama merkkijono Sisäisillä solmuilla ainakin kaksi lasta Solmujen tunnuksina merkkijonoja (ei pelkästään yksittäisiä merkkejä) Solmujen lkm suhteessa merkkijonojen lkm:ään (ei niiden yhteispituuteen) Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 28/31
Esimerkki le a k n s esä ot sa ti te u i ka Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 29/31
Pakattu trie Tehostetaan rakennetta edelleen: Merkkijonot tallennetaan taulukkoon S Merkkijonot: S[0], S[1],..., S[s 1] Puun solmuihin tallennetaan indeksejä (kokonaislukuja, ei merkkijonoja) Indeksikolmikko (i, j, k) tarkoittaa i:nnen merkkijonon alimerkkijonoa, joka sisältää merkit paikoista j... k Toisin sanoen (i, j, k) S[i][j..k] Algoritmit 2 Kevät 2017 Luento 6 Ke 29.3.2017 30/31
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 2017 Luento 6 Ke 29.3.2017 31/31