811312A Tietorakenteet ja algoritmit, 2015-2016, Harjoitus 2, Ratkaisu



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

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

811312A Tietorakenteet ja algoritmit II Algoritmien analyysi

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A Tietorakenteet ja algoritmit , Harjoitus 1 ratkaisu

MATP153 Approbatur 1B Harjoitus 1, ratkaisut Maanantai

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

2. Algoritmien analyysi

1 Erilaisia tapoja järjestää

811312A Tietorakenteet ja algoritmit, VI Algoritmien suunnitteluparadigmoja

Lisää segmenttipuusta

3 10 ei ole rationaaliluku.

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

4 Tehokkuus ja algoritmien suunnittelu

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

Algoritmit 1. Luento 2 Ke Timo Männikkö

A TIETORAKENTEET JA ALGORITMIT

Matematiikan tukikurssi

Johdatus diskreettiin matematiikkaan Harjoitus 7,

Aluksi Kahden muuttujan lineaarinen epäyhtälö

811312A Tietorakenteet ja algoritmit V Verkkojen algoritmeja Osa 2 : Kruskalin ja Dijkstran algoritmit

Matematiikan tukikurssi

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

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

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

Matematiikan tukikurssi

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

Algoritmit 2. Demot Timo Männikkö

Sormenjälkimenetelmät

Algoritmit 1. Luento 3 Ti Timo Männikkö

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

Matematiikan tukikurssi

Insinöörimatematiikka IA

Tutkimusmenetelmät-kurssi, s-2004

1.1 Luvut ja lukujoukot

4 KORKEAMMAN KERTALUVUN LINEAARISET DIFFERENTIAALIYHTÄLÖT. Kertaluvun n lineaarinen differentiaaliyhtälö ns. standardimuodossa on

Algoritmit 2. Luento 7 Ti Timo Männikkö

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

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

RATKAISUT x 2 3 = x 2 + 2x + 1, eli 2x 2 2x 4 = 0, joka on yhtäpitävä yhtälön x 2 x 2 = 0. Toisen asteen yhtälön ratkaisukaavalla saadaan

Nopea kertolasku, Karatsuban algoritmi

8. Lajittelu, joukot ja valinta

Algoritmit 1. Demot Timo Männikkö

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

Ohjelmoinnin perusteet Y Python

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)

Matematiikan tukikurssi 3.4.

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

Esimerkki 8. Ratkaise lineaarinen yhtälöryhmä. 3x + 5y = 22 3x + 4y = 4 4x 8y = r 1 + r r 3 4r 1. LM1, Kesä /68

5. Väliestimoi tehtävän 3 tilanteessa tulppien keskimääräinen kestoa.

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

Epäyhtälöoppia matematiikkaolympialaisten tehtäviin

(x 0 ) = lim. Derivoimissääntöjä. Oletetaan, että funktiot f ja g ovat derivoituvia ja c R on vakio. 1. Dc = 0 (vakiofunktion derivaatta) 2.

Algoritmit 2. Luento 8 Ke Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

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

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Tehtäviä neliöiden ei-negatiivisuudesta

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

monissa laskimissa luvun x käänteisluku saadaan näyttöön painamalla x - näppäintä.

MAA10 HARJOITUSTEHTÄVIÄ

Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Ta

Tietorakenteet ja algoritmit - syksy

Matematiikan tukikurssi

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

2.5. Eksponenttifunktio ja eksponenttiyhtälöt

Algoritmit 2. Demot Timo Männikkö

10. Painotetut graafit

Johdatus diskreettiin matematiikkaan Harjoitus 5, Ratkaise rekursioyhtälö

Pseudoalkuluvuista ja alkulukutestauksesta

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

MS-A0402 Diskreetin matematiikan perusteet Yhteenveto, osa I

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 14 Ke Timo Männikkö

4.3 Signaalin autokorrelaatio

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

9 Erilaisia tapoja järjestää

Tietotyypit ja operaattorit

Ohjelmoinnin peruskurssi Y1

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

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Algoritmit 1. Luento 13 Ti Timo Männikkö

2.2 Täydellinen yhtälö. Ratkaisukaava

Algoritmit 2. Luento 2 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit I Johdanto

Luonnollisten lukujen laskutoimitusten määrittely Peanon aksioomien pohjalta

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

Kombinatoriikka. Iiro Honkala 2015

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

Algoritmit 1. Luento 5 Ti Timo Männikkö

Tilastollinen todennäköisyys

n = 100 x = %:n luottamusväli µ:lle Vastaus:

Tilastolliset menetelmät: Tilastolliset testit

Generoivista funktioista

Luento 6. June 1, Luento 6

MS-A0402 Diskreetin matematiikan perusteet Yhteenveto, osa I

Transkriptio:

8111A Tietoraketeet ja algoritmit, 15-16, Harjoitus, Ratkaisu Harjoituksessa käsitellää asymptoottista merkitätapaa ja algoritmie aikakompleksisuutta. Tehtävä.1 a Oko f ( O( tai f (, ku 1 f ( f, 4 ( 5 f ( lg(? b Oko f ( O(, ku 1 f ( 1 f (? Perustele vastauksesi. Ratkaisu. Määritelmä mukaa f(, jos o olemassa reaalilukuvakiot c1> ja c> ja kokoaisluku site, että c1* f( c* aia, ku. Siis -otaatiolla esitetyt kompleksisuusluokat vaativat sekä ala- että yläraja. Vastaavasti määritelmä mukaa f( O(, jos o olemassa reaalilukuvakiovakio c> ja kokoaisluku site, että f( c* aia, ku. O-otaatiolla esitetyille kompleksisuusluokille riittää siis yläraja. Näi olle -otaatio kompleksisuusluokasta seuraa vastaava O-otaatio kompleksisuusluokka. a 1 Nyt 1* + = f( + = 4* aia, ku >1, jote f(. Tästä seuraa heti f( O(. Huom! Tässä oli c1 = 1>, c = 4> ja =1. a Ku, o 1 4 4 4 4 4 /9 ja siis / 9, mistä 5 5 /9 4 / 9. Olipa c mikä tahasa positiivie vakio, ii 4 4 / 9 c (ja 4 / 9 > c, kuha vai > 9c/4. Siis f ( O( ja tieteki myös f (. Huom! Tässä = max {9c/4, }. a Positiivisilla kokoaisluvuilla pätee aia lg(. Site lg( ja f ( O(. Jos olisi vakio c ja luku, joille lg( c eli c f ( c aia ku, ii lg( aia ku, mikä o mahdotota. Site f (. b 1 Ku f ( 1, ii f ( *, mistä seuraa, että ( O( f. b Olkoo joille f f ( ja oletetaa, että ( O( ( c aia ku. Silloi mikä o mahdotota. Siis f ( O(. f. Silloi olisi vakio c ja luku, c ( ja c aia ku,

Tehtävä. Seuraavaa lisäyslajittelua voidaa käyttää piete taulukoide lajitteluu. Algoritmi oikeellisuus o perusteltu lueoilla. Määritä (ja perustele algoritmi kompleksisuusluokka. Riittää tarkastella aioastaa huooita tapausta. Syöte: Taulukko A[,..,-1], >= 1 Tuloste: Tauluko luvut järjestyksessä A[] <= <= A[-1] LISAYS(A 1. for j = 1 to -1. k = A[j]. i = j-1 4. while i>= && A[i]>k 5. A[i+1] = A[i] 6. i = i-1 7. A[i+1] = k 8. retur Ratkaisu. Rivejä 1- suoritetaa -1 kertaa, samoi riviä 7. Jos taulukko o kääteisessä järjestyksessä (huooi tapaus, while-silmuka rivejä 5 ja 6 joudutaa suorittamaa jokaisella kierroksella j kertaa eli yhteesä 1++ + -1 = (-1/ kertaa. Rivi 8 suoritetaa kerra. Riviä 4 suoritetaa joka kierroksella yhde kerra eemmä kui se sisällä olevia rivejä, jote huooimmassa tapauksessa riviä 4 suoritetaa ++ + (-1 + = (-1/ + -1 kertaa. Site suoritettavia rivejä tulee pahimmassa tapauksessa 4(-1 + (-1/ + 1 + (-1/ + -1 = 4-4 + + 1 + / - / + -1 = / + 7/ -4. Huomataa, että lisäyslajittelu kompleksisuusluokka pahimmassa tapauksessa o (, sillä suurilla : arvoilla vaikuttavi termi o /. Voidaa myös osoittaa, että keskimääräie tapaus o samaa luokkaa. Tehtävä. Selvitä seuraavie rekursioyhtälöide ratkaisuje kompleksisuusluokat käyttäe lueoissa esitettyä lausetta M (Master Theorem: a 9T ( /, b c 16T ( / 4, T ( /.

Lause M. (Master Theorem Olkoot 1b 1 a kokoaislukuvakioita ja f fuktio. Rekursio a / b f ( a / b f ( samoi kui rekursio ratkaisulle pätee seuraavaa: 1 Jos f ( O( b jollaki vakiolla, ii logb a Jos f ( b, ii Jos ( ( b vakiolla 1 logb a lg f jollaki vakiolla ja jos a f ( / b c f ( c ja riittävä suurilla luvu arvoilla, ii f ( jollaki Ratkaisu. Kohdassa a o a 9, b, jote log 9 log. Edellee o b 1 f ( O( ja voidaa soveltaa lausee M esimmäistä kohtaa (tässä siis 1 ja saadaa b. Kohdassa b o a 16, b 4, jote log 16 log 4. Edellee f ( ( b 4 4, jote sovelletaa lausee M toista kohtaa ja saadaa b lg lg. f (. Näi olle log 1 Kohdassa c taas o a, b ja b ja koska 1 f ( O(, sekä a f ( / b ( / 1/ 4 1/ 4 f (, voidaa soveltaa lausee kolmatta kohtaa (tässä ja saadaa f (

Tehtävä.4 Seuraava rekursiivie algoritmi toteuttaa puolitushau järjestettyy taulukkoo. Testaa algoritmia hakemalla taulukosta A = [11,,1,47,5,68,71,89,94,15,11,16,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[] <= <= 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. if A[p]==x. retur p 4. else 5. retur -1 6. else 7. r = (p + q/ 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] = 11; 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 tauluko osasta, joka koko o paikkaa. Lukuu ottamatta rekursiivista kutsua, algoritmissa suoritetaa vakiomäärä vakioaikaisia operaatioita (korkeitaa kaksi vertailua ja yksi 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 (/. Näi saadaa rekursioyhtälö / c. Sovelletaa lausetta M: Nyt a 1, b, jote log 1 log. Edellee f ( c c ( b lg lg lg.. Site lausee M tapaukse mukaa Algoritmi o siis kompleksisuusluokaltaa logaritmie. b

Tehtävä.5. Ohjelmissa tarvitaa usei erilaiste objektie joukkoje satuaista järjestämistä. Esimerkiksi korttipelissä korttie sekoittamie peli alussa asettaisi paka 5 korttia satuaisee järjestyksee. Tällaista algoritmia saotaa satuaise permutaatio tuottamiseksi. Tarkastele seuraavaa kahta algoritmia, joilla voidaa järjestää tuottaa lukuje 1.. satuaise järjestykse sisältävä kokoaislukutaulukko A[..-1]. a Algoritmi 1, ilma aputaulukkoa Syöte: Luku >= 1. Taulukko A[,..,-1]. Tulostus: Taulukossa A luvut 1.. satuaisessa järjestyksessä. RAND_PERM_1(,A 1. for i = to -1. ewumber = false. while ot ewumber 4. x = satuaisluku väliltä 1.. 5. ewumber = true 6. for j = to i-1 7. if x == A[j] 8. ewumber = false 9. A[i] = x 1. retur b Algoritmi, käyttää aputaulukkoa Syöte: Luku >= 1. Taulukko A[,..,-1]. Tulostus: Taulukossa A luvut 1.. satuaisessa järjestyksessä. RAND_PERM_(,A 1. varaa taulukko used[1..]. for i = to -1. used[i] = false 4. for i = to -1 5. usedumber = true 6. while usedumber 7. x = satuaisluku väliltä 1.. 8. usedumber = used[x] 9. A[i] = x 1. used[x] = true 11. retur Ohjelmoi kumpiki algoritmi (joko C- tai Pytho-kielellä ja mittaa suorituksee kuluvaa aikaa kasvattae tauluko kokoa. Mikä kokoisilla taulukoilla o käytäöllistä suorittaa algoritmeja? Osaatko arvioida algoritmie aikakompleksisuutta? HUOM! Kumpikaa edellisistä ei ole erityise opea tapa tuottaa satuaispermutaatioita, vaa käytäöllisempää olisi soveltaa esimerkiksi seuraavaa algoritmia: Syöte: Luku >= 1. Taulukko A[,..,-1]. Tulostus: Taulukossa A luvut 1.. satuaisessa järjestyksessä. RAND_PERM(,A 1. for i = to -1. A[i] = i+1. for i = to -1 4. x = satuaisluku väliltä..i 5. vaihda A[i] ja A[x] 6. retur Halutessasi voit implemetoida tämäki algoritmi ja verrata suoritusaikoja edellisii.

Ratkaisu. Esimerkkiratkaisut o likitetty alle. Testitietokoeella saatii esimmäise algoritmi Pytho-toteutuksille seuraavat ajat (sekueissa vaihtelevakokoisilla taulukoilla: Tauluko koko 1 4 8 Aika (s.96. 14.1 54.1 Taulukosta ähdää, että Pytho-ohjelmasta tulee varsi käyttökelvoto ku tauluko koko lähestyy 1:a. Toie algoritmi o suorituskyvyltää huomattavasti parempi. Pytho-toteutuksille saatii seuraavat suoritusajat: Tauluko koko 5 5 Aika (s.5 1. 7.4 1.9 64.1 Pytho-ohjelma o siis käyttökelpoie vielä ku tauluko koko lähestyy miljooaa. C-ohjelmat ovat kääettyiä yleisesti opeampia kui Pytho-ohjelmat. C-kieliset toteutukset suoriutuivat seuraavasti: Algoritmi 1: Tauluko 5 1 4 koko Aika (s.95.65 17.8 5.8 56.8 Algoritmi : Tauluko 5 1 5 1 koko Aika (s.48 1.1.1 8.5 19.75 Suoritusajoista huomataa, että algoritmie asymptoottie kasvu o samalaista, mutta C- ohjelmaa voidaa suorittaa oi viis kertaa suuremmilla taulukoilla kui Pytho-ohjelmaa. Itse asiassa voidaa äyttää, että esimmäise algoritmi suoritusaika o luokkaa lg( ja toise algoritmi suoritusaika o luokkaa lg(, ku tauluko koko o. Taulukoidut suoritusajat ovat jokseeki tämä mukaiset. Suoritusaikoje aalyysi vaatii kuiteki meetelmiä, joita ei esitetä tällä kurssilla. Kolmas algoritmi o selvästi aikakompleksisuudeltaa lieaarie (luokkaa Θ(, ku tauluko koko o. Esimerkkitoteutuksissa o myös kolmas algoritmi implemetoitua. Ajamalla sitä voi havaita, että se o toistaki algoritmia opeampi.