Algoritmit 2 Luento 1 Ti 14.3.2017 Timo Männikkö
Luento 1 Algoritmi Algoritmin valinta Algoritmin analysointi Algoritmin suoritusaika Peruskertaluokkia Kertaluokkamerkinnät Kertaluokkien ominaisuuksia Algoritmit 2 Kevät 2017 Luento 1 Ti 14.3.2017 2/24
Algoritmi Askel askeleelta suoritettava menetelmä, tekniikka tai ohje jonkin tehtävän suorittamiseksi tai jonkin ongelman ratkaisemiseksi Algoritmin vaatimuksia: Askelmäärä äärellinen Antaa oikean vastauksen Riittävän tehokas Algoritmit 2 Kevät 2017 Luento 1 Ti 14.3.2017 3/24
Ongelman ratkaiseminen Ongelman esiintymä: Ongelma tietyillä lähtötiedoilla Samalla ongelmalla eri esiintymiä Voidaan haluta: Paras ratkaisu useiden mahdollisten ratkaisujen joukosta Hyvä ratkaisu, vaikka ei välttämättä paras Parempi kuin tunnetut ratkaisut Algoritmit 2 Kevät 2017 Luento 1 Ti 14.3.2017 4/24
Algoritmin tehokkuus Algoritmin tarvitsemat resurssit: Muistitila, kaistanleveys jne. Erityisesti suoritusaika Algoritmin analysointi: Tehokkuuden selvittäminen Muutama pieni esiintymä Resursseilla ei suurta merkitystä Suuri tai vaikea ongelma, useita esiintymiä Algoritmi valittava huolella Algoritmit 2 Kevät 2017 Luento 1 Ti 14.3.2017 5/24
Algoritmin valinta Halutaan valita paras tai riittävän hyvä algoritmi Empiirisesti: Toteutetaan (ohjelmoidaan) algoritmit Mitataan suoritusaikaa tai jonkin muun resurssin käyttöä Teoreettisesti: Määritellään matemaattisesti suoritusaika tai jonkin muun resurssin käyttö Resurssin käyttö esitetään syöttötiedon koon funktiona Algoritmit 2 Kevät 2017 Luento 1 Ti 14.3.2017 6/24
Algoritmin valinta Empiirinen tapa: Voidaan tehdä tarkkoja mittauksia Käytännössä hankalaa/työlästä/mahdotonta Teoreettinen tapa: Riippumaton käytetystä tietokoneesta, ohjelmointikielestä, toteutusympäristöstä, ohjelmointitaidosta jne. Tehokkuutta ei kuitenkaan voida mitata esim. sekunneissa Algoritmit 2 Kevät 2017 Luento 1 Ti 14.3.2017 7/24
Algoritmin analysointi Suoritusajan vaativuus: Lasketaan/arvioidaan algoritmin askelien/operaatioiden lukumääriä Perusoperaationa useimmin suoritettava operaatio, aikaa vievin operaatio tms. Esimerkiksi sijoitus, vertailu jne. Määrätään perusoperaatioiden lukumäärät syöttötiedon koon funktiona Algoritmit 2 Kevät 2017 Luento 1 Ti 14.3.2017 8/24
Algoritmin suoritusaika Paras mahdollinen suoritusaika: Ei yleensä kiinnostava Huonoin mahdollinen suoritusaika: Tarpeellinen, usein helposti laskettavissa Keskimääräinen suoritusaika: Usein kiinnostavin, voi olla vaikea laskea Algoritmit 2 Kevät 2017 Luento 1 Ti 14.3.2017 9/24
Algoritmin suoritusaika Invarianssiperiaate: Saman algoritmin eri toteutukset eroavat tehokkuudeltaan toisistaan korkeintaan vakiokertoimisen tekijän verran Algoritmin suoritusajan kertaluokka on g(n), jos on olemassa vakio c > 0 ja algoritmin toteutus, joka kykenee ratkaisemaan jokaisen kokoa n olevan tehtävän esiintymän ajassa cg(n) aikayksikköä Kertaluokka g(n) kuvaa suoritusajan kasvunopeutta Algoritmit 2 Kevät 2017 Luento 1 Ti 14.3.2017 10/24
Algoritmin suoritusaika Suoritusajan kasvunopeuden mukaan voidaan verrata algoritmien suhteellisia tehokkuuksia Kun syöttötiedon koko kasvaa tarpeeksi suureksi, kasvunopeus tulee merkittäväksi Puhutaan algoritmin suoritusajan asymptoottisesta tehokkuudesta Algoritmit 2 Kevät 2017 Luento 1 Ti 14.3.2017 11/24
Peruskertaluokkia log n n n log n n 2 n 3 2 n 0 1 0 1 1 2 1 2 2 4 8 4 2 4 8 16 64 16 3 8 24 64 512 256 4 16 64 256 4096 65536 5 32 160 1024 32768 4294967296 6 64 384 4096 262144 1.8 10 19 Algoritmit 2 Kevät 2017 Luento 1 Ti 14.3.2017 12/24
Ongelman ratkeavuus Käyttökelpoisia vain algoritmit, joiden suoritusaika ongelman koon n suhteen kasvaa korkeintaan yhtä nopeasti kuin jokin n:n polynomi Jos algoritmin suoritusaika kasvaa eksponentiaalisesti, se soveltuu vain pienten ongelmien ratkaisuun Ratkeava ongelma: Löytyy algoritmi, jonka pahimman tapauksen suoritusaika polynominen Ratkeamaton tai huonosti ratkeava ongelma: Tunnetaan vain algoritmeja, joiden suoritusaika eksponentiaalinen Algoritmit 2 Kevät 2017 Luento 1 Ti 14.3.2017 13/24
Kertaluokkamerkintöjä Asymptoottinen yläraja: O(g(n)) = {f (n) : N R + c, n 0 > 0 : 0 f (n) cg(n) n n 0 } Asymptoottinen alaraja: Ω(g(n)) = {f (n) : N R + c, n 0 > 0 : 0 cg(n) f (n) n n 0 } Algoritmit 2 Kevät 2017 Luento 1 Ti 14.3.2017 14/24
Kertaluokkamerkintöjä Asymptoottinen aito yläraja: o(g(n)) = {f (n) : N R + c > 0 n 0 > 0 : 0 f (n) < cg(n) n n 0 } Asymptoottinen aito alaraja: ω(g(n)) = {f (n) : N R + c > 0 n 0 > 0 : 0 cg(n) < f (n) n n 0 } Algoritmit 2 Kevät 2017 Luento 1 Ti 14.3.2017 15/24
Kertaluokkamerkintöjä Asymptoottinen tarkka raja: Θ(g(n)) = {f (n) : N R + c 1, c 2, n 0 > 0 : 0 c 1 g(n) f (n) c 2 g(n) n n 0 } Usein merkitään f (n) = Θ(g(n)) oikean merkinnän f (n) Θ(g(n)) sijaan Algoritmit 2 Kevät 2017 Luento 1 Ti 14.3.2017 16/24
Esimerkki 2n 2 O(n 3 ) c, n 0 > 0 : 0 2n 2 cn 3 n n 0 2n 2 cn 3 2 cn Tosi kun valitaan esimerkiksi c = 2 ja n 0 = 1 2n 2 o(n 3 ) c > 0 n 0 > 0 : 0 2n 2 < cn 3 n n 0 2n 2 < cn 3 2 < cn n > 2/c Tosi kun n 0 valitaan siten että n 0 > 2/c Algoritmit 2 Kevät 2017 Luento 1 Ti 14.3.2017 17/24
Esimerkki jatkuu 2n 2 Θ(n 2 ) c 1, c 2, n 0 > 0 : 0 c 1 n 2 2n 2 c 2 n 2 n n 0 c 1 n 2 2n 2 c 2 n 2 c 1 2 c 2 Tosi kun valitaan esimerkiksi c 1 = c 2 = 2 ja n 0 = 1 Algoritmit 2 Kevät 2017 Luento 1 Ti 14.3.2017 18/24
Kertaluokkamerkinnät f (n) O(g(n)) f on samaa tai alempaa kertaluokkaa kuin g f (n) Ω(g(n)) f on samaa tai ylempää kertaluokkaa kuin g f (n) Θ(g(n)) f on samaa kertaluokkaa kuin g Algoritmit 2 Kevät 2017 Luento 1 Ti 14.3.2017 19/24
Kertaluokkien ominaisuuksia f (n) Θ(g(n)) f (n) O(g(n)) ja g(n) O(f (n)) f (n) Ω(g(n)) ja g(n) Ω(f (n)) f (n) Θ(g(n)) ja g(n) Θ(h(n)) f (n) Θ(h(n)) f (n) Θ(g(n)) g(n) Θ(f (n)) f (n) O(g(n)) g(n) Ω(f (n)) Algoritmit 2 Kevät 2017 Luento 1 Ti 14.3.2017 20/24
Kertaluokkien ominaisuuksia lim n f (n) g(n) lim n f (n) g(n) = 0 lim n f (n) g(n) = = C > 0 f (n) Θ(g(n)) { { f (n) O(g(n)) f (n) / Θ(g(n)) f (n) Ω(g(n)) f (n) / Θ(g(n)) Jos raja-arvoa ei ole määritelty, kertaluokkapäätelmiä ei voi tehdä Algoritmit 2 Kevät 2017 Luento 1 Ti 14.3.2017 21/24
Esimerkki f (n) = 50n 2 + 25n + 10 lim n 50n 2 + 25n + 10 n 2 = 50 f (n) Θ(n 2 ) lim n 50n 2 + 25n + 10 n 3 = 0 f (n) O(n 3 ) lim n 50n 2 + 25n + 10 n = f (n) Ω(n) Algoritmit 2 Kevät 2017 Luento 1 Ti 14.3.2017 22/24
Raja-arvojen laskeminen Määrittelemätön raja-arvo muotoa 0 0 tai L Hôpitalin sääntö: Jos lim f (n) = lim g(n) = 0 tai, mutta f (n) ja g (n) ovat olemassa ja g (n) 0 kaikilla riittävän suurilla n, niin lim n f (n) g(n) = lim n f (n) g (n) jos jälkimmäinen raja-arvo on olemassa Algoritmit 2 Kevät 2017 Luento 1 Ti 14.3.2017 23/24
Esimerkki lim n n 2 2 n =? f (n) = n 2, g(n) = 2 n lim f (n) = lim g(n) = f (n) = 2n, g (n) = 2 n ln 2 lim f (n) = lim g (n) = f (n) = 2, g (n) = 2 n (ln 2) 2 lim n n 2 2 n = lim n n 2 O(2 n ), n 2 / Θ(2 n ) 2 2 n (ln 2) 2 = 0 Algoritmit 2 Kevät 2017 Luento 1 Ti 14.3.2017 24/24