Algoritmit 2 Luento 1 – Ti 15.3.2016 Timo Männikkö Luento 1 • Algoritmi • Algoritmin valinta • Algoritmin analysointi • Algoritmin suoritusaika • Peruskertaluokkia • Kertaluokkamerkinnät • Kertaluokkien ominaisuuksia Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016 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 2016 – Luento 1 – Ti 15.3.2016 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 2016 – Luento 1 – Ti 15.3.2016 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 2016 – Luento 1 – Ti 15.3.2016 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 2016 – Luento 1 – Ti 15.3.2016 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 2016 – Luento 1 – Ti 15.3.2016 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 2016 – Luento 1 – Ti 15.3.2016 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 2016 – Luento 1 – Ti 15.3.2016 9/24 Algoritmin suoritusaika • Invarianssiperiaate: Saman algoritmin eri toteutukset eroavat tehokkuudeltaan toisistaan korkeintaan vakiokertoimisen tekijän verran • Algoritmin suoritusajan kertaluokka on t(n), jos on olemassa vakio c > 0 ja algoritmin toteutus, joka kykenee ratkaisemaan jokaisen kokoa n olevan tehtävän esiintymän ajassa ct(n) aikayksikköä • Kertaluokka t(n) kuvaa suoritusajan kasvunopeutta Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016 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 2016 – Luento 1 – Ti 15.3.2016 11/24 Peruskertaluokkia log n n n log n n2 n3 2n 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 · 1019 Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016 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 2016 – Luento 1 – Ti 15.3.2016 13/24 Kertaluokkamerkintöjä Asymptoottinen yläraja: + O(f (n)) = {t(n) : N → R | ∃c, n0 > 0 : 0 ≤ t(n) ≤ cf (n) ∀n ≥ n0 } Asymptoottinen alaraja: Ω(f (n)) = {t(n) : N → R + | ∃c, n0 > 0 : 0 ≤ cf (n) ≤ t(n) ∀n ≥ n0 } Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016 14/24 Kertaluokkamerkintöjä Asymptoottinen aito yläraja: + o(f (n)) = {t(n) : N → R | ∀c > 0 ∃n0 > 0 : 0 ≤ t(n) < cf (n) ∀n ≥ n0 } Asymptoottinen aito alaraja: ω(f (n)) = {t(n) : N → R + | ∀c > 0 ∃n0 > 0 : 0 ≤ cf (n) < t(n) ∀n ≥ n0 } Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016 15/24 Kertaluokkamerkintöjä Asymptoottinen tarkka raja: + Θ(f (n)) = {t(n) : N → R | ∃c1 , c2 , n0 > 0 : 0 ≤ c1 f (n) ≤ t(n) ≤ c2 f (n) ∀n ≥ n0 } • Usein merkitään t(n) = Θ(f (n)) oikean merkinnän t(n) ∈ Θ(f (n)) sijaan Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016 16/24 Esimerkki 2n2 ∈ O(n3 ) • ∃c, n0 > 0 : 0 ≤ 2n2 ≤ cn3 ∀n ≥ n0 • 2n2 ≤ cn3 ⇔ 2 ≤ cn • Tosi kun valitaan esimerkiksi c = 2 ja n0 = 1 2n2 ∈ o(n3 ) • ∀c > 0 ∃n0 > 0 : 0 ≤ 2n2 < cn3 ∀n ≥ n0 • 2n2 < cn3 ⇔ 2 < cn ⇔ n > 2/c • Tosi kun n0 valitaan siten että n0 > 2/c Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016 17/24 Esimerkki jatkuu 2n2 ∈ Θ(n2 ) • ∃c1 , c2 , n0 > 0 : 0 ≤ c1 n2 ≤ 2n2 ≤ c2 n2 ∀n ≥ n0 • c1 n2 ≤ 2n2 ≤ c2 n2 ⇔ c1 ≤ 2 ≤ c2 • Tosi kun valitaan esimerkiksi c1 = c2 = 2 ja n0 = 1 Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016 18/24 Kertaluokkamerkinnät • f ∈ O(g ) ⇔ f • f f • f f on samaa tai alempaa kertaluokkaa kuin g ∈ Ω(g ) ⇔ on samaa tai ylempää kertaluokkaa kuin g ∈ Θ(g ) ⇔ on samaa kertaluokkaa kuin g Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016 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 2016 – Luento 1 – Ti 15.3.2016 20/24 Kertaluokkien ominaisuuksia f (n) • lim =c >0 ⇒ n→∞ g (n) ( f (n) • lim =0 ⇒ n→∞ g (n) ( f (n) • lim =∞ ⇒ n→∞ g (n) 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 2016 – Luento 1 – Ti 15.3.2016 21/24 Esimerkki f (n) = 50n2 + 25n + 10 50n2 + 25n + 10 2 lim = 50 ⇒ f (n) ∈ Θ(n ) 2 n→∞ n 50n2 + 25n + 10 3 lim = 0 ⇒ f (n) ∈ O(n ) 3 n→∞ n 50n2 + 25n + 10 lim = ∞ ⇒ f (n) ∈ Ω(n) n→∞ n Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016 22/24 Raja-arvojen laskeminen Määrittelemätön raja-arvo muotoa ” 00 ” tai ” ∞ ∞” ⇒ L’Hôpitalin sääntö: • Jos lim f (n) = lim g (n) = 0 tai ∞, mutta f 0 (n) ja g 0 (n) ovat olemassa ja g 0 (n) 6= 0 kaikilla riittävän suurilla n, niin f (n) f 0 (n) lim = lim 0 n→∞ g (n) n→∞ g (n) jos jälkimmäinen raja-arvo on olemassa Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016 23/24 Esimerkki n2 lim n = ? n→∞ 2 • f (n) = n2 , g (n) = 2n • lim f (n) = lim g (n) = ∞ • f 0 (n) = 2n, g 0 (n) = 2n ln 2 • lim f 0 (n) = lim g 0 (n) = ∞ • f 00 (n) = 2, g 00 (n) = 2n (ln 2)2 n2 2 lim n = lim n =0 2 n→∞ 2 n→∞ 2 (ln 2) ⇒ n2 ∈ O(2n ), n2 ∈ / Θ(2n ) Algoritmit 2 – Kevät 2016 – Luento 1 – Ti 15.3.2016 24/24
© Copyright 2024