811312A Tietorakenteet
ja algoritmit
2015 - 2016
II Algoritmien analyysi
Sisältö
1. Algoritmien oikeellisuus
2. Algoritmien suorituskyvyn analyysi
3. Master Theorem
Ari Vesanen
811312A TRA, Algoritmien analyysi
2
II.1. Algoritmien oikeellisuus
Yksi osa algoritmien analyysistä
Varmistaa, että algoritmi toimii oikein
Osittainen oikeellisuus
Jos algoritmi päättyy, se tuottaa oikean tuloksen
Täydellinen oikeellisuus
Algoritmi päättyy ja tuottaa oikean tuloksen
Algoritmin oikeaksi todistaminen = Todistettava
osittainen oikeellisuus ja algoritmin päättyminen
Ari Vesanen
811312A TRA, Algoritmien analyysi
3
II.1.1 Algoritmin oikeaksi todistaminen
Tällä kurssilla ei käytetä formaaleja menetelmiä
Oikean tuloksen varmistaminen: käytetään väitteitä,
jotka osoitetaan oikeaksi ja joista seuraa algoritmin
oikeellisuus
Usein invariantteja = ominaisuuksia, jotka ovat
voimassa tietyssä kohdassa koko algoritmin
suorituksen ajan
Päättymisen varmistaminen: käytetään
konvergentteja
Yleensä arvoja, jotka pienenevät tai kasvavat ja
päättävät algoritmin, kun saavat jonkun tietyn arvon
Ari Vesanen
811312A TRA, Algoritmien analyysi
4
II.1.1.1 Esimerkki: Kolmen luvun maksimi
Syöte: Luvut a,b
Tulostus: Suurin
MAKSIMI3(a,b,c)
1.
x = a
2.
if b > x
3.
x = b
4.
// VÄITE 1:
5.
if c > x
6.
x = c
7.
// VÄITE 2:
8.
return x
Ari Vesanen
ja c
luvuista a,b ja c
x = max(a,b)
x = max(a,b,c)
811312A TRA, Algoritmien analyysi
5
II.1.1.2 Esimerkki: Taulukon arvojen minimi
Syöte: Taulukko A[1,..,n], n >= 1
Tulostus: Pienin luvuista A[1], … , A[n]
MINIMI(A)
i on konvergentti
1.
i = 2
2.
x = A[1]
Silmukkainvariantti:
3.
while i <= n do
4.
if A[i] < x
Kun i=k, rivillä 3 muuttujan
5.
x = A[i]
x arvo on pienin taulukon
6.
i = i+1
arvoista A[1], …, A[k-1]
7.
return x
Ari Vesanen
811312A TRA, Algoritmien analyysi
6
II.1.1.3 Esimerkki: Hanoin tornit
Alkutilanne:
1
N kiekkoa
Tavoite:
2
3
Säännöt:
1. Kiekkoja
siirretään yksi
kerrallaan
paalusta toiseen
2. Vain pienemmän
kiekon saa
siirtää toisen
päälle
Keksi siirtosarjan tuottava algoritmi
Ari Vesanen
811312A TRA, Algoritmien analyysi
7
II.1.1.3 Esimerkki: Hanoin tornit (2)
Syöte: Luku N >= 1 ja paalujen numerot A, B ja C
Tulostus: Siirtojärjestys N:lle kiekolle paalusta A
paaluun B käyttämällä apuna paalua C
SIIRRÄ(N,A,B,C)
N on konvergentti
1.
if N==1
2.
tulosta A -> B
Väite: Mistä tahansa laillisesta
3.
else
4.
SIIRRÄ(N-1,A,C,B) asemasta, jossa N pienintä kiekkoa
5.
tulosta A -> B
ovat paalussa A, algoritmi tulostaa
6.
SIIRRÄ(N-1,C,B,A) laillisen siirtosarjan, missä nämä
7.
return
N pienintä kiekkoa paaluun B
käyttäen apuna paalua C eikä siinä
siirretä mitään muita kiekkoja.
Ari Vesanen
811312A TRA, Algoritmien analyysi
8
II.1.1.4 Esimerkki: Lisäyslajittelu
Syöte: Taulukko A[0,1, ..,n-1], n >= 1
Tulostus: Järjestys A[0] <= … <= A[n-1]
Invariantti: Rivillä 1 alkiot
A[0,…j-1] samat kuin alkup.
INSERTION_SORT(A)
taulukossa, mutta
1.
for j = 1 to n-1
suuruusjärjestyksessä
2.
k = A[j]
A[0] <= … <= A[j-1]
3.
i = j-1
4.
while i>=0 and A[i]>k
5.
A[i+1] = A[i]
i on konvergentti:
6.
i = i-1
while päättyy joka
7.
A[i+1] = k
for-kierroksella
Ari Vesanen
811312A TRA, Algoritmien analyysi
9
II.2 Algoritmien suorituskyvyn analyysi
Tällä kurssilla ollaan kiinnostuneita
aikakompleksisuudesta = algoritmin vaatiman
suoritusajan suhteesta algoritmin syötteen kokoon
Tarvitaan abstrakti malli koneelle, joka suorittaa
algoritmia
Tässä käytetään hajasaantikonetta (random-access
machine)
Ari Vesanen
811312A TRA, Algoritmien analyysi
10
II.2.1 Hajasaantikone
Samanlaisista muistipaikoista koostuva muisti
Prosessori, jolla käytettävissään rekistereitä
Dataa mielivaltaisista muistipaikoista rekistereihin
Arvoja rekistereistä takaisin muistiin
Rekistereissä loogisia ja aritmeettisia operaatioita
Ohjelma käskyjoukko
Em. muisti- ja aritmeettisia operaatioita
Suoritusta ohjaavia kontrollikäskyjä
Käskyt suoritetaan peräkkäin, ts. ei rinnakkaista
suorittamista
Ari Vesanen
811312A TRA, Algoritmien analyysi
11
II.2.1 Hajasaantikone (2)
Kaikki perusoperaatiot vaativat saman ajan
Eroaa reaalikoneista
Reaalikoneissa on muitakin perusoperaatioita kuin
hajasaantikoneessa
Analyysitulokset silti yleensä melko hyviä
reaalikoneillekin
Ari Vesanen
811312A TRA, Algoritmien analyysi
12
II.2.2 Analyysi: Iteratiiviset algoritmit
II.2.2.1 Esimerkki: taulukon summa
HUOM! Tässä oletetaan, että koodiriveillä
eri suoritusajat c1,c2,c3
Syöte: Taulukko A[1,..,n], n >= 1
Tulostus: Taulukon alkioiden summa
SUMMA(A)
1.
sum = 0
2.
for j = 1 to n
3.
sum = sum+A[j]
4.
return sum
Ari Vesanen
kust.
c1
c2
c3
suorituskerrat
1
n
n
811312A TRA, Algoritmien analyysi
13
II.2.2.1 Esimerkki: taulukon summa (2)
Saadaan suoritusajaksi
c1 (c 2 c3 ) n
Siis muotoa A·n + B
Tällaisia algoritmeja sanotaan lineaarisiksi
Voidaan suorittaa erittäin suurilla taulukoilla
Ari Vesanen
811312A TRA, Algoritmien analyysi
14
II.2.2.2 Esimerkki: vaihtolajittelu
HUOM! Tässä oletetaan, että koodiriveillä
eri suoritusajat c1,c2,…,c6
Syöte: Taulukko A[1,..,n], n >= 1
Tulostus: Taulukon luvut järjestyksessä A[1] <= … <= A[n]
VAIHTOLAJITTELU(A)
1.
for i = 1 to n
2.
for j = 1 to n
3.
if i<j && A[i]>A[j]
4.
x = A[i]
kust.
c1
c2
c3
c4
suorituskerrat
n
n∙n = n2
n2
t(i, j)
i, j
5.
A[i] = A[j]
c5
t(i, j)
i, j
6.
A[j] = x
c6
t(i, j)
i, j
t(i,j) = 1 , jos ehto A[i] > A[j] on tosi ja
t(i,j) =0 muuten.
Ari Vesanen
811312A TRA, Algoritmien analyysi
15
II.2.2.2 Esimerkki: vaihtolajittelu (2)
Saadaan suoritusajaksi
c1 n (c 2 c 3 ) n 2 (c 4 c 5 c 6 ) t(i, j)
i, j
Riippuu taulukon alkuperäisestä järjestyksestä
Paras tapaus
c1 n (c 2 c 3 ) n 2
Huonoin tapaus
n 2 (c2 c3 (c4 c5 c6 )/2) n (c1 - (c4 c5 c6 )/2)
Keskimääräinen tapaus
n 2 (c2 c3 (c4 c5 c6 )/4) n (c1 - (c4 c5 c6 )/4)
Ari Vesanen
811312A TRA, Algoritmien analyysi
16
II.2.2.2 Esimerkki: vaihtolajittelu (4)
Parannettu versio:
Syöte: Taulukko A[1,..,n], n >= 1
Tulostus: Luvut järjestyksessä A[1] <= … <= A[n]
VAIHTOLAJITTELU2(A)
1.
for i = 1 to n-1
2.
for j = i+1 to n
3.
if A[i] > A[j]
4.
x = A[i]
5.
A[i] = A[j]
6.
A[j] = x
Ari Vesanen
811312A TRA, Algoritmien analyysi
17
II.2.2.2 Esimerkki: vaihtolajittelu (5)
Parannettu algoritmi noin puolet nopeampi kuin
alkuperäinen
Suoritusaika silti luokkaa A·n2 + B·n
Parantuiko oleellisesti?
Tällaiset algoritmit neliöllisiä
Suoritusaika pitkä erittäin suurilla taulukoilla
Ari Vesanen
811312A TRA, Algoritmien analyysi
18
II.2.3 Analyysi: Asymptoottinen merkintätapa
Työlästä (ja useimmiten vaikeaa) laskea tarkkaa
suoritusaikaa -> Samaistetaan suoritusajat, jotka ovat
samaa luokkaa
Esim. ajat 2n+3 ja 7n+9 samaa luokkaa
Esim. ajat 5n2 + 2n ja 21n2 + n samaa luokkaa
Kummassakin tapauksessa aikafunktiot kasvavat samalla
tavalla
Aikakompleksisuuden käsittelyssä Käytetään ns.
asymptoottista tarkastelua
Käytettävät merkinnät: O-merkintä, Θ-merkintä ja merkintä
Ari Vesanen
811312A TRA, Algoritmien analyysi
19
II.2.3 Analyysi: Asymptoottinen merkintätapa
II.2.3.1 O-merkintä
Olkoon g(n) jokin funktio. Silloin O(g(n)) on niiden
funktioiden joukko, joita voidaan rajoittaa ylhäältä
funktiolla g:
O( g (n)) { f (n) On olemassa sellaiset
positiiviset vakiot c ja n0 , että
0 f (n) c g (n), aina kun n n0 }
Funktio g on funktion f asymptoottinen yläraja
Merkitään f(n) Є O(g(n))
HUOM! Cormenin kirjassa epätarkasti f(n) = O(g(n))
Ari Vesanen
811312A TRA, Algoritmien analyysi
20
c∙g(n)
f(n)
n0
Funktion f kasvua voidaan ylhäältä rajoittaa funktiolla g,
joten f(n) Є O(g(n))
II.2.3.1 O-merkintä (2)
Esimerkkejä:
f(n) = 2n2 + 3n
f(n) Є O(n2),
f(n) Є O(n3),
f(n) Є O(n)
f(n) = n lg(n)
f(n) Є O(n2)
Ari Vesanen
811312A TRA, Algoritmien analyysi
22
II.2.3.2 -merkintä
Olkoon g(n) jokin funktio. Silloin (g(n)) on niiden
funktioiden joukko, joita voidaan rajoittaa sekä ylhäältä
että alhaalta funktiolla g:
( g (n)) { f (n) On olemassa sellaiset
positiiviset vakiot c1 , c2 ja n0 , että
c1 g (n) f (n) c2 g (n), aina kun n n0 }
Funktio g asymptoottisesti tarkka raja funktiolle f
Merkitään f(n) Є (g(n))
HUOM! Cormenin kirjassa epätarkasti f(n) = (g(n))
Ari Vesanen
811312A TRA, Algoritmien analyysi
23
c2∙g(n)
f(n)
c1∙g(n)
n0
Funktion f kasvua voidaan ylhäältä ja alhaalta rajoittaa
funktiolla g, joten f(n) Є (g(n))
II.2.3.2 -merkintä (2)
Esimerkkejä:
f(n) = 2n2 + 3n
f(n) Є (n2),
f(n) Є (n3), vaikka f(n) Є O(n3)
f(n) = n lg(n)
f(n) Є (n2), vaikka f(n) Є O(n2)
Ari Vesanen
811312A TRA, Algoritmien analyysi
25
II.2.3.3 -merkintä
Olkoon g(n) jokin funktio. Silloin (g(n)) on niiden
funktioiden joukko, joita voidaan rajoittaa alhaalta
funktiolla g:
( g (n)) { f (n) On olemassa sellaiset
positiiviset vakiot c ja n0 , että
0 c g (n) f (n), aina kun n n0 }
Funktio g on funktion f asymptoottinen alaraja
Merkitään f(n) Є (g(n))
HUOM! Cormenin kirjassa epätarkasti f(n) = (g(n))
Ari Vesanen
811312A TRA, Algoritmien analyysi
26
f(n)
c∙g(n)
n0
Funktion f kasvua voidaan alhaalta rajoittaa funktiolla g,
joten f(n) Є (g(n))
II.2.3.4 Merkintöjen ominaisuuksia
Kaikki merkinnät transitiivisia:
Jos f (n) O( g (n)) ja g (n) O(h(n)), niin f (n) O(h(n))
Jos f (n) ( g (n)) ja g (n) (h(n)), niin f (n) (h(n))
Jos f (n) ( g (n)) ja g (n) (h(n)), niin f (n) (h(n))
Ari Vesanen
811312A TRA, Algoritmien analyysi
28
II.2.3.5 Esimerkki: vaihtolajittelu
Aiemmassa vaihtolajitteluesimerkissä aikakompleksisuus
kaikissa tapauksissa luokkaa Θ(n2)
Parannettu algoritmi noin puolet nopeampi kuin
alkuperäinen: kompleksisuus silti luokkaa Θ(n2)
Ei siis parantunut olennaisesti kun tarkastellaan
asymptoottisesti
HUOM! Jos tarkastellaan vain aikakompleksisuusluokkaa,
ei kustannuksilla c1, …, c6 ole merkitystä!
Seuraus: Voidaan olettaa vakiokestoiset operaatiot
samanarvoisiksi -> Tarkastelu helpottuu
Ari Vesanen
811312A TRA, Algoritmien analyysi
29
II.2.3.5 Esimerkki: vaihtolajittelu (2)
Kaikki suoritusajat luokkaa Θ(n2)
Yleensä keskitytään huonoimman tapauksen
tarkasteluun
Yläraja suoritusajalle
Joskus myös keskimääräinen tapaus kiinnostava
Esim. Quicksort, huonoin tapaus Θ(n2),
keskimääräinen Θ(n∙lg(n))
Yleensä paras tapaus ei oleellinen
Usein harvinainen erikoistapaus
Ari Vesanen
811312A TRA, Algoritmien analyysi
30
II.2.3.6 Sisäkkäisten silmukoiden kompleksisuus
Tutkitaan algoritmia
ALGORITMI(n)
1.
for i1 = 1 to n
2.
for i2 = 1 to n
k sisäkkäistä silmukkaa.
...
k.
for ik = 1 to n
k+1.
// Jokin vakioaikainen operaatio
HUOM! Kaikki indeksit kulkevat 1..n eivätkä riipu toisistaan. Muuten
seuraava tarkastelu ei välttämättä päde.
Ari Vesanen
811312A TRA, Algoritmien analyysi
31
II.2.3.6 Sisäkkäisten silmukoiden kompleksisuus (2)
Algoritmin suoritusaika muotoa
a k n k a k -1 n k -1 a 1 n a 0
Miksi?
Ainoastaan korkein termi vaikuttaa
kompleksisuusluokkaan -> Algoritmi luokkaa Θ(nk)
Jos algoritmin kompleksisuusluokka on O(nk) sitä
sanotaan polynomiaikaiseksi
Polynomiaikaisia algoritmeja pidetään laskennallisesti
sovellettavina
Ari Vesanen
811312A TRA, Algoritmien analyysi
32
II.2.4 Analyysi: Rekursiiviset algoritmit
Rekursiivisille algoritmeille tarvitaan uusia menetelmiä:
1. Rekursiopuun avulla tarkastelu
2. Induktiivinen päättely
3. Rekursioyhtälön muodostaminen ja ”Master Theorem”
Ari Vesanen
811312A TRA, Algoritmien analyysi
33
II.2.4.1 Esimerkki: Hanoin tornit
Syöte: Luku N >= 1 ja paalujen numerot A, B ja C
Tulostus: Siirtojärjestys N:lle kiekolle paalusta A
paaluun B käyttämällä apuna paalua C
SIIRRÄ(N,A,B,C)
1.
if N==1 then
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.
end if
8.
return
Ari Vesanen
811312A TRA, Algoritmien analyysi
34
II.2.4.1 Esimerkki: Hanoin tornit (2)
Rekursiopuu: Kun N>1, haaraantuu kahteen osaan ja
tekee yhden vakioaikaisen operaation (vertailu +
tulostus) jne
Tasolla N-1 loppuu, kukin haara tekee yhden
vakioaikaisen operaation
Koska jakaantuu kahtia, tasolla k tehdään 2k operaatiota
-> Kaikkiaan 1+2+4+…+2N-1 = 2N-1 operaatiota
Algoritmin kompleksisuusluokka on Θ(2N)
Piirrä kuva!
Ari Vesanen
811312A TRA, Algoritmien analyysi
35
II.2.4.1 Esimerkki: Hanoin tornit (3)
Induktiivinen päättely:
Merkitään algoritmin askelmäärä = T(N), kun kiekkoja N
Selvästi T(1) = 1
Jos T(N-1) tunnetaan, T(N) = 1 + 2∙T(N-1)
Ns. rekursioyhtälö
Arvataan T(N) = 2N-1 ja todetaan induktiivisesti, että
pitää paikkansa
Ari Vesanen
811312A TRA, Algoritmien analyysi
36
II.2.4.2 Master Theorem
Lause M .Olkoot a 1, b 1 kokonaislu kuvakioita ja f funktio.
Rekursion
T (n) a T ( n / b ) f (n) (tai T (n) a T ( n / b ) f (n) )
ratkaisulle pätee :
1) Jos f (n) O( n logb a ) jollakin v akiolla 0, niin
T (n) ( n logb a ).
2) Jos f (n) ( n logb a ), niin T (n) ( n logb a lg n)
3) Jos f (n) ( n logb a ) jollakin v akiolla 0 ja jos
a f (n / b) c f (n) jollakin v akiolla c 1 ja riittävän
suurilla luvun n arvoilla, niin T (n) ( f (n)).
Ari Vesanen
811312A TRA, Algoritmien analyysi
37
II.2.4.2 Master Theorem (2)
Lausetta M voidaan soveltaa antamaan rekursiivisen
algoritmin kompleksisuusluokka, kunhan rekursioyhtälö
on muodostettu
HUOM! Ei sovellu kaikkiin tapauksiin
Esimerkiksi Hanoin tornien yhtälö ei ratkea lauseella M
Ari Vesanen
811312A TRA, Algoritmien analyysi
38
II.2.4.2 Master Theorem (2)
Ratkaise lauseen M avulla
a) Rekursio T (n) 4 T (n / 2) n
2
Vastaus: T (n) ( n )
b) Rekursio T (n) 4 T (n / 2) n 2
2
Vastaus: T (n) ( n lg n)
c) Rekursio T (n) 4 T (n / 2) n3
3
Vastaus: T (n) ( n )
d) Rekursio T (n) 2 T (n / 2) n lg n
Vastaus: Lausetta ei voi
soveltaa tähän tapaukseen
Ari Vesanen
811312A TRA, Algoritmien analyysi
39
II.2.4.3 Esimerkki: Lomituslajittelu
Syöte: Taulukko A[1,..,n], n >= 1,
luvut 1 <= p <= q <= n
Tulostus: Taulukon alkiot A[p..q]
suuruusjärjestyksessä
LOMITUSLAJITTELU(A,p,q)
1.
if p < q
2.
r = ( p q) / 2
3.
4.
5.
6.
LOMITUSLAJITTELU(A,p,r)
LOMITUSLAJITTELU(A,r+1,q)
LOMITA(A,p,r,q)
A[r]
LOMITA:
return
A[p] 3 5 8 9
A[r+1] A[q]
2 6 7 8
2 3 5 6 7 8 8 9
Ari Vesanen
811312A TRA, Algoritmien analyysi
40
II.2.4.3 Esimerkki: Lomituslajittelu (2)
Algoritmi rekursiivinen: aluksi lajitellaan listan alkiot
A[p..r] ja A[r+1..q], sitten lomitetaan järjestyksessä
olevat osalistat niin, että A[p..q] järjestyksessä
Selvästi lomittaminen voidaan tehdä lineaarisessa ajassa
Kumpikin osalista käydään kerran läpi
Saadaan rekursio
T (n) 2 T (n / 2) c n
Lauseella M:
T (n) ( n lg n)
Ari Vesanen
811312A TRA, Algoritmien analyysi
41
© Copyright 2025