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

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

Algoritmit 2. Luento 2 Ke Timo Männikkö

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

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Binäärihaun vertailujärjestys

Algoritmit 2. Luento 7 Ti Timo Männikkö

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.

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

4. Joukkojen käsittely

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

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

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

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

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

Algoritmit 1. Luento 5 Ti Timo Männikkö

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Algoritmit 1. Luento 8 Ke Timo Männikkö

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

Algoritmit 2. Luento 14 Ke Timo Männikkö

1 Puu, Keko ja Prioriteettijono

Algoritmi on periaatteellisella tasolla seuraava:

Algoritmit 2. Demot Timo Männikkö

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

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

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

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

Algoritmit 2. Luento 4 Ke Timo Männikkö

Ohjelmoinnin perusteet Y Python

Kaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PushFront(x): lisää tietoalkion x jonon eteen

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

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

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

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 1. Luento 4 Ke Timo Männikkö

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 1. Luento 6 Ke Timo Männikkö

Datatähti 2019 loppu

Algoritmit 2. Luento 13 Ti Timo Männikkö

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

6. Sanakirjat. 6. luku 298

5. Prioriteettijonot Prioriteettijonon abstrakti tietotyyppi

5. Prioriteettijonot. 5. luku 236

Tietorakenteet, laskuharjoitus 3, ratkaisuja

Algoritmit 1. Luento 14 Ke Timo Männikkö

Luku 8. Aluekyselyt. 8.1 Summataulukko

6. Sanakirjat Sanakirjan abstrakti tietotyyppi

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 2. Luento 14 To Timo Männikkö

Algoritmit 2. Luento 4 To Timo Männikkö

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

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:

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

7. Tasapainoitetut hakupuut

Kierros 4: Binäärihakupuut

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

Fibonacci-kasoilla voidaan toteuttaa samat operaatiot kuin binomikasoilla.

Tiraka, yhteenveto tenttiinlukua varten

Tietorakenteet, laskuharjoitus 7, 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.

CS-A1140 Tietorakenteet ja algoritmit

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

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Algoritmit 2. Luento 9 Ti Timo Männikkö

A TIETORAKENTEET JA ALGORITMIT

Ohjelmoinnin perusteet Y Python

Tarkennamme geneeristä painamiskorotusalgoritmia

8. Lajittelu, joukot ja valinta

Algoritmit 2. Luento 6 To Timo Männikkö

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

Tietorakenteet, laskuharjoitus 6,

4 Tehokkuus ja algoritmien suunnittelu

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 1. Luento 12 Ke Timo Männikkö

Tämä on helpompi ymmärtää, kun tulkitaan keko täydellisesti tasapainotetuksi binääripuuksi, jonka juuri on talletettu taulukon paikkaan

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

3. Binääripuu, Java-toteutus

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Algoritmit 1. Luento 12 Ti Timo Männikkö

B + -puut. Kerttu Pollari-Malmi

Ohjelmoinnin perusteet Y Python

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia

Algoritmien suunnittelu ja analyysi (kevät 2004) 1. välikoe, ratkaisuja

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

10. Painotetut graafit

Algoritmit 1. Luento 9 Ti Timo Männikkö

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Algoritmit 1. Luento 10 Ke Timo Männikkö

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

Aikavaativuuden perussäännöt

Algoritmit 1. Luento 3 Ti Timo Männikkö

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

HENRI MYLLYOJA BINÄÄRI- JA FIBONACCI-KEOT PRIORITEETTIJONON TO- TEUTUKSEEN. Kandidaatintyö

Luentorunko keskiviikolle Hierarkkinen ryvästäminen

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

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

Algoritmit 1. Demot Timo Männikkö

Transkriptio:

Kekolajittelu Prioriteettijonolla toteutettu keko InsertItem ja RemoveMinElem: O(log(n)) Lajittelu prioriteettijonolla: PriorityQueueSort(lajiteltava sekvenssi S) alusta prioriteettijono P while S.IsEmpty() = false do x S.RemoveFirst() P.InsertItem(x, x) while P.IsEpmty() = false do x P.RemoveMinElem() S.InsertLast(x) Käytetään kekoa kekolajittelu (heap sort) aikavaativuus? O(n log(n)) Tietorakenteet, syksy 7 1 Esim. edellä kekolajittelussa keko muodostettiin alkaen tyhjästä, lisäten kaikki n alkiota yksitellen aikavaativuus: O(n log(n)) Jos n alkiota annettu yhdellä kertaa, keko rakennettavissa ajassa O(n) lähtokohta: kahden O(h) korkuisen keon yhdistäminen uudella juurella vie O(h) operaatiota vrt. RemoveMinElem() keossa keko 1 keko 2 Tietorakenteet, syksy 7 2 Aluksi alkioista täydellinen binääripuu 65 85 120 85 Muunnetaan puu keoksi alhaalta-ylös (bottom-up) alussa kukin lehti (=tason h solmu) on keko 120 tason i 1 keot yhdistetään niiden tasolla i olevan vanhemman kanssa tasot järjestyksessä i = h 1,h 2,...,1 Tietorakenteet, syksy 7 3 65 Aluksi tason h keot yhdistetään niiden tasolla h 1 olevien vanhempien kanssa tason h 1 keoiksi 85 120 65 120 Tietorakenteet, syksy 7 4

Sitten taso h 2... Ja taso h 3 (= tässä 0 eli ylin taso) 120 120 keko valmis! 120 120 Tietorakenteet, syksy 7 5 Tietorakenteet, syksy 7 6 120 Aikavaativuus? solmujen liikkumat askeleet tason i solmu liikkuu korkeintaan h i askelta alas kuplimisissa kullekin korkeuden i solmulle voidaan varata ikiomat h i kaarta kuvassa: yksi lapsikaari oikealle, loput vasemmalle kaaria O(n), joten askelia korkeintaan O(n) Tietorakenteet, syksy 7 7 Sanakirja (dictionary) op Kokoelma alkioita, joilla yksi tai useampia avaimia Prioriteettijono: alkioiden joukosta voi hakea vertaimen suhteen ensimmäisen avaimen k min omaava alkio Sanakirja: tietorakenne, jossa alkioiden joukosta voi hakea tietyn avaimen k omaavan alkion (alkiot) jos alkioilla vertain : sanakirja on järjestetty muuten sanakirja on järjestämätön oltava kuitenkin yhtäsuuruuden testaaja = Tietorakenteet, syksy 7 8

Sanakirjan metodit Sanakirjan tyypilliset perusmetodit: FindElem(k): palauttaa (ei poista) jonkin avaimen k omaavan alkion palauttaa arvon null, jos avainta k ei ole sanakirjassa FindAllElems(k): palauttaa (ei poista) kaikki avaimen k omaavat alkiot esim. sekvenssinä palauttaa arvon null, jos avainta k ei ole sanakirjassa Tietorakenteet, syksy 7 9 Sanakirjan metodit InsertItem(k, x): lisää avaimen k omaavan alkion x sanakirjaan Remove(k): poistaa ja palauttaa jonkin avaimen k omaavan alkion palauttaa arvonnull, jos avainta k ei ollut RemoveAll(k): poistaa ja palauttaa kaikki avaimen k omaavat alkiot palautus esim. sekvenssinä palauttaa arvonnull, jos avainta k ei ollut tutut apumetodit IsEmpty() ja Size() Tietorakenteet, syksy 7 10 Sanakirjan metodit Esimerkki: 112 op 112 op FindElem(): palauttaa jonkin n ( tai ) FindElem(Jori): palauttaa null Remove(): poistaa/palauttaa n RemoveAll(): poistaa ja palauttaa kaikki (molemmat) t InsertItem(112 op, ): lisää alkion avaimella 112 op Remove():poistaa/palauttaa jonkin n ( tai 112 op) Tietorakenteet, syksy 7 11 Sanakirja järjestämättömänä sekvenssinä op Metodien aikavaativuudet: FindElem(k) ja Remove(k) FindAllElems(k) ja RemoveAll(k) alkioiden läpikäynti yksitellen Θ(n) InsertItem(k, x) lisäys esim. sekvenssin eteen O(1) Pätevät sekä linkitetylle että taulukko-toteutukselle Tietorakenteet, syksy 7 12

Järjestetty sanakirja järjestettynä sekvenssinä op Metodien aikavaativuudet: FindElem(k) ja Remove(k) FindAllElems(k) ja RemoveAll(k) InsertItem(k, x) lisäyspaikka haetaan selaamalla O(n) Pätevät linkitetylle toteutukselle, mutta... Tietorakenteet, syksy 7 13 Järjestetty sanakirja järjestetyssä taulukossa op Avain k voidaan etsiä binäärihaulla keskitytään taulukon kiinnostavaan alueeseen indeksit välillä... alussa = 0, = n 1 verrataan avainta k kiinnostavan alueen keskimmäiseen alkioon indeksi = ( + )/2 op? Tietorakenteet, syksy 7 14 Binäärihaku (binary search) op avaimet ovat < k (= ) < k avain k = voi olla täällä jos < k, puolitetaan alue: avain k voi esiintyä ainoastaan indeksien + 1... välissä op avain k =? > k > k = vastaavasti jos > k, avain k voi esiintyä ainoastaan indeksien... 1 välissä Tietorakenteet, syksy 7 15 Binäärihaku (binary search) Jatketaan, kunnes avain k löytyy indeksin kohdalta... op < k? op = k = tai kiinnostava alue häviää (esim.: k = Mira) Tietorakenteet, syksy 7 16

Binäärihaku (binary search) Binäärihaun aikavaativuus? kullakin askeleella O(1) määrä työtä jos alkio ei kohdassa, kiinnostava alue vähintään puolittuu kiinnostavan alueen koko = 1 viimeistään log 2 (n) askeleen jälkeen askeleita korkeintaan log(n), joten binäärihaun aikavaativuus O(log(n)) Sanakirjan sekvenssitoteutusten yhteenveto metodi järjestämätön sekv. järjestetty sekv. taulukko linkitetty taulukko linkitetty FindElem O(n) O(n) O(log(n)) O(n) FindAllElems Θ(n) Θ(n) O(log(n) + s) O(n) InsertItem O(1) O(1) O(n) O(n) Remove O(n) O(n) O(n) O(n) RemoveAll Θ(n) Θ(n) O(n) O(n) Jos halutaan s alkiota, joilla avain k, binäärihaun jälkeen O(s) alkioiden selaus (alkiot peräkkäin) Tietorakenteet, syksy 7 17 Tietorakenteet, syksy 7 18