Algoritmit 2. Luento 4 Ke Timo Männikkö

Samankaltaiset tiedostot
Algoritmit 2. Luento 4 To Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

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

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 1. Luento 6 Ke Timo Männikkö

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

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

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.

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

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmit 1. Luento 4 Ke Timo Männikkö

Kysymyksiä koko kurssista?

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 1. Luento 12 Ke Timo Männikkö

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Tietorakenteet, laskuharjoitus 7, ratkaisuja

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Hajautus. operaatiot insert ja search pyritään tekemään erittäin nopeiksi

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

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

811312A Tietorakenteet ja algoritmit V Hash-taulukot ja binääriset etsintäpuut

5. Hajautus. Tarkastellaan edelleen sivulla 161 esitellyn joukkotietotyypin toteuttamista

Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 10 To Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

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

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

Algoritmit 2. Luento 13 Ti Timo Männikkö

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Algoritmit 2. Luento 11 Ti Timo Männikkö

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

Algoritmit 2. Luento 9 Ti Timo Männikkö

Muita linkattuja rakenteita

Algoritmit 2. Luento 14 To Timo Männikkö

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

A TIETORAKENTEET JA ALGORITMIT

Binäärihaun vertailujärjestys

B + -puut. Kerttu Pollari-Malmi

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

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

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

1.1 Tavallinen binäärihakupuu

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

Algoritmit 1. Luento 14 Ke Timo Männikkö

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

Tietorakenteet ja algoritmit. Hajautus. Ari Korhonen Tietorakenteet ja algoritmit - syksy

A TIETORAKENTEET JA ALGORITMIT

9.3 Algoritmin valinta

Algoritmit 1. Luento 10 Ke Timo Männikkö

Tietorakenteet ja algoritmit

Hajautusrakenteet. R&G Chapter Tietokannan hallinta, kevät 2006, Jan 1

Algoritmit 1. Luento 3 Ti Timo Männikkö

TKHJ:ssä on yleensä komento create index, jolla taululle voidaan luoda hakemisto

Ohjelmoinnin perusteet Y Python

Hajautusrakenteet. Hajautukseen perustuvat tiedostorakenteet. Hajautukseen perustuvat tiedostorakenteet. Hajautukseen perustuvat tiedostorakenteet

Datatähti 2019 loppu

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Käsitellyt hakemistot (hajautus, ISAM): hakemisto-osa on staattinen eli ei muutu muuten kuin uudelleenorganisoinnissa.

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

Algoritmit 1. Luento 1 Ti Timo Männikkö

Algoritmit 2. Luento 10 To Timo Männikkö

Sekvenssi: kokoelma peräkkäisiä alkioita (lineaarinen

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

D B. B+ -puun tasapainotus poistossa. B+ -puun tasapainotus poistossa. Poistot. B+ -puun tasapainotus poistossa. B+ -puun tasapainotus poistossa

B-puu. 3.3 Dynaamiset hakemistorakenteet

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

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

4. Joukkojen käsittely

Luku 8. Aluekyselyt. 8.1 Summataulukko

CS-A1140 Tietorakenteet ja algoritmit

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

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

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

Kierros 5: Hajautus. Tommi Junttila. Aalto University School of Science Department of Computer Science

Kierros 4: Binäärihakupuut

7. Tasapainoitetut hakupuut

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

Algoritmit 1. Luento 10 Ke Timo Männikkö

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

Tieto- ja tallennusrakenteet

Luento 2: Tiedostot ja tiedon varastointi

CS-A1140 Tietorakenteet ja algoritmit

5. Hash-taulut ja binääriset etsintäpuut

1 Puu, Keko ja Prioriteettijono

Tarvitaanko adaptoituvia tietorakenteita

Transkriptio:

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 Ke 22.3.2017 2/30

Hajautus Tallennettavia alkioita n Taulukon koko m (vähintään n, jotta kaikki alkiot mahtuvat) Hajautusfunktio h : {mahdolliset avaimet} {0, 1,..., m 1} Avainta a vastaavan alkion indeksi on h(a) (avaimen a kotiosoite) Mahdollisia avaimia paljon enemmän kuin m Usealla avaimella on sama kotisoite Algoritmit 2 Kevät 2017 Luento 4 Ke 22.3.2017 3/30

Hajautus Yhteentörmäys: Jos a b, mutta h(a) = h(b) Sanotaan, että a ja b ovat synonyymejä Synonyymeja ei voida tallentaa kaikkia samaan paikkaan Yhteentörmäykset täytyy käsitellä jotenkin Algoritmit 2 Kevät 2017 Luento 4 Ke 22.3.2017 4/30

Hajautusfunktio Hyvä hajautusfunktio: Mahdollisimman vähän yhteentörmäyksiä Jos todellisista avaimista ei tiedetä mitään etukäteen, yhteentörmäyksiä ei voi välttää Hajauttaa alkiot tasaisesti taulukkoon Vaikeaa, jos todellisten avaimien jakaumaa ei tunneta Helppo laskea Helppo ohjelmoida, nopea laskea (mielellään vakioaikainen Θ(1)) Algoritmit 2 Kevät 2017 Luento 4 Ke 22.3.2017 5/30

Yhteentörmäysten käsittely Ketjutus: Jokaiselle kotiosoitteelle lineaarinen lista Hajautustaulukossa osoittimet listojen ensimmäisiin alkioihin Algoritmit yksinkertaisia lista-algoritmeja Mutta: Tarvitaan aputilaa (listat) Avoin osoitteenmuodostus: Tallennukseen käytetään vain hajautustaulukkoa Algoritmit 2 Kevät 2017 Luento 4 Ke 22.3.2017 6/30

Avoin osoitteenmuodostus Alkiot tallennetaan suoraan hajautustaulukkoon Paikka riippuu avaimen lisäksi myös siitä, mitkä paikat taulukossa ovat vielä vapaina Tallennettavia alkioita n, hajautustaulukon koko m Täyttösuhde: n/m Algoritmit 2 Kevät 2017 Luento 4 Ke 22.3.2017 7/30

Avoin osoitteenmuodostus Lineaarinen etsintä: Ensin yritetään paikkaa h(k) Seuraavaksi yritetään paikkaa h(k) + 1 Seuraavaksi yritetään paikkaa h(k) + 2 Jne. Yleisesti hajautusfunktio on muotoa h(k, i) = (h(k) + i) mod m, i = 0, 1, 2,... Arvo i kertoo, montako yhteentörmäystä on tapahtunut kyseisen kotiosoitteen kohdalla Algoritmit 2 Kevät 2017 Luento 4 Ke 22.3.2017 8/30

Avoin osoitteenmuodostus Uuden alkion lisäys: Hajautetaan avain k indeksiksi h(k) Etsitään siitä alkaen ensimmäinen vapaa paikka Jos tullaan taulukon loppuun, jatketaan etsintää taulukon alusta Tallennetaan alkio löydettyyn paikkaan Hajautustaulukossa oltava vähintään yksi vapaa paikka Vapaat paikat täytyy pystyä tunnistamaan Algoritmit 2 Kevät 2017 Luento 4 Ke 22.3.2017 9/30

Avoin osoitteenmuodostus Alkion haku: Hajautetaan avain k indeksiksi h(k) Etsitään siitä alkaen alkio, jossa on sama avain (peräkkäishaku) Jos tullaan taulukon loppuun, jatketaan etsintää taulukon alusta Jos vastaan tulee tyhjä paikka, alkiota ei ole Algoritmit 2 Kevät 2017 Luento 4 Ke 22.3.2017 10/30

Avoin osoitteenmuodostus Alkion poisto: Hajautetaan avain k indeksiksi h(k) Etsitään siitä alkaen poistettava alkio Merkitään paikka poistetuksi Lisäämisessä poistettu paikka vastaa tyhjää paikkaa (siihen voidaan tallentaa normaalisti) Haussa poistettu paikka hypätään yli ja etsintää jatketaan (sillä paikan jälkeen voi olla vielä saman listan alkioita) Algoritmit 2 Kevät 2017 Luento 4 Ke 22.3.2017 11/30

Avoin osoitteenmuodostus Etu: Ei tarvita aputilaa (lineaarisia listoja) Haitta: Kun taulukko alkaa täyttyä, hakemisto tulee lähes käyttökelvottomaksi Lineaarinen etsintä voi aiheuttaa ensisijaista kasautumista: Taulukkoon tulee pitkiä yhtenäisiä täytettyjä osia Algoritmit 2 Kevät 2017 Luento 4 Ke 22.3.2017 12/30

Avoin osoitteenmuodostus Neliöllinen etsintä: Hajautusfunktio yleisesti muotoa h(k, i) = (h(k) + c 1 i + c 2 i 2 ) mod m missä c 1 ja c 2 sopivia vakioita Esimerkiksi h(k, i) = (h(k) + i 2 ) mod m Vähentää ensisijaista kasautumista Mutta voi esiintyä toissijaista kasautumista: Käydään aina läpi samat alkioketjut Algoritmit 2 Kevät 2017 Luento 4 Ke 22.3.2017 13/30

Avoin osoitteenmuodostus Kaksoishajautus: Kaksi eri hajautusfunktiota h 1 ja h 2 Hajautusfunktio yleisesti muotoa h(k, i) = (h 1 (k) + i h 2 (k)) mod m Funktio h 2 ei saa saada arvoa 0 Esimerkiksi h 2 (k) = q (k mod q) missä q on alkuluku ja q < m Algoritmit 2 Kevät 2017 Luento 4 Ke 22.3.2017 14/30

Hajautus Avoin hajautus: Ehdoton maksimi alkioiden lukumäärälle hajautustaulukon koko Lineaarinen etsintä: Oletetaan, että hajautus tapahtuu tasaisesti Haettava alkio taulukossa Tutkitaan keskimäärin (1 + 1/(1 n/m))/2 alkiota Haettava alkio ei taulukossa Tutkitaan keskimäärin (1 + 1/(1 n/m) 2 )/2 alkiota Jos täyttösuhde yli 0.75, avoin hajautus ei toimi enää hyvin Algoritmit 2 Kevät 2017 Luento 4 Ke 22.3.2017 15/30

Hajautus Ketjutus lineaarisilla listoilla: Oletetaan, että hajautus tapahtuu tasaisesti Yhteen kotiosoitteeseen hajautuu keskimäärin n/m alkiota Lisäys, poisto ja haku voidaan tehdä keskimäärin ajassa Θ(1 + n/m) Mutta: Pahimmassa tapauksessa kaikki alkiot hajautuvat samaan paikkaan Aikavaativuus Θ(n) Algoritmit 2 Kevät 2017 Luento 4 Ke 22.3.2017 16/30

Hajautusfunktiot Ihanteellinen hajautuminen: Hajautuminen samalla todennäköisyydellä mihin tahansa hajautustaulukon paikkaan Alkioiden jakautuminen noudattaa likimäärin Poissonin jakaumaa Voidaan laskea hajautumisen ja yhteentörmäysten todennäköisyyksiä Esimerkiksi: Jos täyttösuhde 1, niin noin 37 %:iin paikoista ei hajaudu mikään avain (joten muihin paikkoihin hajautuu useampia) Algoritmit 2 Kevät 2017 Luento 4 Ke 22.3.2017 17/30

Hajautusfunktiot Universaali hajautus: Avaimet kokonaislukuja väliltä [0, T 1] Hajautusfunktiot h : [0, T 1] [0, m 1] Hajautusfunktioiden perhe (joukko) H Perhe H on universaali, jos mille tahansa j, k [0, T 1] ja satunnaiselle h H on Pr(h(j) = h(k)) 1/m Hajautusfunktio valitaan satunnaisesti universaalista perheestä H Algoritmit 2 Kevät 2017 Luento 4 Ke 22.3.2017 18/30

Hajautusfunktiot Universaali hajautus: Valittuna n avainta, valitaan uusi avain j Odotettavissa olevien yhteentörmäysten määrä j:n ja aikaisempien avaimien kesken enintään n/m Esimerkki: p alkuluku, T p < 2T, 0 < a < p, 0 b < p Silloin perhe H, joka koostuu muotoa h a,b (k) = ((ak + b) mod p) mod m olevista hajautusfunktioista, on universaali Algoritmit 2 Kevät 2017 Luento 4 Ke 22.3.2017 19/30

Hajautusfunktiot Täydellinen hajautusfunktio: Ei lainkaan yhteentörmäyksiä Mahdollista vain, jos tunnetaan etukäteen tallennettavien alkioiden avaimet Minimaalinen täydellinen hajautusfunktio: Edellisen lisäksi hajautustaulukon koko sama kuin tallennettavien alkioiden määrä Algoritmit 2 Kevät 2017 Luento 4 Ke 22.3.2017 20/30

Puurakenteet 7 Yleinen puu: Juurisolmu, jolla alipuita Alipuut yleisiä puita Puu voi olla tyhjä Algoritmit 2 Kevät 2017 Luento 4 Ke 22.3.2017 21/30

Puurakenteet 7 7 Binääripuu: Erikoistapaus yleisestä puusta Solmuilla kaksi alipuuta, vasen ja oikea Puu voi olla tyhjä Algoritmit 2 Kevät 2017 Luento 4 Ke 22.3.2017 22/30

Puihin liittyviä termejä Solmun alipuiden juurisolmut ovat solmun lapsia (jälkeläisiä) Solmu on lastensa vanhempi Saman solmun lapset ovat sisaruksia Solmun edeltäjiä ovat solmun vanhempi, tämän vanhempi jne. Solmun seuraajia ovat solmun lapset, näiden lapset jne. Lapseton solmu on lehtisolmu Muut kuin lehtisolmut ovat haarautumissolmuja (sisäsolmuja) Algoritmit 2 Kevät 2017 Luento 4 Ke 22.3.2017 23/30

Solmujen järjestys Yleisesti lapsisolmuille ei välttämättä tarvita järjestystä Käytännössä kuitenkin joku järjestys määritellään Solmujen läpikäynti jossain yksikäsitteisessä järjestyksessä vaatii, että lapsisolmujen järjestys määritelty yksikäsitteisesti Algoritmit 2 Kevät 2017 Luento 4 Ke 22.3.2017 24/30

Solmujen läpikäynti Etenevä järjestys, esijärjestys (preorder): Käsitellään juurisolmu Käsitellään alipuut etenevässä järjestyksessä Takeneva järjestys, jälkijärjestys (endorder, postorder): Käsitellään alipuut takenevassa järjestyksessä Käsitellään juurisolmu Algoritmit 2 Kevät 2017 Luento 4 Ke 22.3.2017 25/30

Solmujen läpikäynti Binääripuille voidaan määritellä myös: Sisäjärjestys (inorder): Käsitellään vasen alipuu sisäjärjestyksessä Käsitellään juurisolmu Käsitellään oikea alipuu sisäjärjestyksessä Algoritmit 2 Kevät 2017 Luento 4 Ke 22.3.2017 26/30

Puun toteutus Dynaamisesti: Solmussa osoittimet kaikkiin lapsiin (lapsien lukumäärä yleensä rajoitettu) Mahdollisesti osoitin solmun vanhempaan Mahdollisesti kytketään saman solmun lapset renkaaksi (osoitin seuraavaan sisarukseen) Algoritmit 2 Kevät 2017 Luento 4 Ke 22.3.2017 27/30

Puun toteutus Taulukolla: Tallennetaan solmut etenevässä järjestyksessä Jokaiselle solmulle lisätiedot: Onko nuorempia sisaruksia Onko lapsia Tai: Montako lasta solmulla on Algoritmit 2 Kevät 2017 Luento 4 Ke 22.3.2017 28/30

Yleinen puu binääripuuksi Lapsisolmut järjestetty vasemmalta oikealle (vanhimmasta nuorimpaan) Solmun vasen alipuu: Vanhin lapsi, jos solmulla on lapsia null, jos solmulla ei lapsia Solmun oikea alipuu: Seuraavaksi nuorin sisarus, jos solmulla on sellainen null, jos nuorempaa sisarusta ei ole Algoritmit 2 Kevät 2017 Luento 4 Ke 22.3.2017 29/30

Esimerkki 11 21 22 23 31 32 33 34 35 11 21 31 22 32 23 33 34 35 Algoritmit 2 Kevät 2017 Luento 4 Ke 22.3.2017 30/30