Algoritmit 1. Luento 12 Ke Timo Männikkö

Samankaltaiset tiedostot
Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 1. Luento 11 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 8 To Timo Männikkö

Algoritmit 1. Luento 14 Ke Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö

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

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

Algoritmit 2. Luento 13 Ti Timo Männikkö

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Algoritmit 2. Luento 6 To Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö

Algoritmit 2. Luento 4 Ke 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)

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

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

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Algoritmit 1. Luento 13 Ti Timo Männikkö

Algoritmit 1. Luento 2 Ke Timo Männikkö

8. Lajittelu, joukot ja valinta

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

9 Erilaisia tapoja järjestää

4 Tehokkuus ja algoritmien suunnittelu

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Algoritmit 2. Luento 4 To Timo Männikkö

Algoritmit 1. Luento 13 Ma Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit, VI Algoritmien suunnitteluparadigmoja

Algoritmit 2. Demot Timo Männikkö

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

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

Algoritmit 1. Demot Timo Männikkö

Algoritmit 2. Luento 10 To Timo Männikkö

Olkoon S(n) kutsun merge-sort(a, p, q) tilavaativuus kun p q + 1 = n. Oletetaan merge toteutetuksi vakiotyötilassa (ei-triviaalia mutta mahdollista).

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

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

Algoritmit 1. Luento 4 Ke Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä ym., osa I

Ohjelmoinnin perusteet Y Python

MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä ym., osa I

Algoritmit 2. Demot Timo Männikkö

Algoritmit 2. Luento 12 To Timo Männikkö

Tietorakenteet, laskuharjoitus 3, ratkaisuja

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Algoritmit 2. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 1. Luento 9 Ti Timo Männikkö

5 Kertaluokkamerkinnät

Algoritmit 1. Luento 6 Ke Timo Männikkö

1 Erilaisia tapoja järjestää

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

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

On annettu jono lukuja tai muita alkioita, joiden välille on määritelty suuruusjärjestys. Tehtävänä on saattaa alkiot suuruusjärjestykseen.

8. Lajittelu, joukot ja valinta

811312A Tietorakenteet ja algoritmit, , Harjoitus 4, Ratkaisu

Algoritmit 2. Luento 11 Ti Timo Männikkö

4.3. Matemaattinen induktio

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

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 V Hash-taulukot ja binääriset etsintäpuut

Tietorakenteet ja algoritmit - syksy

ja λ 2 = 2x 1r 0 x 2 + 2x 1r 0 x 2

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

4. Joukkojen käsittely

Tutkimusmenetelmät-kurssi, s-2004

Algoritmit 2. Luento 14 To Timo Männikkö

Liitosesimerkki Tietokannan hallinta, kevät 2006, J.Li 1

TIE Tietorakenteet ja algoritmit 25

Ohjelmoinnin perusteet Y Python

TAMPEREEN TEKNILLINEN YLIOPISTO

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

A TIETORAKENTEET JA ALGORITMIT

Datatähti 2019 loppu

4. Algoritmien tehokkuus

A TIETORAKENTEET JA ALGORITMIT

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

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

Algoritmit 2. Luento 9 Ti Timo Männikkö

Kysymyksiä koko kurssista?

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

Transkriptio:

Algoritmit 1 Luento 12 Ke 15.2.2017 Timo Männikkö

Luento 12 Pikalajittelu Pikalajittelun vaativuus Osittamisen tasapainoisuus Lajittelumenetelmien vaativuus Laskentalajittelu Lokerolajittelu Kantalukulajittelu Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 2/30

Pikalajittelu (quicksort) Perustuu osittamiseen ja rekursioon Periaate: Alkiot jaetaan kahteen pienempään osaan, jotka voidaan lajitella erikseen toisistaan riippumatta Pikalajittelu: Jos taulukon pituus pienempi kuin jokin raja, järjestetään alkiot lisäyslajittelulla (ainakin silloin jos pituus < 3) Valitaan jokin alkioista jakotietueeksi (Jatkuu) Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 3/30

Pikalajittelu jatkuu Ositetaan taulukko siirtelemällä alkioita siten, että tämän vaiheen jälkeen: Jakotietue on paikassa j Alkiot, jotka ovat pienempiä kuin jakotietue, ovat ennen paikkaa j Alkiot, jotka ovat suurempia kuin jakotietue, ovat paikan j jälkeen Alkiot, jotka ovat yhtä suuria kuin jakotietue, voivat olla paikan j kummalla puolella tahansa (Jatkuu) Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 4/30

Pikalajittelu jatkuu Lajitellaan alkuosa (paikat 0, 1,..., j-1): Pikalajittelulla (rekursio) Lajitellaan loppuosa (paikat j+1, j+2,..., n-1): Pikalajittelulla (rekursio) Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 5/30

Jakotietueen valinta Eri vaihtoehtoja valinnalle: Ensimmäinen alkio Satunnainen alkio Keskimmäinen alkio Mediaanimenetelmä Yhdeksän alkion pseudomediaani Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 6/30

Pikalajittelun vaativuus Jakotietueen valinta: Kaikki edellä esitetyt menetelmät O(1) Ositus: Käydään läpi tarkasteltava taulukon osa kerran O(n) Osien lajittelu rekursiivisesti: Vaativuus riippuu siitä, miten hyvin ositus onnistui Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 7/30

Pikalajittelun vaativuus Paras tapaus: Jokaisessa osituksessa alkiot jaetaan kahteen tasan yhtäsuureen osaan T (n) = { b, kun n = 1 2T ( n ) + cn, kun n > 1 2 Sama rekursioyhtälö kuin lomituslajittelulle O(n log n) Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 8/30

Pikalajittelun vaativuus Pahin tapaus: Ensimmäisen osituksen jälkeen osissa on 0 ja n 1 alkiota Ositus tapahtuu jatkossa yhtä huonosti T (n) = { b, kun n = 1 T (n 1) + cn, kun n > 1 Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 9/30

Pikalajittelun vaativuus Pahin tapaus: T (n) = T (n 1) + cn = T (n 2) + c(n 1) + cn = T (n 3) + c(n 2) + c(n 1) + cn =... = T (1) + c 2 + c 3 + + c(n 1) + cn = b + cn(n + 1)/2 1 = O(n 2 ) Mutta: Voidaan osoittaa, että keskimäärin pikalajittelun aikavaativuus on O(n log n) Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 10/30

Osittamisen tasapainoisuus Esimerkki: Kokonaislukujen joukko S, koko S = n Tehtävänä määrätä S:n k:nneksi pienin luku Erikoistapaus mediaanin (keskimmäisen luvun) määrääminen k = n/2 Triviaaliratkaisuja: Määrätään järjestyksessä k pienintä lukua T (n) = O(kn) = O(n 2 ) Järjestetään S ja poimitaan k:nneksi pienin T (n) = O(n log n) Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 11/30

Osittava ratkaisu esimerkille alkio select(joukko S, int k) { if ( S == 1) return a; // joukon ainoa alkio else { a = satunnainen S:n alkio; S1 = {x in S x < a}; // Oletus: alkiot S2 = {x in S x > a}; // erillisiä if ( S1 >= k) return select(s1, k); else if ( S1 == k-1) return a; else return select(s2, k- S1-1); } } Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 12/30

Osittava ratkaisu esimerkille Jos a valitaan aina suunnilleen keskeltä: T (n) = { b, kun n = 1 T ( n ) + cn, kun n > 1 2 T (n) = = O(n) Jos a valitaan mahdollisimman huonosti: { b, kun n = 1 T (n) = T (n 1) + cn, kun n > 1 T (n) = = O(n 2 ) Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 13/30

Lajittelumenetelmien vaativuus Vertailumenetelmät: Perustuvat kahden alkion (avaimen) vertailuun Onko t[i] < t[j] Vastaus kyllä tai ei Vastauksen perusteella tehdään jotain ja suoritetaan uusi vertailu Menetelmä voidaan esittää binäärisenä päätöspuuna Jokainen sisäsolmu vastaa yhtä vertailua Jokainen lehtisolmu vastaa yhtä järjestystä Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 14/30

Lajittelumenetelmien vaativuus Suurin mahdollinen määrä vertailuja = Pisin mahdollinen polku päätöspuussa = Päätöspuun korkeus Järjestettäviä alkioita n Erilaisia järjestyksiä n! Lehtisolmuja päätöspuussa n! Arvioidaan päätöspuun korkeutta h Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 15/30

Lajittelumenetelmien vaativuus Tasolla h on 2 h solmua, jos puu on tasapainoinen Vähemmän, jos puu ei ole täysin tasapainoinen Lehtisolmuja voi olla korkeintaan 2 h kpl Arvio 2 h n! eli h log 2 (n!) h log 2 n! = n/2 i=1 n i=1 log 2 i log 2 n 2 = n 2 log 2 n 2 = O(n log n) Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 16/30

Lajittelumenetelmien vaativuus Vertailumenetelmien vaativuus vähintään O(n log n) Kaikki edelliset ovat vertailumenetelmiä Esimerkiksi lomituslajittelu, jonka vaativuus on tässä mielessä optimaalinen Mutta: Jos avainten arvojen suhteen on rajoituksia tai menetelmässä voidaan tehdä muutakin kuin binäärisiä vertailuja Voidaan saada vaativuus paremmaksi Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 17/30

Laskentalajittelu (counting sort) Oletus: Järjestettävät alkiot (tai avaimet) kokonaislukuja väliltä 0, 1,..., k Idea: Lasketaan kullekin alkiolle a niiden alkioiden lukumäärä, jotka ovat a Tiedetään alkion a paikka Järjestettävät alkiot taulukossa t[1..n] Järjestetyt alkiot algoritmin päättyessä järjestyksessä taulukossa s[1..n] Työtilana taulukko u[0..k] Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 18/30

Laskentalajittelu 1. for (i = 0; i <= k; i++) u[i] = 0; // työtilataulukko u nollattu 2. for (j = 1; j <= n; j++) u[t[j]]++; // nyt u[i] sisältää alkioiden i lukumäärän 3. for (i = 1; i <= k; i++) u[i] = u[i] + u[i-1]; // nyt u[i] sisältää tiedon siitä montako // alkiota on pienempiä tai yhtä suuria kuin i 4. for (j = n; j >= 1; j--) { s[u[t[j]]] = t[j]; // alkio t[j] paikalleen u[t[j]]--; // lukumäärän päivitys } Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 19/30

Laskentalajittelu Askel 1: O(k) Askel 2: O(n) Askel 3: O(k) Askel 4: O(n) Yhteensä O(k + n) Jos k = O(n), niin vaativuus O(n) Lisäksi menetelmä on stabiili Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 20/30

Lokerolajittelu (bucket sort, bin sort) Idea: Alkiot sijoitellaan lokeroihin (nippuihin) siten, että samaan lokeroon menevät ne alkiot, joilla on samansuuruinen avain Lokerot käydään läpi avainten mukaisessa järjestyksessä ja poimitaan niistä alkiot järjestettyjen alkioiden joukkoon Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 21/30

Lokerolajittelu Yksinkertainen tapaus: Avaimet kokonaislukuja väliltä 0, 1,..., n 1 Jokainen avain esiintyy täsmälleen kerran Lokerot voidaan esittää taulukon alkioina 1. Luodaan tyhjä taulukko s[0..(n-1)] 2. for (i = 0; i < n; i++) s[t[i]] = t[i]; Vaativuus O(n) Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 22/30

Lokerolajittelu Yleinen tapaus: Sama avain voi esiintyä useasti Samaan lokeroon menee useampia alkioita Kaikki mahdolliset avaimet eivät esiinny Lokeroita jää tyhjiksi Lokeroa ei voida toteuttaa taulukon alkiona Toteutetaan lokerot (esimerkiksi) lineaarisina listoina Alkiot taulukossa t[0..(n-1)] Avainkenttien t[i].key arvot kokonaislukuja väliltä l, l + 1,..., h Mahdollisten avainten lukumäärä m = h l + 1 Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 23/30

Lokerolajittelu 1. for (i = 0; i < n; i++) Lisätään alkio t[i] lokeroon t[i].key 2. Luodaan tyhjä lista lis 3. for (j = l; j <= h; j++) Lisätään lokeron j alkiot listan lis loppuun Jos listaoperaatiot voidaan tehdä vakioajassa, on vaativuus O(n + m) Jos lisääminen lokeroihin tehdään stabiilisti, on koko algoritmikin stabiili Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 24/30

Kantalukulajittelu (radix sort) Idea: Alkiot järjestetään suuruusjärjestykseen kokonaislukujen numeroiden merkitsevyyden perusteella Kunkin yksittäisen numeron kohdalla lajittelu tehdään (esimerkiksi) lokerolajittelulla Avaimet kokonaislukuja väliltä 0, 1,..., (d k 1), missä: d käytetyn lukujärjestelmän kantaluku k jokin ennalta kiinnitetty kokonaisluku Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 25/30

Kantalukulajittelu: Esimerkki Avaimet välillä 0,1,...,999, eli d = 10 ja k = 3 Järjestettävänä luvut (avaimet): 453, 9, 638, 812, 48, 561, 528, 239, 94, 184 Järjestetään lokeroihin viimeisen numeron mukaan Järjestetään lokeroihin keskimmäisen numeron mukaan Järjestetään lokeroihin ensimmäisen numeron mukaan Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 26/30

Kantalukulajittelu: Esimerkki jatkuu 453 561 009 009 009 812 812 048 638 453 528 094 812 094 638 184 048 184 239 239 561 638 048 453 528 048 453 528 239 528 561 561 094 009 184 648 184 239 094 812 Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 27/30

Kantalukulajittelu Yleisesti: Lajittelu k:ssa vaiheessa Jokaisessa vaiheessa: Järjestetään alkiot lokeroihin yhden numeron mukaan, aloittaen vähiten merkitsevästä numerosta Poimitaan alkiot lokeroista, aloittaen pienimmästä lokerosta Sijoitus lokeroihin tehdään stabiilisti eli uusi alkio lisätään lokeronsa viimeiseksi alkioksi Lokeroita tarvitaan d kpl Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 28/30

Kantalukulajittelu // Järjestettävät alkiot listassa lis for (i = 1; i <= k; i++) // vaiheet 1, 2,..., k { 1. for (j = 0; j < d; j++) Tyhjennetään lokero j 2. for each (alkio a in lista lis) { Poistetaan alkio a listasta lis Lisätään alkio a avaimensa i:nnen numeron mukaisen lokeron viimeiseksi alkioksi } // Lista lis on nyt tyhjä 3. for (j = 0; j < d; j++) Lisätään lokeron j alkiot listan lis loppuun } Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 29/30

Kantalukulajittelu Avaimet: Avaimet kokonaislukuja Mutta: Esimerkiksi merkkijonot voidaan aina esittää kokonaislukujen avulla Aikavaativuus: Lokerolajittelun vaativuus O(n + m), missä m avainten lkm Lokerolajittelu k kertaa, avainten lkm aina d Vaativuus O(k(n + d)) Luvut k ja d vakioita O(n) Algoritmit 1 Kevät 2017 Luento 12 Ke 15.2.2017 30/30