811312A Tietoraketeet ja algoritmit 2016-2017 II Algoritmie aalyysi
Sisältö 1. Algoritmie oikeellisuus 2. Algoritmie suorituskyvy aalyysi 3. Master Theorem 811312A TRA, Algoritmie aalyysi 2
II.1. Algoritmie oikeellisuus Yksi osa algoritmie aalyysistä Varmistaa, että algoritmi toimii oikei Osittaie oikeellisuus Jos algoritmi päättyy, se tuottaa oikea tulokse Täydellie oikeellisuus Algoritmi päättyy ja tuottaa oikea tulokse Algoritmi oikeaksi todistamie = Todistettava osittaie oikeellisuus ja algoritmi päättymie 811312A TRA, Algoritmie aalyysi 3
II.1.1 Algoritmi oikeaksi todistamie Tällä kurssilla ei käytetä formaaleja meetelmiä Oikea tulokse varmistamie: käytetää väitteitä, jotka osoitetaa oikeaksi ja joista seuraa algoritmi oikeellisuus Usei ivariatteja = omiaisuuksia, jotka ovat voimassa tietyssä kohdassa koko algoritmi suoritukse aja Päättymise varmistamie: käytetää kovergetteja Yleesä arvoja, jotka pieeevät tai kasvavat ja päättävät algoritmi, ku saavat joku tiety arvo 811312A TRA, Algoritmie aalyysi 4
II.1.1.1 Esimerkki: Kolme luvu maksimi Syöte: Luvut a,b ja c Tulostus: Suuri luvuista a,b ja c MAKSIMI3a,b,c) 1. x = a 2. if b > x 3. x = b 4. // VÄITE 1: x = maxa,b) 5. if c > x 6. x = c 7. // VÄITE 2: x = maxa,b,c) 8. retur x 811312A TRA, Algoritmie aalyysi 5
II.1.1.2 Esimerkki: Tauluko arvoje miimi Syöte: Taulukko A[1,..,], >= 1 Tulostus: Piei luvuista A[1],, A[] MINIMIA) 1. i = 2 i o kovergetti 2. x = A[1] 3. while i <= do Silmukkaivariatti: 4. if A[i] < x Ku i=k, rivillä 3 muuttuja 5. x = A[i] 6. i = i+1 x arvo o piei tauluko 7. retur x arvoista A[1],, A[k-1] 811312A TRA, Algoritmie aalyysi 6
II.1.1.3 Esimerkki: Haoi torit Alkutilae: N kiekkoa Tavoite: 1 2 3 Sääöt: 1. Kiekkoja siirretää yksi kerrallaa paalusta toisee 2. Vai pieemmä kieko saa siirtää toise päälle Keksi siirtosarja tuottava algoritmi 811312A TRA, Algoritmie aalyysi 7
II.1.1.3 Esimerkki: Haoi torit 2) Syöte: Luku N >= 1 ja paaluje umerot A, B ja C Tulostus: Siirtojärjestys N:lle kiekolle paalusta A paaluu B käyttämällä apua paalua C SIIRRÄN,A,B,C) 1. if N==1 2. tulosta A -> B 3. else 4. SIIRRÄN-1,A,C,B) 5. tulosta A -> B 6. SIIRRÄN-1,C,B,A) 7. retur N o kovergetti Väite: Mistä tahasa laillisesta asemasta, jossa N pieitä kiekkoa ovat paalussa A, algoritmi tulostaa laillise siirtosarja, missä ämä N pieitä kiekkoa paaluu B käyttäe apua paalua C eikä siiä siirretä mitää muita kiekkoja. 811312A TRA, Algoritmie aalyysi 8
II.1.1.4 Esimerkki: Lisäyslajittelu Syöte: Taulukko A[0,1,..,-1], >= 1 Tulostus: Järjestys A[0] <= <= A[-1] INSERTION_SORTA) 1. for j = 1 to -1 2. k = A[j] 3. i = j-1 4. while i>=0 ad A[i]>k 5. A[i+1] = A[i] 6. i = i-1 7. A[i+1] = k Ivariatti: Rivillä 1 alkiot A[0, j-1] samat kui alkup. taulukossa, mutta suuruusjärjestyksessä A[0] <= <= A[j-1] i o kovergetti: while päättyy joka for-kierroksella 811312A TRA, Algoritmie aalyysi 9
II.2 Algoritmie suorituskyvy aalyysi Tällä kurssilla ollaa kiiostueita aikakompleksisuudesta = algoritmi vaatima suoritusaja suhteesta algoritmi syöttee kokoo Tarvitaa abstrakti malli koeelle, joka suorittaa algoritmia Tässä käytetää hajasaatikoetta radom-access machie) 811312A TRA, Algoritmie aalyysi 10
II.2.1 Hajasaatikoe Samalaisista muistipaikoista koostuva muisti Prosessori, jolla käytettävissää rekistereitä Dataa mielivaltaisista muistipaikoista rekistereihi Arvoja rekistereistä takaisi muistii Rekistereissä loogisia ja aritmeettisia operaatioita Ohjelma käskyjoukko Em. muisti- ja aritmeettisia operaatioita Suoritusta ohjaavia kotrollikäskyjä Käskyt suoritetaa peräkkäi, ts. ei riakkaista suorittamista 811312A TRA, Algoritmie aalyysi 11
II.2.1 Hajasaatikoe 2) Kaikki perusoperaatiot vaativat sama aja Eroaa reaalikoeista Reaalikoeissa o muitaki perusoperaatioita kui hajasaatikoeessa Aalyysitulokset silti yleesä melko hyviä reaalikoeilleki 811312A TRA, Algoritmie aalyysi 12
II.2.2 Aalyysi: Iteratiiviset algoritmit II.2.2.1 Esimerkki: tauluko summa HUOM! Tässä oletetaa, että koodiriveillä eri suoritusajat c 1,c 2,c 3 Syöte: Taulukko A[1,..,], >= 1 Tulostus: Tauluko alkioide summa SUMMAA) kust. suorituskerrat 1. sum = 0 c1 1 2. for j = 1 to c2 3. sum = sum+a[j] c3 4. retur sum 811312A TRA, Algoritmie aalyysi 13
II.2.2.1 Esimerkki: tauluko summa 2) Saadaa suoritusajaksi c 3 1 c2 c ) Siis muotoa A + B Tällaisia algoritmeja saotaa lieaarisiksi Voidaa suorittaa erittäi suurilla taulukoilla 811312A TRA, Algoritmie aalyysi 14
II.2.2.2 Esimerkki: vaihtolajittelu HUOM! Tässä oletetaa, että koodiriveillä eri suoritusajat c 1,c 2,,c 6 Syöte: Taulukko A[1,..,], >= 1 Tulostus: Tauluko luvut järjestyksessä A[1] <= <= A[] VAIHTOLAJITTELUA) kust. suorituskerrat 1. for i = 1 to c1 2. for j = 1 to c2 = 2 3. if i<j && A[i]>A[j] c3 2 4. x = A[i] c4 i, j 5. A[i] = A[j] c5 i, j 6. A[j] = x c6 i, j ti, j) ti, j) ti, j) ti,j) = 1, jos ehto A[i] > A[j] o tosi ja ti,j) =0 muute. 811312A TRA, Algoritmie aalyysi 15
II.2.2.2 Esimerkki: vaihtolajittelu 2) Saadaa suoritusajaksi 2 c1 c2 c3) c4 c5 c6 ) ti, j) Riippuu tauluko alkuperäisestä järjestyksestä Paras tapaus c c2 c3) Huooi tapaus 1 2 2 c2 c3 c4 c5 c6)/2) c1 -c4 c5 c6)/2) Keskimääräie tapaus 2 c2 c3 c4 c5 c6)/4) c1 -c4 c5 c6)/4) i,j 811312A TRA, Algoritmie aalyysi 16
II.2.2.2 Esimerkki: vaihtolajittelu 4) Paraettu versio: Syöte: Taulukko A[1,..,], >= 1 Tulostus: Luvut järjestyksessä A[1] <= <= A[] VAIHTOLAJITTELU2A) 1. for i = 1 to -1 2. for j = i+1 to 3. if A[i] > A[j] 4. x = A[i] 5. A[i] = A[j] 6. A[j] = x 811312A TRA, Algoritmie aalyysi 17
II.2.2.2 Esimerkki: vaihtolajittelu 5) Paraettu algoritmi oi puolet opeampi kui alkuperäie Suoritusaika silti luokkaa A 2 + B Paratuiko oleellisesti? Tällaiset algoritmit eliöllisiä Suoritusaika pitkä erittäi suurilla taulukoilla 811312A TRA, Algoritmie aalyysi 18
II.2.3 Aalyysi: Asymptoottie merkitätapa Työlästä ja useimmite vaikeaa) laskea tarkkaa suoritusaikaa -> Samaistetaa suoritusajat, jotka ovat samaa luokkaa Esim. ajat 2+3 ja 7+9 samaa luokkaa Esim. ajat 5 2 + 2 ja 21 2 + samaa luokkaa Kummassaki tapauksessa aikafuktiot kasvavat samalla tavalla Aikakompleksisuude käsittelyssä Käytetää s. asymptoottista tarkastelua Käytettävät merkiät: O-merkitä, Θ-merkitä ja - merkitä 811312A TRA, Algoritmie aalyysi 19
II.2.3 Aalyysi: Asymptoottie merkitätapa II.2.3.1 O-merkitä Olkoo g) joki fuktio. Silloi Og)) o iide fuktioide joukko, joita voidaa rajoittaa ylhäältä fuktiolla g: O g )) { f positiiviset vakiot 0 f ) ) ja c g ),aia O olemassa c 0 ku,että sellaiset Fuktio g o fuktio f asymptoottie yläraja Merkitää f) Є Og)) HUOM! Cormei kirjassa epätarkasti f) = Og)) 0 } 811312A TRA, Algoritmie aalyysi 20
c g) f) 0 Fuktio f kasvua voidaa ylhäältä rajoittaa fuktiolla g, jote f) Є Og))
II.2.3.1 O-merkitä 2) Esimerkkejä: f) = 2 2 + 3 f) Є O 2 ), f) Є O 3 ), f) Є O) f) = lg) f) Є O 2 ) 811312A TRA, Algoritmie aalyysi 22
II.2.3.2 -merkitä Olkoo g) joki fuktio. Silloi g)) o iide fuktioide joukko, joita voidaa rajoittaa sekä ylhäältä että alhaalta fuktiolla g: g )) { f ) O olemassa sellaiset positiiviset vakiot c 1 g ) f ) c 2 c 1, c 2 ja 0,että g ),aia ku 0 } Fuktio g asymptoottisesti tarkka raja fuktiolle f Merkitää f) Є g)) HUOM! Cormei kirjassa epätarkasti f) = g)) 811312A TRA, Algoritmie aalyysi 23
c 2 g) f) c 1 g) 0 Fuktio f kasvua voidaa ylhäältä ja alhaalta rajoittaa fuktiolla g, jote f) Є g))
II.2.3.2 -merkitä 2) Esimerkkejä: f) = 2 2 + 3 f) Є 2 ), f) Є 3 ), vaikka f) Є O 3 ) f) = lg) f) Є 2 ), vaikka f) Є O 2 ) 811312A TRA, Algoritmie aalyysi 25
II.2.3.3 -merkitä Olkoo g) joki fuktio. Silloi g)) o iide fuktioide joukko, joita voidaa rajoittaa alhaalta fuktiolla g: g )) { f positiiviset vakiot 0 c g ) ) O olemassa c ja f ),aia 0 ku,että sellaiset Fuktio g o fuktio f asymptoottie alaraja Merkitää f) Є g)) HUOM! Cormei kirjassa epätarkasti f) = g)) 0 } 811312A TRA, Algoritmie aalyysi 26
f) c g) 0 Fuktio f kasvua voidaa alhaalta rajoittaa fuktiolla g, jote f) Є g))
II.2.3.4 Merkitöje omiaisuuksia Kaikki merkiät trasitiivisia: Jos f ) O g )) ja g ) O h )), ii f ) O h )) Jos f ) g )) ja g ) h )), ii f ) h )) Jos f ) g )) ja g ) h )), ii f ) h )) 811312A TRA, Algoritmie aalyysi 28
II.2.3.5 Esimerkki: vaihtolajittelu Aiemmassa vaihtolajitteluesimerkissä aikakompleksisuus kaikissa tapauksissa luokkaa Θ 2 ) Paraettu algoritmi oi puolet opeampi kui alkuperäie: kompleksisuus silti luokkaa Θ 2 ) Ei siis paratuut oleaisesti ku tarkastellaa asymptoottisesti HUOM! Jos tarkastellaa vai aikakompleksisuusluokkaa, ei kustauksilla c 1,, c 6 ole merkitystä! Seuraus: Voidaa olettaa vakiokestoiset operaatiot samaarvoisiksi -> Tarkastelu helpottuu 811312A TRA, Algoritmie aalyysi 29
II.2.3.5 Esimerkki: vaihtolajittelu 2) Kaikki suoritusajat luokkaa Θ 2 ) Yleesä keskitytää huooimma tapaukse tarkasteluu Yläraja suoritusajalle Joskus myös keskimääräie tapaus kiiostava Esim. Quicksort, huooi tapaus Θ 2 ), keskimääräie Θ lg)) Yleesä paras tapaus ei oleellie Usei harviaie erikoistapaus 811312A TRA, Algoritmie aalyysi 30
II.2.3.6 Sisäkkäiste silmukoide kompleksisuus Tutkitaa algoritmia ALGORITMI) 1. for i1 = 1 to 2. for i2 = 1 to... k. for ik = 1 to k+1. k sisäkkäistä silmukkaa. // Joki vakioaikaie operaatio HUOM! Kaikki ideksit kulkevat 1.. eivätkä riipu toisistaa. Muute seuraava tarkastelu ei välttämättä päde. 811312A TRA, Algoritmie aalyysi 31
II.2.3.6 Sisäkkäiste silmukoide kompleksisuus 2) Algoritmi suoritusaika muotoa a k k Miksi? a k-1 k-1 a 1 Aioastaa korkei termi vaikuttaa kompleksisuusluokkaa -> Algoritmi luokkaa Θ k ) Jos algoritmi kompleksisuusluokka o O k ) sitä saotaa polyomiaikaiseksi Polyomiaikaisia algoritmeja pidetää laskeallisesti sovellettavia a 0 811312A TRA, Algoritmie aalyysi 32
II.2.4 Aalyysi: Rekursiiviset algoritmit Rekursiivisille algoritmeille tarvitaa uusia meetelmiä: 1. Rekursiopuu avulla tarkastelu 2. Iduktiivie päättely 3. Rekursioyhtälö muodostamie ja Master Theorem 811312A TRA, Algoritmie aalyysi 33
II.2.4.1 Esimerkki: Haoi torit Syöte: Luku N >= 1 ja paaluje umerot A, B ja C Tulostus: Siirtojärjestys N:lle kiekolle paalusta A paaluu B käyttämällä apua paalua C SIIRRÄN,A,B,C) 1. if N==1 the 2. tulosta A -> B 3. else 4. SIIRRÄN-1,A,C,B) 5. tulosta A -> B 6. SIIRRÄN-1,C,B,A) 7. ed if 8. retur 811312A TRA, Algoritmie aalyysi 34
II.2.4.1 Esimerkki: Haoi torit 2) Rekursiopuu: Ku N>1, haaraatuu kahtee osaa ja tekee yhde vakioaikaise operaatio vertailu + tulostus) je Tasolla N-1 loppuu, kuki haara tekee yhde vakioaikaise operaatio Koska jakaatuu kahtia, tasolla k tehdää 2 k operaatiota -> Kaikkiaa 1+2+4+ +2 N-1 = 2 N -1 operaatiota Algoritmi kompleksisuusluokka o Θ2 N ) Piirrä kuva! 811312A TRA, Algoritmie aalyysi 35
II.2.4.1 Esimerkki: Haoi torit 3) Iduktiivie päättely: Merkitää algoritmi askelmäärä = TN), ku kiekkoja N Selvästi T1) = 1 Jos TN-1) tuetaa, TN) = 1 + 2 TN-1) Ns. rekursioyhtälö Arvataa TN) = 2 N -1 ja todetaa iduktiivisesti, että pitää paikkasa 811312A TRA, Algoritmie aalyysi 36
811312A TRA, Algoritmie aalyysi 37 II.2.4.2 Master Theorem )). ) ii arvoilla, luvu suurilla riittävä 1 ja jollaki vakiolla ) ) / jos ja 0 jollaki vakiolla ) ) Jos 3) ) lg ) ii ), ) Jos 2) ). ) ii 0, jollaki vakiolla ) ) Jos 1) ratkaisulle pätee: ) ) ) / ) tai ) ) / ) Rekursio fuktio. ja 1 kokoaislukuvakioita 1, Lause M.Olkoot log log log log log f T c f c b f a f T f T O f f b T a T f b T a T f b a a a a a a b b b b b
II.2.4.2 Master Theorem 2) Lausetta M voidaa soveltaa atamaa rekursiivise algoritmi kompleksisuusluokka, kuha rekursioyhtälö o muodostettu HUOM! Ei sovellu kaikkii tapauksii Esimerkiksi Haoi torie yhtälö ei ratkea lauseella M 811312A TRA, Algoritmie aalyysi 38
II.2.4.2 Master Theorem 2) Ratkaise lausee M avulla a) Rekursio T ) 4T / 2) 2 Vastaus: T ) ) b) Rekursio T ) 4T / 2) 2 Vastaus: T ) lg ) c) Rekursio T ) 4T / 2) 3 Vastaus: T ) ) d) Rekursio T ) 2T / 2) Vastaus: Lausetta ei voi soveltaa tähä tapauksee 2 3 lg 811312A TRA, Algoritmie aalyysi 39
II.2.4.3 Esimerkki: Lomituslajittelu Syöte: Taulukko A[1,..,], >= 1, luvut 1 <= p <= q <= Tulostus: Tauluko alkiot A[p..q] suuruusjärjestyksessä LOMITUSLAJITTELUA,p,q) 1. if p < q 2. r = p q) / 2 3. LOMITUSLAJITTELUA,p,r) 4. LOMITUSLAJITTELUA,r+1,q) 5. LOMITAA,p,r,q) 6. retur LOMITA: A[p] A[r] A[r+1] A[q] 3 5 8 9 2 6 7 8 2 3 5 6 7 8 8 9 811312A TRA, Algoritmie aalyysi 40
II.2.4.3 Esimerkki: Lomituslajittelu 2) Algoritmi rekursiivie: aluksi lajitellaa lista alkiot A[p..r] ja A[r+1..q], sitte lomitetaa järjestyksessä olevat osalistat ii, että A[p..q] järjestyksessä Selvästi lomittamie voidaa tehdä lieaarisessa ajassa Kumpiki osalista käydää kerra läpi Saadaa rekursio T ) 2T / 2) c Lauseella M: T ) lg ) 811312A TRA, Algoritmie aalyysi 41