Kompleksisuus Yleistä
Kompleksisuus Algoritmien analyysissä tutkitaan algoritmien käyttämän (tietokone)ajoajan ja muistin määrän riippuvuutta syöttöaineiston koosta (N). Syöttöaineisto tarkoittaa esimerkiksi taulukon alkioiden joukkoa, kun tutkitaan taulukoita, ja Fibonacciluvun järjestysnumeroa Fibonaccilukujen laskennassa
Algoritmin kompleksisuus Algoritmin suoritukseen vaadittavien resurssien määrän riippuvuus syötteen koosta huonoimmassa tapauksessa Vähennettäessä jonkin resurssin tarvetta saattaa jonkin toisen resurssin tarve kasvaa sovelluskohtainen tasapaino
Aikakompleksisuus Ilmoitetaan syötteen koon n funktiona T(n) Yksikkönä keskeisten alkeisoperaatioiden määrä Usein riittää pelkän lukumäärän suuruusluokan arviointi Asymptoottinen kompleksisuustarkastelu miten algoritmi käyttäytyy, kun syötteen koko n kasvaa
Asymptoottinen aikakompleksisuus Tarkastellaan yleensä vain niitä lausekkeiden osia, jotka dominoivat lauseketta suurilla n:n arvoilla Usein annetaan kasvua kuvaava funktio tai ylärajafunktio kasvulle
T(n)=Θ(f(n)) tai T(n) ~ f(n) Suuruusluokka Jos T(n) on suuruusluokkaa f(n), merkitään: T(n)=Θ(f(n)) tai T(n) ~ f(n)
Yläraja Jos T(n):n yläraja on f(n), merkitään: T(n) = O(f(n))
Kompleksisuuden kertaluokat Kertoma: T(n) ~ n! Eksponentiaalinen: T(n) ~ cn Polynomiaalinen: T(n) ~ nc Lineaarinen: T(n) ~ n Logaritminen: T(n) ~ logcn Vakioaikainen: T(n) ~ 1
Kasvunopeuksia log n n n log n n2 2n n! 1 2 4 8 16 24 64 256 65536 384 4096 1.84E19 1.27E89 2048 1.15E77 ? 10 1024 10240 1048576 1.8E308
Kompleksisuus Laskusääntöjä
Perussäännöt Jos T1(N)=O(f(N)) ja T2N=O(g(N)), niin T1(N) + T2(N) = max( O(f(N)), O(g(N))) T1(N) * T2(N) = O(f(N) * g(N)) Jos T(N) on asteen k polynomi, silloin T(N)=Θ(Nk) logkN = O(N) kaikilla k:n arvoilla
Yleisiä sääntöjä Silmukat: silmukan suoritusaika on enintään toistokertojen lukumäärä kerrottuna sen sisältämien lauseiden suoritusajalla Sisäkkäiset silmukat: silmukoitten sisällä olevan lauseen suoritusaika on lauseen suoritusaika kerrottuna silmukoitten toistokertojen tulolla
Yleisiä sääntöjä if-lause: suoritusaika on enintään ehdon suoritusajan ja enemmän aikaa vievän haaran suoritusaikojen summa Rekursio: todellinen suorituskertojen määrä selvitettävä jotenkin (palautuskaava) Algoritmi on logaritminen, jos sen koon pienentäminen murto-osaan vaatii vakioajan Algoritmi on lineaarinen, jos sen koon pienentäminen vakiomäärällä vaatii vakioajan