Suffiksipuut. Satu Kokko. Tietokannat nyt! -seminaari Helsinki HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos
|
|
- Erkki Hänninen
- 7 vuotta sitten
- Katselukertoja:
Transkriptio
1 Suffiksipuut Satu Kokko Tietokannat nyt! -seminaari Helsinki HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos
2 ii Sisältö 1 Johdanto Merkkijonot ja suffiksipuut Sovelluksia Roskapostin suodattaminen Hahmojen tunnistus biosekvensseistä Algoritmeja Aikavaativuudeltaan lineaariset algoritmit Muita algoritmeja Algoritmien vertailua ja tutkimustuloksia Yhteenveto Lähteet...13
3 1 1 Johdanto Suffiksipuu (Suffix tree) on monipuolinen tietorakenne merkkijonojen tutkimiseen. Suffiksipuu koostuu merkkijonon jokaisesta päätteestä eli loppuosasta. Jokainen polku puun juuresta lehteen on yksi merkkijonon loppuosa tietystä merkistä loppuun. Suffiksipuuna merkkijonosta paljastuu ominaisuuksia jotka eivät näy päällepäin, kuten pisin alisana tai millaisia osia siinä toistuu usein. Puun avulla voidaan esimerkiksi hakea nopeasti täsmällistä tai tietynlaista osajonoa [TTH05]. Laskennallisessa biologiassa eli bioinformatiikassa tutkitaan erityisen pitkiä merkkijonoja, kuten ihmisen DNA-sekvenssejä. Miljoonien merkkien joukossa tärkeät kohdat eli geenit sisältävät usein toisteista tietoa tai tiettyjä tunnistettavia hahmoja. Molempien etsimisessä voidaan hyödyntää suffiksipuita [Vil02]. Toinen tietorakenteen tuore hyödyntämiskohde on roskaposti eli spam. Pampapathi ja kumppanit esittelevät artikkelissaan suffiksipuun käyttöä sähköpostin luokittelussa ja ovat testein havainneet sen naiivia bayesilaista suodatusta paremmaksi [PML06]. Suffiksipuun tutkimista edeltävä vaihe, puun muodostaminen, vaatii kuitenkin paljon aikaa, muistia ja prosessoritehoa suurilla aineistoilla kuten pitkillä DNAsekvensseillä. Useat muodostamisalgoritmit ovat aikavaativuudeltaan merkkijonon pituuden suhteen lineaarisia O(n), kuten Esko Ukkosen 1992 esittelemä algoritmi [GiK97]. Pitkää sekvenssiä käsiteltäessä puun koko ylittää nopeasti käytettävissä olevan muistin määrän, jolloin tärkein nopeutta ja tehokkuutta rajoittava tekijä ei olekaan algoritmin aikavaativuus vaan levyn käyttö. Tian ja kumppanit esittelevät artikkelissaan PWOTD-algoritmin ja TDD-tekniikan, joka aikavaativuudestaan O(n 2 ) huolimatta suoriutuu jokseenkin kaikissa esimerkkitapauksissa niin muistissa kuin levyltäkin lineaarisia nopeammin [TTH05]. Luku kaksi esittelee merkkijonoihin ja suffiksipuihin liittyvät käsitteet. Esimerkkeinä käytännön ongelmista esitellään roskaposti ja biosekvenssit luvussa kolme. Luvussa neljä tutustutaan tarkemmin muutamiin algoritmityyppeihin ja algoritmeihin, joilla suffiksipuita voidaan muodostaa. Yhteenvetoa edeltävässä luvussa viisi vertaillaan algoritmeja ja esitellään lyhyesti tutkimustuloksia.
4 2 2 Merkkijonot ja suffiksipuut Merkkijono eli sekvenssi koostuu merkeistä, jotka kuuluvat tiettyyn rajalliseen aakkostoon. Esimerkiksi DNA-sekvenssit koostuvat merkeistä A, T, C ja G, jotka kuvaavat nukleotidimolekyylejä. Merkkijonon osaa kutsutaan sanaksi. Yksittäisen sanan voi etsiä tekstiaineistosta läpikäymällä koko sekvenssin, ainakin jos aineisto ei ole valtava ja hakuun käytetyllä ajalla ei ole merkitystä. Jos aineisto on pitkä ja hakuja on tarkoitus tehdä enemmänkin, on järkevää muodostaa tietorakenne hakujen nopeuttamiseksi. Suffiksipuu on sekvensseihin kohdistuvissa algoritmeissa yleinen tietorakenne. Nämä algoritmit ja siten tietorakenne ei kuitenkaan ole yleisessä käytössä, koska puun rakentaminen varsinkin suurista aineistoista on tähän saakka ollut työlästä. Kuva 1. Merkkijonosta BANANA muodostettu suffiksipuu. Sekvenssin BANANA suffiksit eli loppuosat ovat: BANANA, ANANA, NANA, ANA, NA ja A. Niitä on yhtä monta kuin alkuperäisessä sekvenssissä on merkkejä. Kun nämä loppuosat järjestetään aakkosjärjestykseen, tulevat yhteiset alkuosat näkyville ja voidaan helposti muodostaa kuvan 1 suffiksipuu: - A - ANA - ANANA - BANANA - NA - NANA Suffiksipuussa kukin loppuosista on polku särmiä pitkin juuresta eri solmuun, joten puun solmujen lukumäärä on sama kuin sekvenssin pituus. Puun korkeus on yleensä
5 3 pienempi kuin sekvenssin pituus, koska puun jokainen särmä voi sisältää useita merkkejä. Puu on haarainen koska moni suffikseista alkaa samoilla merkeillä, esimerkiksi ANANA ja ANA. Mitä haaraisempi jokin alipuu on, sitä useammin sen yläpuolella olevan osan merkit merkkijonossa toistuvat. Merkkijonon loppuun voidaan lisätä jokin aakkostoon kuulumaton merkki, jotta kukin polku päättyisi lehteen. Kuvassa 2 on kuvan 1 merkkijonon suffiksipuu täydennettynä lopetusmerkillä $. Kuva 2. Merkkijonosta BANANA$ muodostettu suffiksipuu. Merkkijonoista muodostettaviin puihin liittyy yksinkertaisempi tietorakenne trie (sanasta retrieval, joten lausutaan englanniksi kuten puu). Suffiksitrie-rakenteeseen talletetaan kaikki loppuosat kuten suffiksipuuhunkin, mutta jokaisella särmällä saa olla vain yksi aakkoston merkki. Niinpä suffiksitrien koko voi olla jopa neliöllinen suffiksipuuhun verrattuna [Vil02]. Patricia-puu (myös radix tree) on eräs trien tiivistetty muoto. Siinä jokainen solmu jolla on vain yksi lapsi, yhdistetään lapseensa. Niinpä suffiksipuu on itseasiassa vastaavasta suffiksitriestä muodostettu Patricia-puu. Lyhenne Patricia tulee sanoista: Practical Algorithm to Retrieve Information Coded in Alphanumeric. Tietyn sanan hakemisessa (exact string matching) tekstiä sisältävästä tietokannasta voidaan hyödyntää suffiksipuita, puun muodostamisen jälkeen haun viemä aika riippuu vain etsittävän sanan pituudesta. Suffiksipuita voidaan käyttää tehokkaasti myös miltei samanlaisten sanojen etsintään (approximate string matching), jossa tyypillisesti käytetään säännöllisiä lausekkeita. Suffiksipuun avulla voidaan paitsi tehdä hakuja ja tunnistaa hahmoja, myös selvittää myös pisin toistuva sana ja toisteisuutta ylipäätään, sekä saada tilastollista tietoa merkkijonosta.
6 4 Kuva 3. Suffiksipuu, -trie ja -taulukko merkkijonolle ATACATA$ [Vil02]. Kuvassa 3 esitetään merkkijonolle merkkijonolle ATACATA$ sekä suffiksipuu, - trie että -taulukko. Loppumerkki $ on mukana lehtien aikaansaamiseksi. Ylimpänä olevassa taulukossa merkeille on annettu järjestysnumerot, ensimmäisen merkin ollessa numeroltaan yksi. Lehdet on numeroitu suffiksitaulukkoa varten sen mukaan monennestako merkistä loppuosa alkaa. Tällöin esimerkiksi polun ATA$ päättävä lehti saa numerokseen 5. Lehtien numerot kerätään puusta kuvassa alimpana näkyvään suffiksitaulukkoon etujärjestyksessä (preorder). Kuvan 3 suffiksitaulukko (suffix array) on eräs tiivis suffiksipuiden talletusrakenne, se vie vain kolmasosan puun talletustilasta. Joissain toteutuksissa on mahdollista käyttää suffiksitaulukkoa fyysisenä rakenteena vaikka konseptitasolla tarkasteltaisiinkin suffiksipuuta. Suffikseihin liittyvän termistön täydentämiseksi mainittakoon vielä,
7 5 että suffiksipuiden rakennusalgoritmeissa hyödynnetään usein samansisältöisten solmujen välillä [Vil02]. suffiksilinkkejä 3 Sovelluksia Rakentamalla suffiksipuu voidaan helpottaa monimutkaistenkin merkkijonoongelmien ratkomista. Seuraavassa esitellään hieman tarkemmin kaksi erilaista käytännön sovellusta: roskapostin suodattaminen ja hahmojen tunnistaminen DNAsekvensseistä. Suffiksipuihin voidaan myös tallentaa hakua tai tunnistusta varten vaikkapa ip-osoitteita tai tietokonematojen tunnisteita. 3.1 Roskapostin suodattaminen Oikeiden sähköpostiviestien suodattaminen roskapostin joukosta on kasvava ja yrityksille yhä kalliimpi ongelma. Algoritmeja viestien luokitteluun on useita, useimmat päättelevät malliksi annetuihin tai ajan mittaan tunnistetuihin viesteihin vertaamalla onko uusi viesti roskapostia. Karkeasti roskapostin voi luokitella selkokieliseen roskapostiin, viesteihin joissa sanojen sisälle on lisättyjä merkkejä, viesteihin joihin on lisätty asiaan liittymätöntä tekstiä (word salad) sekä sellaisiin jotka sisältävät ylimääräisen tekstin lisäksi täysin satunnaisia merkkijonoja. Pampapathi ja kumppanit esittelevät tavan luokitella saapunut sähköposti sen mukaan, mihin aiemmin muodostetuista suffiksipuista viestissä käytetty kieli sopii parhaiten. He tallentavat samaan suffiksipuuhun merkkijonon välilyönnillä erotetut sanat eli sanaston, joista siis vain viimeinen loppuu koko merkkijonon lopussa. Tälläistä rakennetta kutsutaan yleistetyksi suffiksipuuksi (generalised suffix tree). Puuhun tallennetaan merkkien lisäksi esiintymien määrä. Mitä erottelevampia, pidempiä ja useampia viestin sanoja löytyy tietystä suffiksipuusta, sitä todennäköisemmin viesti kuuluu kyseisen puun edustamaan luokkaan [PML06]. Artikkelissaan Pampapathi ja kumppanit vertailivat luokitteluaan kymmenkertaisella ristiinvalidoinnilla naiiviin Bayesilaiseen luokitteluun [PML06]. He havaitsivat suffiksipuun testeissään paitsi tarkemmaksi luokittelijaksi, mutta myös selviytyvän paremmin epätarkoista kynnysarvoista ja tehokkuudeltaan kilpailukykyiseksi. Parantamisen varaa löytyi lähinnä suorituskyvystä ja tutkimusta ollaan aikeissa jatkaa.
8 6 Artikkelin kirjoittajat näkevät paljon mahdollisuuksia hyödyntää suffiksipuita muissakin luokitteluongelmissa kuin sähköpostin suodatuksessa. 3.2 Hahmojen tunnistus biosekvensseistä DNA-molekyylin neljän merkin muodostama aakkosto on roskaposteihin verrattuna yksinkertainen, mutta sekvenssien pituudet jopa miljardeja merkkejä. Ihmisen genomi on runsaan 3 miljardin merkin merkkijono. Peräkkäisten kolmen merkin koodaamat 20 erilaista aminohappoa, joista proteiinit muodostuvat, muodostavat oman aakkostonsa. Ongelma vaikeutuu kun proteiinin koodaus voi alkaa mistä tahansa kohdasta, puhumattakaan tunnettujen valmiiden proteiinien kolmiulotteisten toiminnallisten kohtien löytämisestä. Niinpä tunnistettava hahmo, biosekvenssiin piiloutunut kiinnostava tieto jota etsitään, on usein hankala ennalta määritellä. Niinpä ensin on etsittävä toisteisuutta ja säännöllisyyttä, jotka luonnossa usein liittyvät toiminnallisuuteen [Vil02]. Hahmojen tunnistamisessa biosekvensseistä ongelmanratkaisu etenee hahmoluokkien määrittelyn ja hahmojen kiinnostavuutta mittaavan kelpoisuusfunktion valinnan kautta aineiston algoritmiseen käsittelyyn. Hahmoluokat määritellään monimutkaisuuden mukaan, miten paljon säännöllinen lauseke saa sisältää vaihtelua tai vaikkapa jokerimerkkejä. Kelpoisuusfunktio riippuu täysin tutkimuksen kohteesta, se luokittelee löydetyt hahmot mielenkiintoisuuden mukaan. Kuva 2. Esimerkki proteiinin toiminnallisesta kohdasta [Vil02]. Etsittävä hahmo voidaan kuvata säännöllisellä lausekkeella. Kuvassa 2 on havainnollistettu C-x(2,4)-C-x(3)-[LIVMFYWC]-x(8)-H-x(3,5)-H -lausekkeen
9 7 kuvaamaa proteiinin toiminnallista kohtaa, jollainen tyypillisesti tarttuu sinkkiatomiin (kuvassa Zn). Lausekkeessa x on jokerimerkki eli mikä tahansa aminohappo. Tämä hahmo kuuluu monimutkaiseen hahmoluokkaan, jossa jokerimerkkejä saa olla joko tietty tai joltakin väliltä oleva määrä peräkkäin, sekä lisäksi vaihtoehtoisia merkkejä. Rakentamalla aminohapposekvenssistä erimittaiset jokerimerkit huomioiva suffiksipuu, voidaan haun avulla valita pitkästä merkkijonosta potentiaalisia osia tarkempaan tarkasteluun [Vil02]. 4 Algoritmeja Vuosien saatossa suffiksipuun muodostamiseen on kehitetty lukuisia algoritmeja. Aikavaativuudeltaan ne jakaantuvat kahtia, merkkijonon pituuden suhteen lineaarisiin ja muihin. Lisäksi on omat algoritminsa suffiksitaulukoiden rakentamiseen. 4.1 Aikavaativuudeltaan lineaariset algoritmit Suffiksipuun muodostamisesta merkkijonon pituuden suhteen lineaarisessa ajassa selviytyviä algoritmeja on esitelty kolme, tekijöinään Ukkonen (1995), McCreight (1976) ja Weiner (1973). Algoritmit ovat läheistä sukua toisilleen, mutta Esko Ukkosen artikkelissaan [Ukk95] esittelemä on suosituin. Algoritmi on näistä kolmesta helpoin ymmärtää ja siten myös toteuttaa [TTH05]. Ukkosen algoritmi perustuu puun haarojen kasvattamiseen merkki kerrallaan. Merkkijono käydään kerran läpi alusta loppuun. Alipuiden välillä liikutaan suffiksilinkkien avulla. Kuva 3. Puun muodostaminen sekvenssistä cacao [Ukk95].
10 8 Kuvassa 3 esitellään suffiksipuun muodostaminen vaihe vaiheelta Ukkosen algoritmilla merkkijonosta cacao. Suffiksipuu on jokaisen merkin lisäyksen jälkeen valmis siihen asti käydyn sekvenssin osalta. Jokaisen solmun päivityksen yhteydessä tarvittaessa jaetaan solmu, jolloin luodaan uusi haara ja uusi suffiksilinkki. Uusien merkkien lisääminen puuhun ei sellaisenaan ole lineaarista. Yksinkertaistetusti ilmaistuna päivityksen oheen ja jälkeen tarvitaan lisäksi vaihe, jota kutsutaan puun kanonisaatioksi. Lineaarisilla algoritmeilla suffiksipuu luodaan aina kokonaan ja tietyssä täsmällisessä järjestyksessä. Niinpä tietorakenne vie paljon tilaa ja sen muokkaaminen tai muuntaminen erilaisten hakujen tarpeisiin on hankalaa ellei mahdotonta. Ukkosen algoritmi, kuten muutkin lineaariset algoritmit, toimii nopeasti niin kauan kuin muodostettava puu mahtuu keskusmuistiin. Jos muisti ei riitä ja tallennukseen on käytettävä levyä, algoritmi toimii huonosti koska viittausten paikallisuus (locality of refence) on huono. Solmut ja linkit ovat siis hajallaan joten levynoutoja tulee paljon. Lineaarisista algoritmeista on kehitetty useita erilaisia paranneltuja versioita, jotta ne toimisivat paremmin levylle tallennettaessa, mainittakoon nimeltä TOP-Q ja DynaCluster. Näillä parannelluilla algoritmeillä on hyvin erilaisia lähtökohtia, eivätkä ne ole lineaarisia. Esimerkiksi Huntin algoritmissa (2001) on luovuttu suffiksilinkkien käytöstä viittausten paikallisuuden parantamiseksi. 4.2 Muita algoritmeja Yksi algoritmi suffiksipuun rakentamiseen on Giegerichin ja kumppanien 1995 esittelemä write-only-top-down (wotd). Tehokkuudeltaan algoritmi on keskimäärin O(n log n) ja pahimmillaan O(n 2 ). Algoritmi on yksinkertainen ja viittausten paikallisuuden takia kilpailukykyinen. Puu muodostetaan nimensä mukaisesti ylhäältä alas, eikä muodostettuja solmuja tarvitse puun kasvaessa muuttaa [GKS99]. Wotd-algoritmilla ei yleensä rakenneta heti kokonaista suffiksipuuta, vaan oksa kerrallaan sitä mukaa kuin niitä tarvitaan hauissa ensimmäisen kerran. Tavasta on käytetty kuvaavaa termiä laiska suffiksipuu. Wotd-algoritmin lähestymistapa säästää levytilaa ja on käyttökelpoinen, jos aineistoon tehdään vain vähän tai vain lyhyitä
11 9 hakuja. Wotd-algoritmia ja sen muunnoksia käytetään pohjana useissa muissa, kuten seuraavista lyhenteistä voidaan päätellä [GKS99]. Tian ja kumppanit muodostavat suffiksipuun algoritmilla Partition and Write Only Top Down (PWOTD) [TTH05], joka pohjautuu Giegerich ja kumppanien 2003 esittelemään wotdeager-algoritmiin. PWOTD on kaksivaiheinen, ensin muodostetaan yhdellä läpikäynnillä ositus (partition) aakkoston jokaisen merkin mukaan. Esimerkiksi kuvan 4 merkkijonossa merkki T sijaitsee paikoissa {1,2,5}, kun numerointi on aloitettu nollasta. Vaihe ei ole vaativa, osituksia syntyy yhtä monta kuin merkkijonossa esiintyy merkkejä. Seuraavaksi sovelletaan wotdeager-algoritmia jokaiseen ositukseen. Kuva 4. Suffiksipuu ja taulukko johon se on talletettu PWOTD-algoritmilla [TTH05]. Puun fyysisenä tallennusrakenteena käytetään taulukkoa. Rakennusvaiheessa tarvitaan lisäksi kolme aputaulukkoa, joista yksi toimii pinona. Wotdeageralgoritmissa tarkastellaan ensin kunkin merkin seuraajia, merkin T tapauksessa merkkejä sijainneissa {2,3,6} eli {T,A,A}. Seuraajat järjestetään aakkosjärjestykseen ja lasketaan eri merkkien esiintymien määrät. Koska A seuraa merkkiä T kahdesti, nähdään että puu haarautuu kahtia T :n lapsisolmussa A. Lisäksi voidaan päätellä, että T :n lapsisolmu T on lehti. Läpikäymällä ositukset ja haarautumiset ylhäältä alas, saadaan suffiksipuu tallennettua taulukkoon.
12 10 PWOTD-taulukossa haarautuville solmuille on varattu kaksi paikkaa ja lehdille yksi, kuten kuvassa neljä. Edellä esimerkissä tarkasteltu haarautuva T löytyy kohdista 2 ja 3, joista jälkimmäisestä voidaan lukea että luettelo sen lapsista alkaa kohdasta 7. Luettelosta löytyy ensin haarautuva A ja sitten merkkijonon paikasta 2 merkillä T alkava lehti. Tämä viimeinen lapsi on merkittu R-kirjaimella luettelon päättymisen merkiksi. PWOTD on viittausten paikallisuudessa hyvä, koska puuta kasvatetaan useimmiten vain lisäämällä taulukon perään lapsia ja lehtiä. Myös kolme apurakennetta on suunniteltu siten, että niiden puskurointi voidaan tehdä järkevästi ja hallitusti. Jos syötteenä annetut merkkijonot ovat lyhyitä ja kaikki rakenteet mahtuvat muistiin, voidaan ositusvaihe jättää kokonaan pois. 5 Algoritmien vertailua ja tutkimustuloksia Lineaarisia algoritmeja on toki aikanaan vertailtu toisiinsa [GiK97], mutta vasta aineistojen kasvaessa tehokkuus ja tilan käyttö ovat nousseet tarkemman tarkastelun kohteeksi. Algoritmeista suffiksipuun muodostamiseksi ei ole pulaa, mutta puolueettomia vertailutuloksia ei ole saatavilla. Kukin tutkija luonnollisesti esittää oman algoritminsa tai jonkin parannusehdotuksen aikaisempiin. Artikkeli jossa jokin algoritmi esitellään, keskittyy yleensä pelkkään teoriaan tai johonkin tiettyyn ongelmakenttään kuten biosekvensseihin. Edellä esitelty PWOTD-algoritmi on osa Top-Down Disk-based -tekniikkaa (TDD), jonka toinen yhtä tärkeä osa liittyy puskurin hallinnointiin [TTH05]. Puskurin hallinta on tärkeää, koska suffiksipuun rakennusalgoritmi voi vaatia kertaluokkaa enemmän tilaa kuin alkuperäinen merkkijono. Suffiksipuun talletusrakenne vie PWOTD-algoritmillä tyypillisesti 8-12 kertaa enemmän tilaa kuin merkkijono. Seuraavaksia esitellään Tianin ja kumppanien tekemää TDD-tekniikan ja samalla PWOTD-algoritmin vertailua lukuisiin muihin algoritmeihin erilaisilla aineistoilla. Johtopäätöksenä voidaan todeta, että TDD on ensimmäinen todella laajojen merkkijonojen käsittelyyn pystyvä tekniikka.
13 11 Kuva 5. Neljän algoritmin suoritusaika muistissa eri testiaineistoilla [TTH05]. Kuvassa 5 on vertailu neljän eri algoritmin suorituskyvystä, kun suffiksipuun rakennus tapahtuu muistissa. Yksikirjaimiset lyhenteet tulevat nimistä TDD, Ukkonen, ja McCreigt, lisäksi mukana on suffiksitaulukon muodostava Deep- Shallow. Itse asiassa TDD-tekniikka ei ole muistissa tarpeen, joten se yksinkertaistuu PWOTD:ksi. Merkkijonoaineiston nimen lopussa oleva numero kertoo aakkoston koon. Aineistoista keinotekoisia ovat unif-alkuiset, muut edustavat DNA:ta, englanninkielistä tekstiä ja proteiinia. Eniten aikaa kuluu muistihuteihin (L2 miss). Kuvasta nähdään lineaarisisten algoritmien suoritusajan dramaattinen kasvu aakkoston koon kasvaessa, ja ettei aika muilla juuri muutu. Taulukko 1. Neljän algoritmin suoritusaika levyllä eri testiaineistoilla [TTH05]. Merkkejä Hunt Kerroin TDD Kerroin DC3 Aineisto (10 6 ) (min) Hunt/TDD (min) DC3/TDD (min) UniProt/SwissProt-proteiini 53 13,95 5 2,78 4,5 12,6 Osa ihmisen kromosomia ,47 5,7 2,02 6,3 12,67 Gutenberg hakemisto ,5 3,7 6,03 2,3 13,78 TrEMBL-proteiini ,7 7,4 32 3,2 102,78 Ihmisen kromosomi ,5 5,5 17,83 4,2 74,57 Gutenbergin kokoelma ,3 9,9 46,67 2,6 120,53 Ihmisen genomi h Taulukossa 1 on vertailu kolmen algoritmin suoritusajoista, kun suffiksipuu muodostetaan levyllä: Hunt, TDD ja DC3. Huntin algoritmia on tähän asti pidetty
14 12 parhaana levyllä suffiksipuun muodostavana algoritmina. On siis merkittävä tulos, että koko Gutenbergin kokoelman käsittävällä tekstiaineistolla TDD on miltei kymmenen kertaa nopeampi kuin Hunt. Eikä ole vähäpätöinen tieto sekään, että TDD on samaisella aineistolla 2,6 kertaa nopeampi kuin pelkän suffiksitaulukon muodostava DC3. Ihmisen genomista eli ihmisen kaikesta DNA:sta muut kuin TDD eivät selvinneet järkevässä ajassa [TTH05]. 6 Yhteenveto Suffiksipuu on tietorakenne, johon on talletettu merkkijonon kaikki loppuosat. Ollakseen hyvin yksinkertainen tietorakenne, on suffiksipuu käyttökelpoinen monen käytännön ongelman ratkaisussa. Vaikka kyseessä on vanha keksintö, se on sovellettavissa moniin nykyajan sekvensseihin, merkkijonoihin ja teksteihin liittyviin ongelmiin. Tiedon määrän kasvaessa ovat erilaiset hahmojentunnistus- ja suodatusongelmat arkipäivää monella alalla. Suffiksipuun rakentamiseksi on esitelty kymmeniä algoritmeja usean vuosikymmenen aikana. Jo varhain esiteltyjen merkkijonon pituuden suhteen aikavaativuudeltaan lineaariten algoritmien asema on ollut vahva niiden yksinkertaisuuden ja näennäisen tehokkuuden takia. Kokonaisen suffiksipuun rakentaminen pitkästä merkkijonosta on näiden algoritmien avulla kuitenkin työlästä, joten suffiksipuita on hyödynnetty melko vähän suhteessa niiden potentiaaliin. Tehokkuuden tutkimus vaikuttaisi aiemmin rajoittuneen lähinnä matemaattisiin todistuksiin. Algoritmien käyttökelpoisuutta ongelmanratkaisuun suurilla aineistoilla on ryhdytty tutkimaan vasta viimeaikoina. Taustalla lienee yleismaailmallinen tiedon määrän kasvu ja erilaisten käytännön merkkijono-ongelmien kirjon laajentuminen. Artikkelissaan Tian ja kumppanit selvittävät perinpohjaisesti suffiksipuiden rakennusta eri algoritmeilla ja erittäin suurilla aineistoilla. Heidän tutkimuksissaan todetaan puskurinhallinnan olevan algoritmin aikavaativuutta tärkeämpää, kun puu muodostetaan levyllä eikä muistissa. Nyt isokin suffiksipuu voidaan vihdoin rakentaa järkevässä ajassa. Tian ja kumppanit pystyivät ensimmäisinä rakentamaan suffiksipuun ihmisen genomista, aikaa kului vaatimattomat 30 tuntia.
15 13 7 Lähteet GiK97 R. Giegerich, S. Kurtz, From Ukkonen to McCreight and Weiner: A Unifying View of Linear-Time Suffix Tree Construction. Algorithmica, 19 (3), , GKS99 R. Giegerich, S. Kurtz, S. Stoye: Efficient Implementation of Lazy Suffix Trees. WAE '99: Proceedings of the 3rd International Workshop on Algorithm Engineering, 1999, Ukk95 Ukkonen E., On line construction of suffix trees. Algorithmica, 14(3), , PML06 Pampapathi R., Mirkin B. and Levene M., A suffix tree approach to anti-spam filtering. Machine Learning, Springer, Published online: 27 July TTH05 Tian, Y., Tata, S., Hankins, R.A., Patel, J.M., Practical methods for constructing suffix trees. The VLDB Journal 14, 3 (Sep. 2005), Vil02 Vilo J., Pattern Discovery from Biosequences. PhD Thesis, Series of Publications A, Report A Helsinki, November 2002
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ätiedotAlgoritmit 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ätiedotLuku 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ätiedotAlgoritmit 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ätiedotA274101 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ätiedotTietorakenteet, 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ätiedotHakupuut. 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ätiedotAlgoritmit 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ätiedotv 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ätiedotGraafit ja verkot. Joukko solmuja ja joukko järjestämättömiä solmupareja. eli haaroja. Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria
Graafit ja verkot Suuntamaton graafi: eli haaroja Joukko solmuja ja joukko järjestämättömiä solmupareja Suunnattu graafi: Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria Haaran päätesolmut:
LisätiedotAlgoritmit 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ätiedotAlgoritmit 1. Luento 10 Ke Timo Männikkö
Algoritmit 1 Luento 10 Ke 14.2.2018 Timo Männikkö Luento 10 Algoritminen ongelmanratkaisu Suunnittelumenetelmät Raaka voima Järjestäminen eli lajittelu Kuplalajittelu Lisäyslajittelu Valintalajittelu Permutaatiot
LisätiedotAlgoritmit 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ätiedotLuku 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ätiedotAlgoritmit 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ätiedotDatatä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ätiedotAlgoritmit 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ätiedotAlgoritmit 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ätiedot1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:
Tietorakenteet, laskuharjoitus 10, ratkaisuja 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa: SamaLuku(T ) 2 for i = 1 to T.length 1 3 if T [i] == T [i + 1] 4 return True 5 return
LisätiedotEsimerkkejä vaativuusluokista
Esimerkkejä vaativuusluokista Seuraaville kalvoille on poimittu joitain esimerkkejä havainnollistamaan algoritmien aikavaativuusluokkia. Esimerkit on valittu melko mielivaltaisesti laitoksella tehtävään
LisätiedotPinot, 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ätiedotAlgoritmit 1. Luento 3 Ti Timo Männikkö
Algoritmit 1 Luento 3 Ti 17.1.2017 Timo Männikkö Luento 3 Algoritmin analysointi Rekursio Lomituslajittelu Aikavaativuus Tietorakenteet Pino Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 2/27 Algoritmien
LisätiedotKuva 1: J+-puun rakenne [HXS09].
Johdanto Tietotekniikka on kehittynyt viime vuosikymmenten aikana nopeata vauhtia. Tämä on näkynyt niin tietokoneiden tehoissa kuin myös hinnoissa. Myös tietokoneiden keskusmuistit ovat kasvaneet ja ovat
LisätiedotOngelma(t): Miten merkkijonoja voidaan hakea tehokkaasti? Millaisia hakuongelmia liittyy bioinformatiikkaan?
Ongelma(t): Miten merkkijonoja voidaan hakea tehokkaasti? Millaisia hakuongelmia liittyy bioinformatiikkaan? 2012-2013 Lasse Lensu 2 Ihmisen, eläinten ja kasvien hyvinvoinnin kannalta nykyaikaiset mittaus-,
LisätiedotAlgoritmi 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ätiedotAlgoritmit 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ätiedot3. 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ätiedot811312A 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ätiedot811312A Tietorakenteet ja algoritmit, 2014-2015, Harjoitus 7, ratkaisu
832A Tietorakenteet ja algoritmit, 204-205, Harjoitus 7, ratkaisu Hajota ja hallitse-menetelmä: Tehtävä 7.. Muodosta hajota ja hallitse-menetelmää käyttäen algoritmi TULOSTA_PUU_LASKEVA, joka tulostaa
Lisätiedot58131 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ätiedotAlgoritmit 1. Luento 13 Ti 23.2.2016. Timo Männikkö
Algoritmit 1 Luento 13 Ti 23.2.2016 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ätiedot4 Tehokkuus ja algoritmien suunnittelu
TIE-20100 Tietorakenteet ja algoritmit 52 4 Tehokkuus ja algoritmien suunnittelu Tässä luvussa pohditaan tehokkuuden käsitettä ja esitellään kurssilla käytetty kertaluokkanotaatio, jolla kuvataan algoritmin
LisätiedotAlgoritmit 1. Luento 1 Ti Timo Männikkö
Algoritmit 1 Luento 1 Ti 10.1.2017 Timo Männikkö Luento 1 Algoritmi Algoritmin toteutus Ongelman ratkaiseminen Algoritmin tehokkuus Algoritmin suoritusaika Algoritmin analysointi Algoritmit 1 Kevät 2017
LisätiedotAlgoritmit 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ätiedotAlgoritmit 2. Luento 13 Ti Timo Männikkö
Algoritmit 2 Luento 13 Ti 30.4.2019 Timo Männikkö Luento 13 Simuloitu jäähdytys Merkkijonon sovitus Horspoolin algoritmi Ositus ja rekursio Rekursion toteutus Algoritmit 2 Kevät 2019 Luento 13 Ti 30.4.2019
Lisätiedot58131 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ätiedotlä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ätiedotAlgoritmit 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ätiedotStabiloivat synkronoijat ja nimeäminen
Stabiloivat synkronoijat ja nimeäminen Mikko Ajoviita 2.11.2007 Synkronoija Synkronoija on algoritmi, joka muuntaa synkronoidun algoritmin siten, että se voidaan suorittaa synkronoimattomassa järjestelmässä.
LisätiedotTietorakenteet 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ätiedotAlgoritmit 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ätiedotNopea kertolasku, Karatsuban algoritmi
Nopea kertolasku, Karatsuban algoritmi Mikko Männikkö 16.8.2004 Lähde: ((Gathen and Gerhard 1999) luku II.8) Esityksen kulku Algoritmien analysointia (1), (2), (3), (4) Klassinen kertolasku Parempi tapa
LisätiedotTietorakenteet 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ätiedotMukautuvat järjestämisalgoritmit
1 Mukautuvat järjestämisalgoritmit Riku Saikkonen TIK-päivä, 17. 1. 2013 2 Mukautuva järjestäminen minkä tahansa vertailuihin perustuvan järjestämisalgoritmin täytyy tehdä pahimmassa tapauksessa vähintään
LisätiedotMiten 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ätiedot58131 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ätiedotLuku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti
Luku 6 Dynaaminen ohjelmointi Dynaamisessa ohjelmoinnissa on ideana jakaa ongelman ratkaisu pienempiin osaongelmiin, jotka voidaan ratkaista toisistaan riippumattomasti. Jokaisen osaongelman ratkaisu tallennetaan
LisätiedotAlgoritmit 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ätiedot811312A 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ätiedotTehtävä 2: Loppuosataulukko
Tehtävä 2: Loppuosataulukko Tutustu tarkoin seuraavaan tekstiin ja vastaa sitä hyväksi käyttäen tehtävän loppuosassa esitettyihin viiteen kysymykseen. Annetun merkkijonon (ns. hahmo) esiintymän haku pidemmästä
LisätiedotAlgoritmit 1. Luento 10 Ke 11.2.2015. Timo Männikkö
Algoritmit 1 Luento 10 Ke 11.2.2015 Timo Männikkö Luento 10 Algoritminen ongelman ratkaisu Suunnittelumenetelmät Raaka voima Järjestäminen eli lajittelu Kuplalajittelu Väliinsijoituslajittelu Valintalajittelu
LisätiedotAlgoritmit 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ätiedot1.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ätiedotLaskennallinen menetelmä puun biomassan ja oksien kokojakauman määrittämiseen laserkeilausdatasta
Laskennallinen menetelmä puun biomassan ja oksien kokojakauman määrittämiseen laserkeilausdatasta Pasi Raumonen, Mikko Kaasalainen ja Markku Åkerblom Tampereen teknillinen ylipisto, Matematiikan laitos
Lisätiedot811312A 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ätiedotMäärittelydokumentti
Määrittelydokumentti Aineopintojen harjoitustyö: Tietorakenteet ja algoritmit (alkukesä) Sami Korhonen 014021868 sami.korhonen@helsinki. Tietojenkäsittelytieteen laitos Helsingin yliopisto 23. kesäkuuta
Lisätiedot811312A 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ätiedotAlgoritmit 2. Luento 1 Ti Timo Männikkö
Algoritmit 2 Luento 1 Ti 14.3.2017 Timo Männikkö Luento 1 Algoritmi Algoritmin valinta Algoritmin analysointi Algoritmin suoritusaika Peruskertaluokkia Kertaluokkamerkinnät Kertaluokkien ominaisuuksia
Lisätiedot1.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ätiedotE. Oja ja H. Mannila Datasta Tietoon: Luku 2
2. DATASTA TIETOON: MITÄ DATAA; MITÄ TIETOA? 2.1. Data-analyysin ongelma Tulevien vuosien valtava haaste on digitaalisessa muodossa talletetun datan kasvava määrä Arvioita: Yhdysvaltojen kongressin kirjasto
LisätiedotOikeasta 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ätiedotOULUN YLIOPISTO, BIOLOGIAN LAITOS Puututkimus
OULUN YLIOPISTO, BIOLOGIAN LAITOS Puututkimus Puu on yksilö, lajinsa edustaja, eliöyhteisönsä jäsen, esteettinen näky ja paljon muuta. Tässä harjoituksessa lähestytään puuta monipuolisesti ja harjoitellaan
LisätiedotAVL-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ätiedotJohdatus 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ätiedot14 Tasapainotetut puurakenteet
TIE-20100 Tietorakenteet ja algoritmit 308 14 Tasapainotetut puurakenteet Binäärihakupuu toteuttaa kaikki dynaamisen joukon operaatiot O(h) ajassa Kääntöpuolena on, että puu voi joskus litistyä listaksi,
LisätiedotAlgoritmit 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ätiedotB + -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ätiedotLuku 3. Listankäsittelyä. 3.1 Listat
Luku 3 Listankäsittelyä Funktio-ohjelmoinnin tärkein yksittäinen tietorakenne on lista. Listankäsittely on paitsi käytännöllisesti oleellinen aihe, se myös valaisee funktio-ohjelmoinnin ideaa. 3.1 Listat
LisätiedotAlgoritmit 1. Luento 11 Ti Timo Männikkö
Algoritmit 1 Luento 11 Ti 14.2.2017 Timo Männikkö Luento 11 Algoritminen ongelmanratkaisu Osittaminen Lomituslajittelu Lomituslajittelun vaativuus Rekursioyhtälöt Pikalajittelu Algoritmit 1 Kevät 2017
LisätiedotAlgoritmit 2. Luento 8 To Timo Männikkö
Algoritmit 2 Luento 8 To 4.4.2019 Timo Männikkö Luento 8 Algoritmien analysointi Algoritmien suunnittelu Rekursio Osittaminen Rekursioyhtälöt Rekursioyhtälön ratkaiseminen Master-lause Algoritmit 2 Kevät
LisätiedotTietorakenteet ja algoritmit Hakurakenteet Ari Korhonen
Tietorakenteet ja algoritmit Hakurakenteet Ari Korhonen 27.10. & 3.11.2015 Tietorakenteet ja algoritmit - syksy 2015 1 8. HAKURAKENTEET (dictionaries) 8.1 Haku (vrt. sanakirjahaku) 8.2 Listat tallennusrakenteina
LisätiedotAlgoritmit 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ätiedot1 Erilaisia tapoja järjestää
TIE-20100 Tietorakenteet ja algoritmit 1 1 Erilaisia tapoja järjestää Käsitellään seuraavaksi järjestämisalgoritmeja, jotka perustuvat muihin kuin vertailuun alkioiden oikean järjestyksen saamiseksi. Lisäksi
LisätiedotTKT20001 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ätiedot10. 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ätiedot58131 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ätiedotPCR - tekniikka elintarvikeanalytiikassa
PCR - tekniikka elintarvikeanalytiikassa Listerian, Salmonellan ja kampylobakteerien tunnistus elintarvikkeista ja rehuista 29.11.2012 Eva Fredriksson-Lidsle Listeria monocytogenes Salmonella (spp) Campylobacter
LisätiedotTIEA241 Automaatit ja kieliopit, syksy 2015. Antti-Juhani Kaijanaho. 3. joulukuuta 2015
TIEA241 Automaatit ja, syksy 2015 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 3. joulukuuta 2015 Sisällys Formaalisti Määritelmä Nelikko G = (V, Σ, P, S) on kontekstiton kielioppi (engl. context-free
LisätiedotJohnson, A Theoretician's Guide to the Experimental Analysis of Algorithms.
Kokeellinen algoritmiikka (3 ov) syventäviä opintoja edeltävät opinnot: ainakin Tietorakenteet hyödyllisiä opintoja: ASA, Algoritmiohjelmointi suoritus harjoitustyöllä (ei tenttiä) Kirjallisuutta: Johnson,
Lisätiedot5.1 Semanttisten puiden muodostaminen
Luku 5 SEMNTTISET PUUT 51 Semanttisten puiden muodostaminen Esimerkki 80 Tarkastellaan kysymystä, onko kaava = (( p 0 p 1 ) (p 1 p 2 )) toteutuva Tätä voidaan tutkia päättelemällä semanttisesti seuraavaan
Lisätiedot7. 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ätiedot58131 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ätiedotAlgoritmit 1. Luento 2 Ke Timo Männikkö
Algoritmit 1 Luento 2 Ke 11.1.2017 Timo Männikkö Luento 2 Algoritmin esitys Algoritmien analysointi Suoritusaika Asymptoottinen kertaluokka Peruskertaluokkia NP-täydelliset ongelmat Algoritmit 1 Kevät
LisätiedotEsimerkkejä polynomisista ja ei-polynomisista ongelmista
Esimerkkejä polynomisista ja ei-polynomisista ongelmista Ennen yleisempiä teoriatarkasteluja katsotaan joitain tyypillisiä esimerkkejä ongelmista ja niiden vaativuudesta kaikki nämä ongelmat ratkeavia
LisätiedotBinää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ätiedotLisätään avainarvo 6, joka mahtuu lehtitasolle:
Helsingin Yliopisto, Tietojenkäsittelytieteen laitos Tietokannan hallinta, kurssikoe 11.6.2004, J. Lindström Ratkaisuehdotuksia 1. Hakemistorakenteet, 15p. Tutkitaan tyhjää B+-puuta, jossa jokaiselle hakemistosivulle
LisätiedotMerkkijonojoukkojen louhinta kattavuusrajoitteilla
Merkkijonojoukkojen louhinta kattavuusrajoitteilla Niko Välimäki Helsinki 7.2.2008 Seminaarityö HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Sisältö i 1 Johdanto 1 2 Määritelmiä 1 2.1 Louhintaongelmat.............................
LisätiedotAlgoritmit 1. Demot Timo Männikkö
Algoritmit 1 Demot 1 25.-26.1.2017 Timo Männikkö Tehtävä 1 (a) Algoritmi, joka laskee kahden kokonaisluvun välisen jakojäännöksen käyttämättä lainkaan jakolaskuja Jaettava m, jakaja n Vähennetään luku
Lisätiedot58131 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ätiedotLUMA Suomi kehittämisohjelma 8.10.2015 14:53 Joustava yhtälönratkaisu Matemaattinen Ohjelmointi ja Yhtälönratkaisu
(MOJYR) Sisällysluettelo (MOJYR)... 1 1. Taustaa... 1 2. MOJYR-ohjelma... 2 2.1 Ohjelman asentaminen... 2 2.2 Käyttöliittymä... 2 3. Puumalli... 3 4. MOJYR-ohjelman ominaisuudet... 5 4.1 Yhtälön muodostaminen...
Lisätiedot811312A 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ätiedotDBN Mitä sillä tekee? Dynaamisten Bayes-verkkojen määrittely aikasarja-analyysissä Janne Toivola jtoivola@iki.fi
DBN Mitä sillä tekee? Dynaamisten Bayes-verkkojen määrittely aikasarja-analyysissä Janne Toivola jtoivola@iki.fi Historiaa Bayesin kaavan hyödyntäminen BN-ohjelmistoja ollut ennenkin Tanskalaisten Hugin
LisätiedotStabilointi. arvosana. arvostelija. Marja Hassinen
hyväksymispäivä arvosana arvostelija Stabilointi Marja Hassinen Helsinki 28.10.2007 Hajautetut algoritmit -seminaari HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Sisältö 1 1 Johdanto 1 2 Resynkroninen
LisätiedotKysymyksiä 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ätiedotSilmukkaoptimoinnista
sta TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 8. joulukuuta 2009 Sisällys Sisällys Seuraava deadline Vaihe F maanantai 14.12. klo 12 rekisteriallokaatio Arvostelukappale
LisätiedotRatkaisu. Tulkitaan de Bruijnin jonon etsimiseksi aakkostossa S := {0, 1} sanapituudelle n = 4. Neljän pituisia sanoja on N = 2 n = 16 kpl.
iskreetti matematiikka, syksy 00 arjoitus, ratkaisuista. seta 8 nollaa ja 8 ykköstä renkaaksi niin, että jokainen yhdistelmä 0000, 000,..., esiintyy täsmälleen kerran. Vihje: Tulkitse de ruijnin jonon
LisätiedotAlgoritmit 2. Luento 13 Ti Timo Männikkö
Algoritmit 2 Luento 13 Ti 2.5.2017 Timo Männikkö Luento 13 Merkkijonon sovitus Horspoolin algoritmi Laskennallinen vaativuus Päätösongelmat Epädeterministinen algoritmi Vaativuusluokat NP-täydellisyys
LisätiedotEpädeterministisen Turingin koneen N laskentaa syötteellä x on usein hyödyllistä ajatella laskentapuuna
Epädeterministisen Turingin koneen N laskentaa syötteellä x on usein hyödyllistä ajatella laskentapuuna. q 0 x solmuina laskennan mahdolliset tilanteet juurena alkutilanne lehtinä tilanteet joista ei siirtymää,
LisätiedotLuento 2: Tiedostot ja tiedon varastointi
HELIA 1 (19) Luento 2: Tiedostot ja tiedon varastointi Muistit... 2 Päämuisti (Primary storage)... 2 Apumuisti (Secondary storage)... 2 Tiedon tallennuksen yksiköitä... 3 Looginen taso... 3 Fyysinen taso...
LisätiedotSatunnaisalgoritmit. Topi Paavilainen. Laskennan teorian opintopiiri HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos
Satunnaisalgoritmit Topi Paavilainen Laskennan teorian opintopiiri HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Helsinki, 23. helmikuuta 2014 1 Johdanto Satunnaisalgoritmit ovat algoritmeja, joiden
Lisätiedot