Suffiksipuut. Satu Kokko. Tietokannat nyt! -seminaari Helsinki HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Koko: px
Aloita esitys sivulta:

Download "Suffiksipuut. Satu Kokko. Tietokannat nyt! -seminaari Helsinki 24.10.2006 HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos"

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 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

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

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 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

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

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

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

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

Graafit 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. 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ä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

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 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ä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

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

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

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

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

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

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

1. (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ätiedot

Esimerkkejä vaativuusluokista

Esimerkkejä vaativuusluokista Esimerkkejä vaativuusluokista Seuraaville kalvoille on poimittu joitain esimerkkejä havainnollistamaan algoritmien aikavaativuusluokkia. Esimerkit on valittu melko mielivaltaisesti laitoksella tehtävään

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 1. Luento 3 Ti Timo Männikkö

Algoritmit 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ätiedot

Kuva 1: J+-puun rakenne [HXS09].

Kuva 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ätiedot

Ongelma(t): Miten merkkijonoja voidaan hakea tehokkaasti? Millaisia hakuongelmia liittyy bioinformatiikkaan?

Ongelma(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ä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

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

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

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

811312A Tietorakenteet ja algoritmit, 2014-2015, Harjoitus 7, ratkaisu

811312A 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ä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

Algoritmit 1. Luento 13 Ti 23.2.2016. Timo Männikkö

Algoritmit 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ätiedot

4 Tehokkuus ja algoritmien suunnittelu

4 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ätiedot

Algoritmit 1. Luento 1 Ti Timo Männikkö

Algoritmit 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ä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

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 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ä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

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

Stabiloivat synkronoijat ja nimeäminen

Stabiloivat 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ä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

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

Nopea kertolasku, Karatsuban algoritmi

Nopea 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ä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

Mukautuvat järjestämisalgoritmit

Mukautuvat 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ä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

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

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

Luku 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ä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

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

Tehtävä 2: Loppuosataulukko

Tehtä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ätiedot

Algoritmit 1. Luento 10 Ke 11.2.2015. Timo Männikkö

Algoritmit 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ä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

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

Laskennallinen menetelmä puun biomassan ja oksien kokojakauman määrittämiseen laserkeilausdatasta

Laskennallinen 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ä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

Määrittelydokumentti

Määrittelydokumentti Määrittelydokumentti Aineopintojen harjoitustyö: Tietorakenteet ja algoritmit (alkukesä) Sami Korhonen 014021868 sami.korhonen@helsinki. Tietojenkäsittelytieteen laitos Helsingin yliopisto 23. kesäkuuta

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

Algoritmit 2. Luento 1 Ti Timo Männikkö

Algoritmit 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ä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

E. Oja ja H. Mannila Datasta Tietoon: Luku 2

E. 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ä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

OULUN YLIOPISTO, BIOLOGIAN LAITOS Puututkimus

OULUN 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ä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

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

14 Tasapainotetut puurakenteet

14 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ä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

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

Luku 3. Listankäsittelyä. 3.1 Listat

Luku 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ätiedot

Algoritmit 1. Luento 11 Ti Timo Männikkö

Algoritmit 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ätiedot

Algoritmit 2. Luento 8 To Timo Männikkö

Algoritmit 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ätiedot

Tietorakenteet ja algoritmit Hakurakenteet Ari Korhonen

Tietorakenteet 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ä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

1 Erilaisia tapoja järjestää

1 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ä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

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

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

PCR - tekniikka elintarvikeanalytiikassa

PCR - 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ätiedot

TIEA241 Automaatit ja kieliopit, syksy 2015. Antti-Juhani Kaijanaho. 3. joulukuuta 2015

TIEA241 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ätiedot

Johnson, A Theoretician's Guide to the Experimental Analysis of Algorithms.

Johnson, 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ätiedot

5.1 Semanttisten puiden muodostaminen

5.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ä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

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

Algoritmit 1. Luento 2 Ke Timo Männikkö

Algoritmit 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ätiedot

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

Esimerkkejä 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ä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

Lisätään avainarvo 6, joka mahtuu lehtitasolle:

Lisä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ätiedot

Merkkijonojoukkojen louhinta kattavuusrajoitteilla

Merkkijonojoukkojen 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ätiedot

Algoritmit 1. Demot Timo Männikkö

Algoritmit 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ä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

LUMA Suomi kehittämisohjelma 8.10.2015 14:53 Joustava yhtälönratkaisu Matemaattinen Ohjelmointi ja Yhtälönratkaisu

LUMA 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ä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

DBN 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 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ätiedot

Stabilointi. arvosana. arvostelija. Marja Hassinen

Stabilointi. 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ä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

Silmukkaoptimoinnista

Silmukkaoptimoinnista 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ätiedot

Ratkaisu. Tulkitaan de Bruijnin jonon etsimiseksi aakkostossa S := {0, 1} sanapituudelle n = 4. Neljän pituisia sanoja on N = 2 n = 16 kpl.

Ratkaisu. 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ätiedot

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 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ätiedot

Epä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 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ätiedot

Luento 2: Tiedostot ja tiedon varastointi

Luento 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ätiedot

Satunnaisalgoritmit. Topi Paavilainen. Laskennan teorian opintopiiri HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Satunnaisalgoritmit. 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