811312A Tietorakenteet ja algoritmit 2015-2016 I Johdanto
Sisältö 1. Algoritmeista ja tietorakenteista 2. Algoritmien analyysistä 811312A TRA, Johdanto 2
I.1. Algoritmeista ja tietorakenteista I.1.1. Algoritmien alkuperä Käsite 800-luvulla teoksesta al-kitāb al-mukhtaşar fī hisāb al-jabr wa-l-muqābala Sisälsi mm. yhtälöiden systemaattista ratkaisua Kirjoittaja matemaatikko Muhammad ibn Mūsā al- Khwārizmī Kirjoittajan nimestä sana algoritmi 811312A TRA, Johdanto 3
I.1.2. Algoritmin määritelmä Ei standardia määritelmää Formaaleja määritelmiä 1930-luvulta lähtien Tässä kurssissa epämuodollisesti: 1. Äärellinen käskyjono 2. Suorittaa ennalta määritellyn tehtävän annetuilla syötteillä 3. Askeleet ovat tarkasti määriteltyjä (mekaanisia) 4. Päättyy äärellisessä ajassa Yleensä vaaditaan myös deterministisyyttä Tuottaa samalla syötteellä aina saman tuloksen 811312A TRA, Johdanto 4
I.1.2. Algoritmit ja laskennalliset ongelmat Algoritmi ratkaisu laskennalliseen ongelmaan, esimerkiksi järjestämisongelma: Syöte: Lukujono a 1,a 2, a n, missä n on jokin positiivinen kokonaisluku Tulostus: Syötteen luvut järjestyksessä a 1, a 2, a n, niin että a 1 a 2 a n Ongelman ilmentymä: Ongelma konkreettisella syötteellä Järjestämisongelman ilmentymä: Järjestä luvut 34,11,9,7,22,15 811312A TRA, Johdanto 5
I.1.3 Esimerkkejä algoritmien sovelluskohteista Sovellukset taloudessa tyypillisesti optimointialgoritmeja, esim. jakelun optimointi Geenisekvenssien käsittely (esim. Human Genome Project) Internet: algoritmeja tiedon hakemiseen, keräämiseen ja lajitteluun Tietojen salaus (esim. sähköisessä kaupankäynnissä) Konenäkö (esim. hahmontunnistus videokuvasta) 811312A TRA, Johdanto 6
I.1.4 Algoritmien rajoituksista Kaikki ongelmat eivät algoritmisesti ratkeavia Esimerkiksi päätellä syötteenä saadusta tietokoneohjelman koodista päättyykö ohjelman suoritus Olemassa ongelmia, joihin algoritmi, mutta algoritmia ei tunneta Joidenkin ongelmien parhaat ratkaisualgoritmit suorituskelvottomia hitautensa vuoksi 811312A TRA, Johdanto 7
I.1.5 Algoritmin esittäminen Tällä kurssilla käytetään pseudokoodia: Syöte: Taulukko A[1,..,n], n >= 1 Tulostus: Suurin luvuista A[1],, A[n] MAKSIMI(A) 1. i = 2 2. x = A[1] 3. while i <= n 4. if A[i] > x 5. x = A[i] 6. i = i+1 7. return x 811312A TRA, Johdanto 8
I.1.6 Tietorakenteet Tapa, jolla algoritmi 1. säilöö ja 2. järjestää käyttämäänsä dataa Sopivin rakenne määräytyy laskennallisen tehtävän mukaan Eri tietorakenteiden ominaisuudet tunnettava, kun suunnittelee tai valitsee algoritmia Myöhemmin kurssilla tarkastellaan erilaisia tietorakenteita 811312A TRA, Johdanto 9
I.2. Algoritmien analyysistä Miksi analysoidaan? 1. Varmistetaan, että algoritmi toimii oikein Päättyminen Asianmukainen tulos 2. Algoritmin suorituskyvyn tarkastelu 811312A TRA, Johdanto 10
I.2.1 Algoritmin suorituskyky Algoritmin kuluttamien resurssien määrä Muistin kulutus (tilakompleksisuus) Algoritmin suoritusaika suhteessa syötteen kokoon Aikakompleksisuus Tällä kurssilla keskitytään aikakompleksisuuteen 811312A TRA, Johdanto 11
I.2.1.1 Syitä tutkia aikakompleksisuutta Osataan valita hitaan ja nopean algoritmin väliltä Algoritmien suorituskyvyn rajojen tunteminen Hyvä tietää ongelmia, joihin ei tunneta nopeaa ratkaisua Nopeakaan tietokone ei korjaa kehnon algoritmin suoriutumista 811312A TRA, Johdanto 12
N f(n) 20 40 60 80 100 500 1000 n 2μs 4μs 6μs 8μs 10μs 50μs 0.1ms n lg(n) 8.6μs 21.3μs 35μs 50μs 66μs 0.45ms 1ms n 2 40 μs 0.16ms 0.36ms 0.64ms 1ms 0.025s 0.1s n 3 0.8ms 6.4ms 0.022s 0.05s 0.1s 1.25s 1min40s 2 n 0.1s 1.27 päivää n! 7700 vuotta 2.6 10 33 vuotta 3660 vuotta 3.8 miljardia vuotta Algoritmin suoritusaikoja vaihtelevalla syötteen koolla (N). Oletetaan, että algoritmin suoritettavien askelten lukumäärä riippuu funktiosta f(n), missä n on syötteen koko ja että tietokone suorittaa noin 10 000 000 perusoperaatiota sekunnissa. 811312A TRA, Johdanto 13