Algoritmit 1 Luento 1 Ti 10.1.2017 Timo Männikkö
Luento 1 Algoritmi Algoritmin toteutus Ongelman ratkaiseminen Algoritmin tehokkuus Algoritmin suoritusaika Algoritmin analysointi Algoritmit 1 Kevät 2017 Luento 1 Ti 10.1.2017 2/18
Algoritmi Algoritmi: Askel askeleelta suoritettava menetelmä, tekniikka tai ohje jonkin tehtävän suorittamiseksi tai jonkin ongelman ratkaisemiseksi Hyvä algoritmi: Oltava ainakin riittävän tehokas Algoritmin toteutus (yleensä) tietokoneella: Vaatii sille sopivat tietorakenteet Tietorakenne: Systemaattinen tapa tallentaa algoritmin tarvitsema tieto Algoritmit 1 Kevät 2017 Luento 1 Ti 10.1.2017 3/18
Esimerkkejä P 1 : P 2 : Annettu kokonaisluvut n ja m Laske tulo n m Löytyy tehokkaita ratkaisualgoritmeja Annettu kokonaisluvut a 1, a 2,..., a n Järjestä luvut kasvavaan järjestykseen Löytyy tehokkaita ratkaisualgoritmeja Algoritmit 1 Kevät 2017 Luento 1 Ti 10.1.2017 4/18
Esimerkkejä P 3 : Annettu verkko G Sisältääkö G Eulerin polun (= yhtenäinen polku, jossa jokainen tie täsmälleen kerran) Löytyy tehokkaita ratkaisualgoritmeja 2 4 1 3 5 Algoritmit 1 Kevät 2017 Luento 1 Ti 10.1.2017 5/18
Esimerkkejä P 4 : Annettu verkko G Sisältääkö G Hamiltonin kehän (= silmukka, jossa jokainen solmu täsmälleen kerran) Ongelma kuuluu NP-täydellisten ongelmien joukkoon Ei luultavasti ole olemassa tehokasta ratkaisualgoritmia Algoritmit 1 Kevät 2017 Luento 1 Ti 10.1.2017 6/18
Esimerkkejä P 5 : Annettu tietokoneohjelma A ja sen syöte x Pysähtyykö ohjelman A suoritus syötteellä x Pysähdysongelma (halting problem) Ei ole olemassa ratkaisualgoritmia (Turing 1936) Osittaisratkaisu toteuttamalla ohjelma: Jos pysähtyy, vastaus on kyllä Jos ei pysähdy äärellisessä ajassa, vastaus jää auki Algoritmit 1 Kevät 2017 Luento 1 Ti 10.1.2017 7/18
Esimerkkejä P 6 : Annettu tietokoneohjelma A Pysähtyykö ohjelman A suoritus kaikilla syötteillä Ei ole olemassa edes edellisen kaltaista osittaisratkaisua Algoritmit 1 Kevät 2017 Luento 1 Ti 10.1.2017 8/18
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 1 Ti 10.1.2017 9/18
Algoritmin toteutus Algoritmilla syötteet ja tulosteet: Muuntaa syöttötiedot tulostustiedoiksi Laskennallinen ongelma Tarvitaan sopiva tietorakenne Algoritmin vaatimuksia: Askelmäärä äärellinen Antaa oikean vastauksen Riittävän tehokas Algoritmit 1 Kevät 2017 Luento 1 Ti 10.1.2017 10/18
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 1 Kevät 2017 Luento 1 Ti 10.1.2017 11/18
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 1 Kevät 2017 Luento 1 Ti 10.1.2017 12/18
Algoritmin suoritusaika Voidaan periaatteessa mitata: Suoritetaan algoritmi erilaisilla ja erikokoisilla esiintymillä Mutta: Algoritmi on toteutettava (ohjelmoitava) Laitteiston ja ohjelmointiympäristön vaikutus Käytännössä voidaan tutkia vain rajoitettu joukko esiintymiä Algoritmit 1 Kevät 2017 Luento 1 Ti 10.1.2017 13/18
Algoritmin analysointi Yleinen mittari suoritusajalle: Ei tarvitsisi toteuttaa algoritmia Riippumaton laitteistosta ja ohjelmoinnista Huomioidaan kaikki mahdolliset syöttötiedot Suoritusajan vaativuus: Lasketaan/arvioidaan algoritmin askelien/operaatioiden lukumääriä Määrätään suoritusajan riippuvuus syöttötiedon koosta Algoritmit 1 Kevät 2017 Luento 1 Ti 10.1.2017 14/18
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 1 Ti 10.1.2017 15/18
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 1 Ti 10.1.2017 16/18
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 1 Ti 10.1.2017 17/18
Keskimääräinen suoritusaika Haku taulukosta: Jos haettava alkio on k:s alkio, suoritetaan k vertailua Oletus: Jokaisen alkion haku todennäköisyydellä 1/n Keskimääräinen vertailujen lukumäärä 1 n (1 + 2+ + n) = 1 n = 1 n n(n + 1) 2 n i=1 i = n + 1 2 Algoritmit 1 Kevät 2017 Luento 1 Ti 10.1.2017 18/18