811312A Tietorakenteet ja algoritmit, , Harjoitus 4, Ratkaisu

Samankaltaiset tiedostot
811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

811312A Tietorakenteet ja algoritmit, , Harjoitus 2, Ratkaisu

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A Tietorakenteet ja algoritmit II Algoritmien analyysi

811312A Tietorakenteet ja algoritmit , Harjoitus 1 ratkaisu

2. Algoritmien analyysi

( ) k 1 = a b. b 1) Binomikertoimen määritelmän mukaan yhtälön vasen puoli kertoo kuinka monta erilaista b-osajoukkoa on a-joukolla.

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 1. Luento 12 Ke Timo Männikkö

T Datasta tietoon, syksy 2005 Laskuharjoitus 8.12., ratkaisuja Jouni Seppänen

3 10 ei ole rationaaliluku.

Kertaa tarvittaessa induktiota ja rekursiota koskevia tietoja.

MATP153 Approbatur 1B Harjoitus 1, ratkaisut Maanantai

****************************************************************** ****************************************************************** 7 Esim.

4 Tehokkuus ja algoritmien suunnittelu

Algoritmit 1. Luento 11 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

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

2 avulla. Derivaatta on nolla, kun. g( 3) = ( 3) 2 ( 3) 5 ( 3) + 6 ( 3) = 72 > 0. x =

1. (Jatkoa Harjoitus 5A tehtävään 4). Monisteen esimerkin mukaan momenttimenetelmän. n ne(y i Y (n) ) = 2E(Y 1 Y (n) ).

Algoritmit 1. Luento 3 Ti Timo Männikkö

Insinöörimatematiikka IA

8. Lajittelu, joukot ja valinta

Algebra I Matematiikan ja tilastotieteen laitos Ratkaisuehdotuksia harjoituksiin 5 (6 sivua)

MATA172 Sami Yrjänheikki Harjoitus Totta vai Tarua? Lyhyt perustelu tai vastaesimerkki!

Tunnuslukuja 27 III TUNNUSLUKUJA

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

Tehtäviä neliöiden ei-negatiivisuudesta

Ryhmän osajoukon generoima aliryhmä ja vapaat ryhmät

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

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

Algoritmit 2. Demot Timo Männikkö

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 1. Demot Timo Männikkö

1 Erilaisia tapoja järjestää

Matematiikan tukikurssi

Harjoitustehtävien ratkaisuja

Tietorakenteet ja algoritmit - syksy

Algoritmit 1. Demot Timo Männikkö

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

10 Kertolaskusääntö. Kahta tapahtumaa tai satunnaisilmiötä sanotaan riippumattomiksi, jos toisen tulos ei millään tavalla vaikuta toiseen.

Algoritmit 2. Luento 3 Ti Timo Männikkö

9 Erilaisia tapoja järjestää

Algoritmit 2. Luento 3 Ti Timo Männikkö

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

Algoritmit 2. Luento 8 To Timo Männikkö

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

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Luento 2 Ke Timo Männikkö

5 Kertaluokkamerkinnät

Matematiikan tukikurssi. Kertausta 1. välikokeeseen. Tehtävät

1 Eksponenttifunktion määritelmä

Otantajakauma. Otantajakauman käyttö päättelyssä. Otantajakauman käyttö päättelyssä

Todennäköisyys, että yhden minuutin aikana saapuu 2 4 autoa.

3 Lukujonot matemaattisena mallina

Sormenjälkimenetelmät

LIITTEET Liite A Stirlingin kaavan tarkkuudesta...2. Liite B Lagrangen kertoimet...3

Solmu 3/ toteutuu kaikilla u,v I ja λ ]0,1[. Se on aidosti konveksi, jos. f ( λu+(1 λ)v ) < λf(u)+(1 λ)f(v) (2)

Algoritmit 1. Luento 5 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit, VI Algoritmien suunnitteluparadigmoja

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

3.9. Mallintaminen lukujonojen avulla harjoituksia

Algoritmit 1. Luento 1 Ti Timo Männikkö

Johdatus diskreettiin matematiikkaan Harjoitus 5, Ratkaise rekursioyhtälö

3.2 Polynomifunktion kulku. Lokaaliset ääriarvot

3 Lajittelualgoritmeista

Päähakemisto Tehtävien ratkaisut -hakemisto Vuosi Indeksi , ,7. a) Jakamalla 1, ,76 %. c) Jakamalla 0,92802

Päähakemisto Tehtävien ratkaisut -hakemisto Vuosi Indeksi , ,8. a) Jakamalla 110,8 1,05423 saadaan inflaatioprosentiksi noin

Algoritmit 2. Luento 7 Ti Timo Männikkö

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

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

Matematiikan tukikurssi

Harjoitustehtävien ratkaisuja

Talousmatematiikka (3 op) Sisältö. Tero Vedenjuoksu. Yhteystiedot: Tero Vedenjuoksu Työhuone M231

TILASTOT: johdantoa ja käsitteitä

Diskreetin Matematiikan Paja Ratkaisuja viikolle 4. ( ) Jeremias Berg. n(n + 1) 2. k =

Tehtävä 1. Voidaanko seuraavat luvut esittää kahden neliön summina? Jos voidaan, niin kuinka monella eri tavalla? (i) n = 145 (ii) n = 770.

Analyysi A. Harjoitustehtäviä lukuun 1 / kevät 2018

1. osa, ks. Solmu 2/ Kahden positiivisen luvun harmoninen, geometrinen, aritmeettinen ja + 1 u v 2 1

Algoritmi on periaatteellisella tasolla seuraava:

Epäyhtälöoppia matematiikkaolympialaisten tehtäviin

811312A Tietorakenteet ja algoritmit I Johdanto

Äärettämän sarjan (tai vain sarjan) sanotaan suppenevan eli konvergoivan, jos raja-arvo lims

= true C = true) θ i2. = true C = false) Näiden arvot löydetään kuten edellä Kun verkko on opetettu, niin havainto [x 1

Lataa ilmaiseksi mafyvalmennus.fi/mafynetti. Valmistaudu pitkän- tai lyhyen matematiikan kirjoituksiin ilmaiseksi Mafynetti-ohjelmalla!

Tilastollinen päättely II, kevät 2017 Harjoitus 3B

Algoritmit 2. Luento 2 To Timo Männikkö

HEIJASTUMINEN JA TAITTUMINEN

Tilastollinen päättömyys, kevät 2017 Harjoitus 5b

Laskennan mallit (syksy 2010) Harjoitus 8, ratkaisuja

MS-A0402 Diskreetin matematiikan perusteet Yhteenveto, osa I

9.7 Matriisinormit. Vaasan yliopiston julkaisuja 225. Ei siis lainkaan ongelmia defektiivisyydestä.

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

8. Lajittelu, joukot ja valinta

Transkriptio:

81112A Tietoraketeet ja algoritmit, 217-218, Harjoitus 4, Ratkaisu Harjoitukse aiheita ovat algoritmie aikakompleksisuus ja lajittelualgoritmit Tehtävä 4.1 Selvitä seuraavie rekursioyhtälöide ratkaisuje kompleksisuusluokat käyttäe lueoissa esitettyä lausetta M (Master Theorem: a 9T ( /, b 9T ( /. Lause M. (Master Theorem Olkoot a 1 b 1 kokoaislukuvakioita ja f fuktio. Rekursio a / b f ( samoi kui rekursio a / b f ( ratkaisulle pätee seuraavaa: log a 1 Jos f ( O( b jollaki vakiolla, ii 2 Jos f (, ii lg log a Jos f ( ( b jollaki vakiolla ja jos a f ( / b c f ( jollaki vakiolla c 1 ja riittävä suurilla luvu arvoilla, ii f ( 2 Ratkaisu. Kohdassa a o a 9, b, jote log a log 9 log 2. Verrataa fuktiota f ( O( 1 ja saadaa f ( fuktioo 2 1 b 2, joka o merkittävästi suurempi kui f(; tässä, jolloi voidaa soveltaa lausee M esimmäistä kohtaa (edellä siis log a 2 b. Kohdassa b ovat a ja b kute edellä ja f (. Nyt verrataa fuktiota f( fuktioo 2, joka o merkittävästi pieempi kui f(; tällä kertaa 2 1 ( O( f, sekä a f ( / b 9 ( / 1/ 1/ f (. Site voidaa soveltaa lausee kolmatta kohtaa (tässä 2 ja saadaa f (

Tehtävä 4.2 Seuraava rekursiivie algoritmi toteuttaa puolitushau järjestettyy taulukkoo. Testaa algoritmia hakemalla taulukosta A = [11,2,1,47,52,68,71,89,94,15,112,126,1,148] alkio 15. Määritä lausee M avulla tiukka kompleksisuusluokka ( -otaatio. Syöte: Taulukko A[1,..,], >= 1, tauluko alkiot ovat kasvavassa järjestyksessä A[1] <= A[2] <= <= A[]. Luvut 1<=p<=q<=. Luku x jota haetaa taulukosta väliltä A[p,..,q]. Tulostus: Alkio x ideksi taulukossa tai arvo -1, jos x ei esiiy taulukossa välillä A[p,..,q]. HAKU(A,p,q,x 1. if p==q 2. if A[p]==x. retur p 4. else 5. retur -1 6. else 7. r = (p + q/2 8. if x<=a[r] 9. retur HAKU(A,p,r,x 1. else 11. retur HAKU(A,r+1,q,x Ratkaisu. Ku haetaa arvoa 15 taulukosta A, saadaa seuraava kutsujoo: HAKU(A,1,14: r = 7 ja A[r] = 71; 15 > A[r] HAKU(A,8,14: r = 11 ja A[r] = 112; 15 <= A[r] HAKU(A,8,11: r = 9 ja A[r] = 94 <= 15; 15 > A[r] HAKU(A,1,11 : r = 1 ja A[1] = 15; 15 <= A[r] HAKU(A,1,1: p==q ja A[1]==15: palautetaa 1 Algoritmi palauttaa siis alkio 15 ideksi taulukossa A. Olkoo algoritmi suoritusaika T (, ku haetaa paikkaa tauluko osasta, joka koko o. Lukuu ottamatta rekursiivista kutsua, algoritmissa suoritetaa vakiomäärä vakioaikaisia operaatioita (korkeitaa kaksi vertailua ja yksi laskutoimitus sekä sijoitus. Näi olle rekursiota lukuu ottamatta suoritusaika o vakio c. Jos >1, taulukko puolitetaa ja kutsutaa algoritmia puolitetulle taulukolle. Tämä vie aja T (/ 2. Näi saadaa rekursioyhtälö / 2 c. Sovelletaa lausetta M: Nyt a 1, b 2, jote log a log 1 log 2. Edellee f ( c c ( log a b lg lg lg.. Site lausee M tapaukse 2 mukaa b 2 2 Algoritmi o siis kompleksisuusluokaltaa logaritmie. Tämä olisi ollut varsi helppo päätellä myös käyttämättä lausetta M, koska tauluko osa puolittuu jokaisella kutsulla.

Tehtävä 4. Lukujoo tyyppiarvoksi eli moodiksi saotaa siiä useimmi esiityvää lukua. Esimerkiksi joo,1,2,5,,,4,1,4,4,,5 tyyppiarvo o. Suuittele ja implemetoi (joko C- tai Pytho-kielellä algoritmi, joka etsii lukutauluko A moodi. Algoritmi aikakompleksisuusluokka saa olla O( lg(, ku syötetauluko koko o. Ratkaisu. Käytetää hyväksi lajittelua: Suuruusjärjestyksee saatetusta taulukosta o helppo hakea moodi käymällä taulukko kerra läpi: Lasketaa kuika mota kertaa sama arvo esiityy peräkkäi ja pidetää yllä tietoa siitä, mikä arvo o esiityyt suurimma määrä kertoja. Tällöi algoritmiksi saadaa seuraava: Syöte: Taulukko A[1,..,], >= 1. Tulostus: Tauluko alkioide tyyppiarvo MODE(A 1. HEAPSORA //Lajittele taulukko käyttäe kekolajittelua 2. mode = A[1]. freq = 1 4. temp = 1 5. i = 2 6. while i <= do 7. if A[i]!= A[i-1] 8. temp = 1 9. else 1. temp = temp + 1 11. if temp > freq 12. freq = temp 1. mode = A[i] 14. i = i+1 15. retur mode Ku tullaa algoritmi riville 2, taulukko o järjestyksessä. Aluksi muuttuja mode o tauluko esimmäie arvo. Silmukassa tarkastellaa tauluko jokaie alkio ideksistä 2 lähtie. Muuttuja temp laskee kulloiki tarkasteltava tauluko arvo esiitymiskertoja: ku arvo vaihtuu, aloitetaa uudellee arvosta 1. Muuttuja freq arvo o toistaiseksi useimmi esiityee arvo esiitymislukumäärä: jos muuttuja temp arvo ylittää muuttuja freq arvo, muuttujaa freq päivitetää ja myös muuttuja mode päivitetää taulukossa esiityväksi arvoksi. Näi olle muuttuja mode arvo o tauluko tarkastellu osa moodi. Ku algoritmi päättyy, muuttuja arvo o koko tauluko moodi. Algoritmi etsii siis tauluko moodi. Kekolajittelu aikakompleksisuus o luokkaa O( lg(. Tämä lisäksi algoritmissa tehdää vakioaikaie operaatio jokaiselle tauluko alkiolle. Algoritmi loppuosa aikakompleksisuus o siis luokkaa O( ja algoritmi kokoaiskompleksisuus luokkaa O( lg(. Yllä maiittu algoritmi o implemetoitu C- ja Pytho-kielillä likitettyihi kooditiedostoihi. Lajittelumetodiksi voi valita kekolajittelu tai kirjasto Quicksortlajittelu.

Tehtävä 4.4 Kirjoita ohjelma (joko C- tai Pytho-kielellä, jolla voidaa testata lajittelualgoritmie suoritusaikoja. Kirjoita fuktiot, jotka suorittavat kekolajittelu ja pikalajittelu (Quicksort ja testaa äide suoritusaikoja erikokoisilla kokoaislukutaulukoilla, jotka alustetaa satuaisluvuilla. Algoritmit ovat liitteeä tehtävie jälkee. Ylimääräie tehtävä. Mikäli aikaa jää, testaa vielä seuraavaa: Pikalajittelua voi yrittää parataa site, että lajittelee tauluko esi karkeaa suuruusjärjestyksee Quicksortalgoritmilla site, että rekursiivista Quicksort-kutsua ei tehdä, mikäli lajiteltava väli pituus o jotaki kyysarvoa pieempi. Liitteeä o tällaie algoritmi (QuicksortCutoff. Tällöi taulukkoo jää kyysarvoa lyhempiä välejä, jotka eivät ole järjestyksessä, mutta edellise osaväli arvot ovat pieempiä kui seuraava. Tällöi taulukko voidaa opeasti lajitella loppuu käyttäe lisäyslajittelua. Implemetoi tämä ja testaa aiaki kyysarvoilla 1, 5 ja 1. Nopeutuuko lajittelu puhtaasee Quicksortlajitteluu verrattua? Ratkaisu. Esimerkkiohjelmat C- ja Pytho-kielillä o likitetty ohee. Sekä kekolajittelu että Quicksorti aikakompleksisuus o luokkaa Θ(lg(. Tosi Quicksorti huooimma tapaukse aikakompleksisuus o luokkaa Θ( 2, mutta Quicksort toimii kuiteki keskimääri 2-5 kertaa opeammi kui kekolajittelu. Testikoeella saatii seuraavia suoritusaikoja kekolajittelulle: Kekolajittelu: C-ohjelma Tauluko koko 2 5 1 2 Aika (s.125.1.56 1.2 Kekolajittelu: Pytho-ohjelma Tauluko koko 2 5 1 2 Aika (s.25.74 1.5.47 Quicksort-algoritmi osoittautui vajaa kolme kertaa opeammaksi kui kekolajittelu. C-kielisellä ohjelmalla algoritmi suoriutui kohtuudella vielä taulukoista, joide koko oli 5. Yhdistelmäalgoritmi toimi hiema opeammi. Paras kyysarvo kokeilluista oli, tosi erot eivät olleet suuret Quicksort: C-ohjelma Tauluko koko 2 5 1 2 Aika (s.5.125.25.5 Quicksort+lisäyslajittelu, kyysarvo 1: C-ohjelma Tauluko koko 2 5 1 2 Aika (s.46.19.2.5 Quicksort+lisäyslajittelu, kyysarvo : C-ohjelma Tauluko koko 2 5 1 2 Aika (s.47.19.219.5 Quicksort+lisäyslajittelu, kyysarvo 5: C-ohjelma Tauluko koko 2 5 1 2 Aika (s.46.125.24.5

Pytho-ohjelmassa Quicksorti ja lisäyslajittelu yhdistelmä suoritusaikaa vaikutti voimakkaasti se, kuika suurelta lukuväliltä satuaislukuja arvottii. Tämä oki luoollista, koska tauluko kokoo ähde piei lukuväli aiheuttaa se, että taulukkoo arvotaa samoja lukuja. Tällöi taulukko o hyvi lähellä järjestettyä taulukkoa jo keskeytety Quicksorti jälkee. Alla aetuissa suoritusajoissa o arvottu satuaislukuja väliltä [1,1] : Quicksort: Pytho-ohjelma Tauluko koko 2 5 1 2 Aika (s 1.6.8 9.5 22.1 Quicksort+lisäyslajittelu, kyysarvo 1: Pytho -ohjelma Tauluko koko 2 5 1 2 Aika (s 1.27.26 7.4 2. Quicksort+lisäyslajittelu, kyysarvo : Pytho-ohjelma Tauluko koko 2 5 1 2 Aika (s 1.4.44 7.8 14.7 Quicksort+lisäyslajittelu, kyysarvo 5: Pytho-ohjelma Tauluko koko 2 5 1 2 Aika (s 1.46.81 8.1 16. Käytetyt ohjelmakoodit o likitetty ratkaisutiedosto alle.