Algoritmit 1. Luento 3 Ti Timo Männikkö

Samankaltaiset tiedostot
Algoritmit 2. Luento 8 To Timo Männikkö

Algoritmit 1. Luento 11 Ti Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 1. Luento 4 Ke Timo Männikkö

Algoritmit 1. Luento 2 Ke Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 1. Luento 12 Ke Timo Männikkö

Algoritmit 2. Luento 1 Ti Timo Männikkö

Algoritmit 1. Luento 14 Ke Timo Männikkö

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 1. Demot Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 1 Syksy 2008

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

8. Lajittelu, joukot ja valinta

Pikalajittelu: valitaan ns. pivot-alkio esim. pivot = oikeanpuoleisin

Tietorakenteet ja algoritmit - syksy

Algoritmit 2. Luento 13 Ti Timo Männikkö

4. Algoritmien tehokkuus

Tietorakenteet, laskuharjoitus 3, ratkaisuja

Algoritmit 2. Luento 13 Ti Timo Männikkö

Tieto- ja tallennusrakenteet

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))

Tietorakenteet ja algoritmit

Numeeriset menetelmät

useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

(p j b (i, j) + p i b (j, i)) (p j b (i, j) + p i (1 b (i, j)) p i. tähän. Palaamme sanakirjaongelmaan vielä tasoitetun analyysin yhteydessä.

1 Erilaisia tapoja järjestää

Algoritmit 1. Demot Timo Männikkö

4 Tehokkuus ja algoritmien suunnittelu

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Algoritmit 1. Luento 13 Ti Timo Männikkö

Tietorakenteet ja algoritmit

A215 Tietorakenteet. Tietojenkäsittelytieteiden laitos Tampereen yliopisto. Periodit I-II, syksy 2007

Imperatiivisen ohjelmoinnin peruskäsitteet. Meidän käyttämän pseudokielen lauseiden syntaksi

1.4 Funktioiden kertaluokat

Algoritmit 2. Luento 5 Ti Timo Männikkö

Jakso 4 Aliohjelmien toteutus

Algoritmit 2. Luento 4 To Timo Männikkö

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 14 To Timo Männikkö

Jakso 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

58131 Tietorakenteet (kevät 2009) Harjoitus 9, ratkaisuja (Antti Laaksonen)

58131 Tietorakenteet ja algoritmit (syksy 2015)

REKURSIO. Rekursiivinen ohjelma Kutsuu itseään. Rekursiivinen rakenne. Rakenne sisältyy itseensä. Rekursiivinen funktio. On määritelty itsensä avulla

Algoritmianalyysin perusteet

Kaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PushFront(x): lisää tietoalkion x jonon eteen

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 4 Ke Timo Männikkö

Tarkennamme geneeristä painamiskorotusalgoritmia

Nopea kertolasku, Karatsuban algoritmi

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Algoritmit 2. Luento 5 Ti Timo Männikkö

8. Lajittelu, joukot ja valinta

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Algoritmit 2. Luento 10 To Timo Männikkö

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Tietorakenteet ja algoritmit

TIE Tietorakenteet ja algoritmit 25

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

Java-kielen perusteita

Algoritmit 1. Luento 13 Ma Timo Männikkö

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Algoritmit ja tietorakenteet / HL Copyright Hannu Laine

Lyhyt kertaus osoittimista

Koe ma 1.3 klo salissa A111, koeaika kuten tavallista 2h 30min

18. Abstraktit tietotyypit 18.1

5 Kertaluokkamerkinnät

Tietorakenteet ja algoritmit. Kertaus. Ari Korhonen

811312A Tietorakenteet ja algoritmit, , Harjoitus 4, Ratkaisu

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 1, , vastauksia

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

Muistutus aikatauluista

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Algoritmit 2. Demot Timo Männikkö

Algoritmit 1. Luento 6 Ke Timo Männikkö

Transkriptio:

Algoritmit 1 Luento 3 Ti 17.1.2017 Timo Männikkö

Luento 3 Algoritmin analysointi Rekursio Lomituslajittelu Aikavaativuus Tietorakenteet Pino Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 2/27

Algoritmien analysointi Määritellään ohjelman/algoritmin yksittäisten käskyjen/askelien asymptoottinen vaativuus Yhdistetään peräkkäin suoritettavien käskyjen/askelien vaativuudet Huomioidaan ehtolauseet, silmukat ja muut rakenteet Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 3/27

Perusoperaatiot Sijoituslause: Yleensä vakioaika O(1) Peräkkäiset lauseet: Lasketaan yhteen yksittäisten lauseiden suoritusaika Ehtolause: Ehtolausekkeen suoritusaika + ehdollisesti suoritettujen lauseiden maksimisuoritusaika Silmukka: Silmukkalauseen lausekkeiden suoritusaika + silmukan rungon suoritusaika summattuna yli silmukan suorituskertojen Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 4/27

Aliohjelmat Ei-rekursiiviset aliohjelmakutsut: Selvitetään alimman tason aliohjelmien suoritusaika (eivät sisällä aliohjelmakutsuja) Selvitetään seuraavan tason aliohjelmien suoritusaika (sisältävät vain sellaisten aliohjelmien kutsuja, joiden suoritusaika jo selvitetty) Jatketaan kunnes kaikkien aliohjelmien suoritusajat selvitetty Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 5/27

Rekursio Algoritmi/aliohjelma kutsuu itseään Ongelma jaetaan pienempiin vastaavanlaisiin osaongelmiin, jotka ratkaistaan rekursiivilla kutsuilla Yksi vahvimmista ratkaisumenetelmistä Monet ongelmat luonnostaan rekursiivisia tai ne voidaan kuvata rekursiivisesti Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 6/27

Rekursiiviset algoritmit Algoritmin kutsu annetulla ongelmalla: Jos pieni yksinkertainen ongelma Ratkaistaan se ja palautetaan ratkaisu Muutoin jaetaan ongelma pienempiin vastaavanlaisiin ongelmiin Ratkaistaan ne rekursiivisilla kutsuilla Muodostetaan pienempien ongelmien ratkaisuista tämän kutsun ongelman ratkaisu Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 7/27

Lomituslajittelu Oletus: Järjestettäviä alkioita n = 2 k Jaetaan järjestettävät alkiot kahteen osajoukkoon Osajoukoissa n/2 alkiota Osajoukot lajitellaan rekursiivisesti Rekursio lopetetaan, kun osajoukossa on yksi alkio Yhdistetään kahden järjestetyn osajoukon alkiot lomittamalla Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 8/27

Lomituslajittelu Merge_sort(a, l, h) { if (l < h) { k = (l + h)/2; Merge_sort(a, l, k); Merge_sort(a, k+1, h); Merge(a, l, k, h); } } Merge(a, l, k, h) // Lomitetaan alkiot l,...,k ja // k+1,...,h järjestykseen Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 9/27

Lomituslajittelu: Esimerkki 20 6 12 17 14 9 23 15 20 6 12 17 14 9 23 15 20 6 12 17 14 9 23 15 20 6 12 17 14 9 23 15 6 20 12 17 14 9 23 15 6 20 12 17 14 9 23 15 6 20 12 17 14 9 23 15 6 12 17 20 14 9 23 15 Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 10/27

Lomituslajittelu: Esimerkki jatkuu 6 12 17 20 14 9 23 15 6 12 17 20 14 9 23 15 6 12 17 20 14 9 23 15 6 12 17 20 9 14 23 15 6 12 17 20 9 14 23 15 6 12 17 20 9 14 15 23 6 12 17 20 9 14 15 23 6 9 12 14 15 17 20 23 Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 11/27

Lomituslajittelun vaativuus Merkitään: T (n) = suoritusajan pahimman tapauksen vaativuus, kun syöttötiedon koko n alkiota Ehtolauseen ja sijoituslauseen suoritukset: vakioaika b Rekursiivisten kutsujen suoritukset: kaksi kutsua T (n/2) Lomitus voidaan tehdä lineaarisessa ajassa: cn jollain vakiolla c Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 12/27

Lomituslajittelun vaativuus T (n) = { b, jos n = 1 2T ( n ) + cn, jos n > 1 2... T (n) = O(n log n) Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 13/27

Lajittelumenetelmien vaativuus Yksinkertaisia (raakaan voimaan perustuvia) lajittelumenetelmiä: Kuplalajittelu, lisäyslajittelu, valintalajittelu Vaativuus O(n 2 ) Osittamiseen perustuvia lajittelumenetelmiä: Lomituslajittelu, pikalajittelu Vaativuus O(n log n) Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 14/27

Lajittelumenetelmien vaativuus Esimerkki: Tietokone suorittaa 100 000 000 käskyä sekunnissa Järjestettävänä 1 000 000 alkiota Yksinkertainen lajittelumenetelmä: 2n 2 käskyä 5.56 tuntia Osittamiseen perustuva lajittelumenetelmä: 50n log n käskyä 10 sekuntia Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 15/27

Aikavaativuusanalyysi: Huomioita Muut seikat voivat olla tärkeämpiä kuin suoritusaika: Käytettävyys, modulaarisuus, siirrettävyys, yksinkertaisuus, laajennettavuus jne. Algoritmien käyttäytyminen voi olla keskimäärin huomattavasti parempaa kuin pahimmassa tapauksessa Jos algoritmia käytetään kerran tai pari, helpommin/halvemmin toteutettava algoritmi voi olla parempi valinta Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 16/27

Aikavaativuusanalyysi: Huomioita (jatkuu) Jos algoritmia käytetään vain pienillä n, suoritusajan funktion termien kertoimilla voi olla suurempi vaikutus kuin funktion kasvunopeudella Tehokkain algoritmi voi olla liian monimutkainen toteutettavaksi Suuri muistitilan tarve tai erilaisten muistien käyttö voi hidastaa algoritmin toimintaa Algoritmeilla voi olla muita tärkeitä vaatimuksia, esim. numeerinen tarkkuus Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 17/27

Muistitilan analysointi Muistitilaa tarvitaan: Ohjelmakoodille Käsiteltävälle datalle Kiinteä osa muistitilasta: Ei riipu ongelman esiintymästä Vaihteleva osa muistitilasta: Esiintymän data, muuttujat, työtilat, aliohjelmakutsut jne. Muistitilan tarpeen laskenta yleensä yksinkertaisempaa kuin suoritusajan laskenta Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 18/27

Suoritusajan mittaaminen Empiirinen analyysi: Toteutetaan (ohjelmoidaan) algoritmi Muodostetaan testiaineistot Mitataan suoritusaikoja Voidaan selvittää muitakin asioita: Tiettyjen operaatioiden lukumäärät Muistiviittausten lukumäärät Ohjelman pullonkaulat Empiirisen analyysin tulos riippuu aina syöttötiedoista Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 19/27

Tietorakenteet Algoritmin toteutus vaatii sopivan tietorakenteen Ongelman tiedot, algoritmin tiedot, työtilat Tallennustapa vaikuttaa suoritusaikaan ja muistitilan tarpeeseen Tarkastellaan tietorakenteita abstrakteina tietotyyppeinä Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 20/27

Abstrakti tietotyyppi Tiedot: Mitä tietoalkioita rakenteessa on Operaatiot: Mitä tiedoilla voidaan tehdä Riippumaton tiedon esitysmuodosta ja toteutuksen ohjelmointikielestä Ei välitetä toteutuksen yksityiskohdista Erilaiset määrittelyt ja toteutukset vaikuttavat algoritmin toimintaan: Nopeus, muistitila, yksinkertaisuus, käytettävyys jne. Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 21/27

Pino Pino, stack, Last-In-First-Out, LIFO Perusoperaatiot: push: Alkion lisäys pinon päällimmäiseksi pop: Alkion palautus ja poisto pinon päältä Muita mahdollisia operaatioita: isempty: Testaa onko pino tyhjä size: Palauttaa pinon alkioiden lukumäärän top: Palauttaa pinon päällimmäisen alkion ilman että se poistetaan pinosta Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 22/27

Pinon käyttökohteita Pino yksinkertainen, mutta paljon käytetty Ohjelmointikielet: Kun aliohjelmaa kutsutaan, paluuosoite ja osa parametreista tallennetaan pinoon Käyttöjärjestelmät: Kun suorittimessa tapahtuu keskeytys, osa rekistereistä tallennetaan pinoon Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 23/27

Esimerkki Merkkijonossa sulkumerkkejä { } [ ] ( ) Testataan, sulkeutuvatko sulut oikein Oikein: ( ) ( [ ( ) ( ) ] { ( ) } ) Pino: Väärin: [ ( ) ( ] ) ( [ ( ) ] { ( ) } ) pohja pino huippu merkkijono Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 24/27

Esimerkki jatkuu 1. Pino tyhjäksi, asetutaan merkkijonon alkuun 2. Jos merkkijono loppu ja pino tyhjä, lopetetaan (sulut oikein) 3. Merkkijonosta seuraava merkki a 4. Jos a jokin vasen sulku, niin push(a) 5. Jos a jokin oikea sulku ja pinon päällä saman tyyppinen vasen sulku, niin pop() Muuten lopetetaan (sulut väärin) 6. Jos a muu merkki, ei tehdä mitään 7. Toistetaan kohdasta 2 Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 25/27

Esimerkki jatkuu ( ) ( [ ( ) ( ) ] { ( ) } ) ( ) ( [ ( ) ( ) ] { ( ) } ) ( [ ( ) ( ) ] { ( ) } ) ( [ ( ) ( ) ] { ( ) } ) ( [ ( ) ( ) ] { ( ) } ) ( [ ( ) ( ) ] { ( ) } ) ( [ ( ) ] { ( ) } ) ( [ ( ) ] { ( ) } ) Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 26/27

Esimerkki jatkuu ( [ ( ) ] { ( ) } ) ( [ ] { ( ) } ) ( { ( ) } ) ( { ( ) } ) ( { ( ) } ) ( { } ) ( ) Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 27/27