Algoritmit 1 Luento 2 Ke 11.1.2017 Timo Männikkö
Luento 2 Algoritmin esitys Algoritmien analysointi Suoritusaika Asymptoottinen kertaluokka Peruskertaluokkia NP-täydelliset ongelmat Algoritmit 1 Kevät 2017 Luento 2 Ke 11.1.2017 2/26
Algoritmi Jono ristiriidattomia, askel askeleelta suoritettavia käskyjä Yleisemmin: Ohje, suunnitelma, resepti jne. Täsmällisemmin: Ongelman ratkaisumenetelmä, joka voidaan toteuttaa tietokoneohjelmana Algoritmit 1 Kevät 2017 Luento 2 Ke 11.1.2017 3/26
Esimerkki: Taulukon summa int laskesumma(int[] t, int n) { int summa = 0; for (int i = 0; i < n; i++) { summa = summa + t[i]; } return summa; } Voidaan laskea operaatioiden lukumäärä koon n funktiona (ei riipu taulukon alkioista) Suoritusaika muotoa T (n) = n t 1 + t 2 Algoritmit 1 Kevät 2017 Luento 2 Ke 11.1.2017 4/26
Esimerkki: Taulukon suurin alkio int haesuurin(int[] t, int n) { int suurin = t[0]; for (int i = 1; i < n; i++) { if (suurin < t[i]) suurin = t[i]; } return suurin; } Operaatioiden lukumäärä riippuu myös taulukon alkioista Suoritusaika vaihtelee Silmukan runko suoritetaan aina n 1 kertaa Algoritmit 1 Kevät 2017 Luento 2 Ke 11.1.2017 5/26
Esimerkki: Haku taulukosta int haealkio(int[] t, int n, int alkio) { for (int i = 0; i < n; i++) { if (t[i] == alkio) return i; } return -1; } Ei tiedetä, montako kertaa silmukan runko suoritetaan Vähintään kerran, enintään n kertaa Algoritmit 1 Kevät 2017 Luento 2 Ke 11.1.2017 6/26
Algoritmin analysointi Valitaan perusoperaatio (tai useampi operaatio) Useimmin suoritettava operaatio, aikaa vievin operaatio tms. Esimerkiksi: Sijoitus, vertailu jne. Lasketaan perusoperaatioiden lukumäärät syöttötiedon koon funktiona Edelliset esimerkit: Taulukon koko n Perusoperaatioiden lukumäärä f (n) Algoritmit 1 Kevät 2017 Luento 2 Ke 11.1.2017 7/26
Algoritmien esitys Ohjelmointikielet: Täsmällinen esitys Yksityiskohdat voivat häivyttää olennaisia ideoita Pseudokoodi: Ohjelmointikielten lauseiden tapaisia rakenteita Voidaan kuvata joitain osia myös vapaammin Algoritmit 1 Kevät 2017 Luento 2 Ke 11.1.2017 8/26
Algoritmien esitys Nykyisin useimmissa tietokoneissa von Neumann -arkkitehtuuri Operaatiot suoritetaan peräkkäin, yksi kerrallaan Algoritmit suunniteltu tämän mukaisesti Myös muita formalismeja: Turingin kone, lambda-kalkyyli, rekursio Churchin-Turingin teesi Formalisoinnit ekvivalentteja Algoritminen ratkeavuus sama formalisoinnista riippumatta Algoritmit 1 Kevät 2017 Luento 2 Ke 11.1.2017 9/26
Algoritmin analysointi Invarianssiperiaate : Algoritmin järkevät toteutukset poikkeavat aikavaativuudeltaan enintään vakiotekijän verran Jätetään huomiotta vaativuusfunktioiden vakiokertoimet Analysoidaan menetelmän tehokkuuden kertaluokkaa Algoritmit 1 Kevät 2017 Luento 2 Ke 11.1.2017 10/26
Esiintymän koko Syöttötieto x, sen tallennustila x = n Teoriassa bittejä, käytännössä jokin luonteva suure Esimerkiksi: Järjestäminen: Alkioiden lukumäärä Verkko-ongelmat: Solmujen tai kaarien lukumäärä Matriisilaskenta: Matriisin suurin dimensio tai alkioiden lukumäärä Algoritmit 1 Kevät 2017 Luento 2 Ke 11.1.2017 11/26
Suoritusaika Paras mahdollinen suoritusaika: Ei yleensä kiinnostava Huonoin mahdollinen suoritusaika: Tarpeellinen, usein helposti laskettavissa Keskimääräinen suoritusaika: Usein kiinnostavin, voi olla vaikea laskea Tasoitettu analyysi: Suoritusaikoja painotetaan tapausten esiintymiskertojen mukaisessa suhteessa Algoritmit 1 Kevät 2017 Luento 2 Ke 11.1.2017 12/26
Kertaluokka Olkoon suoritusaika muotoa an 2 + bn + c, a > 0, b, c vakioita Kiinnostaa suoritusajan kasvunopeus eli asymptoottinen käyttäytyminen Suurilla n termit bn ja c eivät merkittäviä Suurilla n vakiokerroin a ei merkittävä Jos n kasvaa kaksinkertaiseksi, suoritusaika kasvaa noin nelinkertaiseksi Suoritusajan kertaluokka on n 2 Algoritmit 1 Kevät 2017 Luento 2 Ke 11.1.2017 13/26
Algoritmin tehokkuus Suoritusajan kertaluokka kuvaa algoritmin tehokkuutta Voidaan verrata eri algoritmien suhteellisia tehokkuuksia Suuri syöttötiedon koko Kannattaa valita asymptoottisesti tehokkaampi algoritmi Algoritmit 1 Kevät 2017 Luento 2 Ke 11.1.2017 14/26
Asymptoottinen kertaluokka Ei-negatiiviset funktiot t A (n) ja t B (n) Funktiot ovat asymptoottisesti yhtä suuria eli kertaluokat ovat samat, jos lim n t A (n) t B (n) = C 0 Funktio t A (n) on asymptoottisesti pienempi, jos lim n t A (n) t B (n) = 0 Funktio t A (n) on asymptoottisesti suurempi, jos raja-arvo = Algoritmit 1 Kevät 2017 Luento 2 Ke 11.1.2017 15/26
Asymptoottinen kertaluokka Merkitään: O(g(n)) = funktiot, jotka ovat asymptoottisesti pienempiä tai yhtäsuuria kuin g(n) Tarkemmin: O(g(n)) = {f (n) vakiot c, n 0 > 0 siten, että 0 f (n) cg(n) n n 0 } Jos f (n) O(g(n)), kirjoitetaan usein f (n) = O(g(n)) Algoritmit 1 Kevät 2017 Luento 2 Ke 11.1.2017 16/26
Esimerkki f (n) = 100n 2 + 30n + 45 lim n 100n 2 + 30n + 45 n = f (n) O(n) lim n 100n 2 + 30n + 45 n 2 = 100 f (n) = O(n 2 ) lim n 100n 2 + 30n + 45 n 3 = 0 f (n) = O(n 3 ) Algoritmit 1 Kevät 2017 Luento 2 Ke 11.1.2017 17/26
Asymptoottinen kertaluokka O(g(n)) = funktiot, jotka ovat asymptoottisesti pienempiä tai yhtäsuuria kuin g(n) 100n 2 + 30n + 45 = O(n 2 ) 100n 2 + 30n + 45 = O(n 3 ) 100n 2 + 30n + 45 = mikä tahansa vielä suurempi kertaluokka Käytännössä pyritään selvittämään kertaluokka mahdollisimman tarkasti tai tiukasti O(n 2 ) = pienin kertaluokka, joka sisältää funktion Algoritmit 1 Kevät 2017 Luento 2 Ke 11.1.2017 18/26
Funktioiden kertaluokkia Polynomit: 10n + 8 = O(n) 12n 3 + 4n 2 = O(n 3 ) a k n k + a k 1 n k 1 + + a 1 n + a 0 = O(n k ) Logaritmifunktio: log a n = log bn log b a a, b > 1, missä log a n = O(log b n) a, b > 1 1 log b a 0 Vakiofunktio: funktion suoritusaika ei riipu n:stä = O(1) Algoritmit 1 Kevät 2017 Luento 2 Ke 11.1.2017 19/26
Ominaisuuksia O(cg(n)) = O(g(n)) c > 0 f (n) = O(g(n)) ja g(n) = O(h(n)) f (n) = O(h(n)) f 1 (n) = O(g 1 (n)) ja f 2 (n) = O(g 2 (n)) f 1 (n) + f 2 (n) = O(max(g 1 (n), g 2 (n))) f 1 (n) = O(g 1 (n)) ja f 2 (n) = O(g 2 (n)) f 1 (n)f 2 (n) = O(g 1 (n)g 2 (n)) Algoritmit 1 Kevät 2017 Luento 2 Ke 11.1.2017 20/26
Kertaluokkamerkintöjä Asymptoottinen yläraja O(g(n)) Asymptoottinen alaraja Ω(g(n)) Asymptoottinen tarkka raja Θ(g(n)) Asymptoottinen aito yläraja o(g(n)) Asymptoottinen aito alaraja ω(g(n)) Algoritmit 1 Kevät 2017 Luento 2 Ke 11.1.2017 21/26
Ongelman koko ja suoritusaika Esimerkki: Neljä algoritmia Suoritusaikojen funktiot 100n, 5n 2, 1 2 n3, 2 n Suurin ongelma, joka voidaan ratkaista ajassa 1000 ja 10 000: T (n) 1000 10 000 lisäys 100n 10 100 10 5n 2 14 44 3.1 1 2 n3 12 27 2.3 2 n 10 13 +3 polynominen polynominen polynominen eksponentiaalinen Algoritmit 1 Kevät 2017 Luento 2 Ke 11.1.2017 22/26
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 1 Kevät 2017 Luento 2 Ke 11.1.2017 23/26
Peruskertaluokkia 1 Vakioaika; riippumaton syöttötiedon koosta log n Logaritminen; esim. ongelman kokoa pienennetty murto-osaan (kantaluku ei vaikuta kertaluokkaan) n Lineaarinen; esim. jokin operaatio tehdään kaikille alkioille n log n Esim. ongelma jaettu osaongelmiin, jotka ratkaistaan rekursiivisesti, ja lopuksi kootaan alkuperäisen ongelman ratkaisu Algoritmit 1 Kevät 2017 Luento 2 Ke 11.1.2017 24/26
Peruskertaluokkia (jatkuu) n 2 Neliöllinen; esim. käsitellään kaikki alkioparit n 3 Kuutiollinen; esim. jotkin matriisien laskuoperaatiot n k Yleinen polynominen kertaluokka; sanotaan että ongelma on ratkeava 2 n Eksponentiaalinen kertaluokka; sanotaan että ongelma on huonosti ratkeava tai ratkeamaton Algoritmit 1 Kevät 2017 Luento 2 Ke 11.1.2017 25/26
NP-täydelliset ongelmat On olemassa ongelmia, joille ei tunneta polynomisia algoritmeja Suuri osa näistä kuuluu NP-täydellisten ongelmien joukkoon Jos jollekin NP-täydelliselle ongelmalle löytyy polynominen algoritmi, kaikki joukon ongelmat ratkeavat polynomisessa ajassa Merkitään: P = polynomisessa ajassa ratkeavat ongelmat NP = ongelmat, joiden ratkaisujen oikeellisuus voidaan tarkastaa polynomisessa ajassa Onko P = NP? Algoritmit 1 Kevät 2017 Luento 2 Ke 11.1.2017 26/26