Binäärihaun vertailujärjestys

Samankaltaiset tiedostot
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 2 To Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

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

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

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

A TIETORAKENTEET JA ALGORITMIT

Tietorakenteet, laskuharjoitus 6,

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

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

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

14 Tasapainotetut puurakenteet

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

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

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

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

7. Tasapainoitetut hakupuut

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

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe ratkaisuja (Jyrki Kivinen)

Algoritmit 2. Luento 4 To Timo Männikkö

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

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

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

Kierros 4: Binäärihakupuut

Algoritmit 1. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 4 Ke Timo Männikkö

CS-A1140 Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Hakurakenteet Ari Korhonen

B + -puut. Kerttu Pollari-Malmi

Algoritmit 2. Luento 6 Ke Timo Männikkö

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Algoritmit 2. Luento 3 Ti Timo Männikkö

1 Puu, Keko ja Prioriteettijono

1.1 Tavallinen binäärihakupuu

3. Binääripuu, Java-toteutus

6. Sanakirjat. 6. luku 298

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

Luku 4. Tietorakenteet funktio-ohjelmoinnissa. 4.1 Äärelliset kuvaukset

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmi on periaatteellisella tasolla seuraava:

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

Koe ma 1.3 klo salissa A111, koeaika kuten tavallista 2h 30min

4. Joukkojen käsittely

Tietorakenteet, laskuharjoitus 3, ratkaisuja

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.

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

Luku 8. Aluekyselyt. 8.1 Summataulukko

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

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

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

Paikkatiedon hallinta ja analyysi 4. Paikkatiedon indeksointi (jatkoa)

Algoritmit 2. Luento 9 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

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

7. Tasapainoitetut hakupuut

puuta tree hierarkkinen hierarchical

Tietorakenteet ja algoritmit - syksy

Algoritmit 1. Luento 12 Ke Timo Männikkö

Kysymyksiä koko kurssista?

Algoritmit 2. Demot Timo Männikkö

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Paikkatiedon hallinta ja analyysi 4. Paikkatiedon indeksointi

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))

Paikkatiedon käsittely 5. Paikkatiedon indeksointi

Datatähti 2019 loppu

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Algoritmit 2. Luento 10 To Timo Männikkö

useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

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

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

Anna Kuikka Pyöräkatu 9 B Kuopio GSM: Opiskelijanro: 60219K. Prioriteettijonot

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

4 Tehokkuus ja algoritmien suunnittelu

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 2. helmikuuta 2012

Pienin virittävä puu (minimum spanning tree)

6. Hakupuut. Hakupuu (engl. search tree) on listaa huomattavasti edistyneempi tapa toteuttaa abstrakti tietotyyppi joukko

Algoritmit 1. Luento 13 Ma Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Tietorakenteet ja algoritmit II Loppuraportti, ryhmä 7

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

5. Keko. Tietorakenne keko eli kasa (heap) on tehokas toteutus abstraktille tietotyypille prioriteettijono, jonka operaatiot ovat seuraavat:

Algoritmit 1. Luento 1 Ti Timo Männikkö

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 9. marraskuuta 2009

Kierros 3: Puut. Tommi Junttila. Aalto University School of Science Department of Computer Science

9.3 Algoritmin valinta

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

Mukautuvat järjestämisalgoritmit

8. Puna-mustat puut ja tietorakenteiden täydentäminen

Transkriptio:

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 5 op 5 op op 8 op 5 6 7 8 Järjestetyn sanakirjan tehokas toteutus: binäärihaku Binäärihaun ertailujärjestys 5 6 7 8 Eea 5 op 5 op op 8 op op Eea op 5 op Eea op 5 op Eea op 5 op k < 5 op 5 op 5 op op op op k > 8 op 8 op 8 op k < k > k < k > k > k > k > k > nopeat haut: O(log(n)) järjestetty taulukko hitaat päiitykset: O(n) Tietorakenteet, syksy 7 Tietorakenteet, syksy 7 Järjestetyn sanakirjan tehokas toteutus: binäärihaku Vertailuhierarkia 5 6 7 8 Eea 5 op 5 op op 8 op op Eea op 5 op Eea op 5 op Eea op 5 op 5 op 5 op 5 op op op op 8 op 8 op 8 op Vertailuhierarkia binäärihakupuu ertailu solmussa (alkaen juurisolmusta) Key() = k: löytyi solmusta Key() > k: jatka :n asempaan lapseen Key() < k: jatka :n oikeaan lapseen op 5 op Esim. haun k = hakupolku op 8 op Eea 5 op Tietorakenteet, syksy 7 Tietorakenteet, syksy 7

Binäärihakupuu: binääripuu, jossa jokaiselle solmulle pätee: solmun asemman alipuun kukin aain solmun aain solmun oikean alipuun kukin aain solmun aain Esimerkkipuu, jonka alkioiden aaimina luut,,,..., ja taanomainen lukujen ertailu 5 7 8 6 Tietorakenteet, syksy 7 5 Tietorakenteet, syksy 7 6 Toinen esimerkkipuu, jonka alkioiden aaimina luut,,,..., Tietorakenteet, syksy 7 7 5 6 7 8 Binäärihakupuun metodit: TreeSearch(k, ) FindElem(k) solmun alipuussa FindElem(k) = TreeSearch(k, root) palauttaa sellaisen solmun u, jollakey(u) = k palautusaro null, jos :n alipuun minkään alkion aain ei ole k TreeSearch(k, ) if = null tai k = Key() return if k < Key() return TreeSearch(k,LeftChild()) return TreeSearch(k,RightChild()) FindElem() FindElem() null haun FindElem(k) aikaaatiuus? O(h) 8 Tietorakenteet, syksy 7 8

Binäärihakupuun metodit: TreeInsert(k, x, ) InsertItem(k, x) = TreeInsert(k, x, root) lisää solmun alipuuhun aain-alkioparin (k, x) sisältään uuden lehtisolmun TreeInsert(k, x, ) (oletus: null) if k Key() if LeftChild() null TreeInsert(k, x,leftchild()) solmulle uusi asen lapsi, johon (k, x) if RightChild() null TreeInsert(k, x,rightchild()) solmulle uusi oikea lapsi, johon (k, x) aaimen omaaan alkion lisäys 8 Tietorakenteet, syksy 7 Binäärihakupuun metodit: TreeRemoe(k, ) Remoe(k) = TreeRemoe(k, root) poistaa solmun alipuusta aaimen k sisältään solmun 8 Remoe() Puun korjaaminen ehyeksi? 8 Tietorakenteet, syksy 7 helppoa, jos poistettaalla solmulla alle lasta linkitä lapsi (tai null) poistetun anhempaan 8 8 hieman hankalampaa, jos poistettaalla lasta 8 Remoe() 8 Tietorakenteet, syksy 7 siirretään poistetun solmun tilalle sen oikean alipuun pienin (= poistettua seuraaa ) alkio 8 8 apufunktio FindMin(): hakee solmun alipuun pienimmän aaimen omaaan solmun FindMin() (oletus: null) res while LeftChild(res) null) res LeftChild(res) return res Tietorakenteet, syksy 7

TreeRemoe(k, ) u TreeSearch(k, )) if u = null return null res Elem(u) if LeftChild(u) = null koraa solmu u sen oikealla lapsella if RightChild(u) = null koraa solmu u sen asemmalla lapsella w = FindMin(RightChild(u)) siirrä solmun w alkio solmuun u koraa solmu w sen oikealla lapsella poista solmu w return res 8 7 8 w 8 Tietorakenteet, syksy 7 7 7 Binäärihakupuun tehokkuus Edellisten binäärihakupuun metodien aikaaatiuus: O(h) parhaimmillaan O(log(n)) ( täydellinen binääripuu) pahimmillaan O(n) ( lineaarinen sekenssi) keskimäärin O(log(n)) ( satunnainen binääripuu, hankalahko todistaa) 8 8 Tietorakenteet, syksy 7 Tasapainotettu binäärihakupuu: puun korkeus pidetään suuruusluokassa log(n) esim. AVL-puu (Adelson-Velskii, Landis), toinen yleinen: puna-musta puu (Red-Black tree) AVL-puun tasapainotussääntö: solmu on tasapainossa, jos H(LeftChild()) H(RightChild()) tilansäästämiseksi lyhenne H() = Height() tasapaino: :n alipuiden korkeuksien ero tyhjä alipuu: korkeus = - Tietorakenteet, syksy 7 5 AVL-puu on tasapainossa, jos sen kaikki solmut oat Mitkä seuraaista puista AVL-tasapainoisia? 8 5 8 ainoastaan oikealla ylhäällä olea Tietorakenteet, syksy 7 6 8

AVL-tasapainoisen puun korkeus on O(log(n)) Löyhä korkeuden h ja solmujen määrän n ertailu: merkintä: min n (h) = pienin mahdollinen solmujen lukumäärä h-korkuisessa AVL-puussa selästi min n () =,min n () =,min n () = eli pätee raja min n (h) h kun h < h-korkuisen AVL-puun juuren kummankin alipuun korkeus ähintään h (tasapaino) induktio: min n (h) min n (h ) h = h + = h, joten aina min n (h) h jos n min n (h) h, niin log (n) h eli h log (n) = O(log(n)) Tietorakenteet, syksy 7 7 Tasapainon ylläpito: kussakin solmussa talletettuna aro H() = Height() -5-5 päiitys solmun lisäyksen/poiston jälkeen? Lisäys 8 8 8 Poisto: Poisto: lapsi lasta 5 5 5 8 8 8 8 8 8 Tietorakenteet, syksy 7 8 korkeudet oiat muuttua alimman lisätyn/koratun solmun yläpuolella polulla juureen oletus: alimman muutetun solmun anhempi, eli lisäyksessä = solmu, jolle luotiin uusi lapsi, ja poistossa = (alemman) koratun solmun anhempi UpdateHeights() u while u null i max{h(leftch(u)),h(rightch(u))} SetHeight(u, i + ) u Parent(u) return Aikaaatiuus O(h) Poisto 8 8 pienin alempi pienin 8 korkeuden muutokset tämän yläpuolella Tietorakenteet, syksy 7