Algoritmit 2. Luento 8 To Timo Männikkö

Samankaltaiset tiedostot
Algoritmit 1. Luento 11 Ti Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 1. Luento 12 Ke Timo Männikkö

Algoritmit 1. Luento 14 Ke Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 1. Luento 2 Ke Timo Männikkö

Olkoon S(n) kutsun merge-sort(a, p, q) tilavaativuus kun p q + 1 = n. Oletetaan merge toteutetuksi vakiotyötilassa (ei-triviaalia mutta mahdollista).

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 14 To Timo Männikkö

2.2.1 Ratkaiseminen arvausta sovittamalla

1.4 Funktioiden kertaluokat

Algoritmit 2. Luento 1 Ti Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

Tietorakenteet ja algoritmit

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 10 To Timo Männikkö

4 Tehokkuus ja algoritmien suunnittelu

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 13 Ti Timo Männikkö

Algoritmit 1. Luento 13 Ma Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

Nopea kertolasku, Karatsuban algoritmi

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

Tietorakenteet ja algoritmit. Kertaus. Ari Korhonen

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 2. Luento 12 To Timo Männikkö

Algoritmianalyysin perusteet

Algoritmit 1. Demot Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

a k+1 = 2a k + 1 = 2(2 k 1) + 1 = 2 k+1 1. xxxxxx xxxxxx xxxxxx xxxxxx

Algoritmit 2. Luento 9 Ti Timo Männikkö

Johdatus diskreettiin matematiikkaan Harjoitus 5, Ratkaise rekursioyhtälö

Algoritmit 2. Luento 10 To Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

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

Algoritmit 1. Luento 8 Ke Timo Männikkö

4. Algoritmien tehokkuus

On annettu jono lukuja tai muita alkioita, joiden välille on määritelty suuruusjärjestys. Tehtävänä on saattaa alkiot suuruusjärjestykseen.

Numeeriset menetelmät

4. Joukkojen käsittely

(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ä.

5 Kertaluokkamerkinnät

Kytkentäkentät - Rekursio, Cantor-verkko. Kytkentäkentän ominaisarvoja

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

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

ja λ 2 = 2x 1r 0 x 2 + 2x 1r 0 x 2

TIE Tietorakenteet ja algoritmit 25

Tietorakenteet ja algoritmit - syksy

Rekursioyhtälön ratkaisutapa #1: iteratiivinen korvaus

Algoritmit 2. Luento 11 Ti Timo Männikkö

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

811120P Diskreetit rakenteet

12. Algoritminsuunnittelun perusmenetelmiä

12. Algoritminsuunnittelun perusmenetelmiä

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

8. Lajittelu, joukot ja valinta

Algoritmit 2. Luento 5 Ti Timo Männikkö

Käänteismatriisin ominaisuuksia

Tehtävä 2. Osoita, että seuraavat luvut ovat algebrallisia etsimällä jokin kokonaislukukertoiminen yhtälö jonka ne toteuttavat.

Algoritmit 2. Luento 12 Ke Timo Männikkö

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

Numeeriset menetelmät

Algoritmit 2. Luento 6 Ke Timo Männikkö

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

811312A Tietorakenteet ja algoritmit II Algoritmien analyysi

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 1. Luento 4 Ke Timo Männikkö

Lukion matematiikkakilpailun alkukilpailu 2015

C = P Q S = P Q + P Q = P Q. Laskutoimitukset binaariluvuilla P -- Q = P + (-Q) (-Q) P Q C in. C out

Algoritmit 2. Luento 4 Ke Timo Männikkö

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

Algoritmit 2. Luento 9 Ti Timo Männikkö

Tarkennamme geneeristä painamiskorotusalgoritmia

Algoritmit 2. Luento 4 To Timo Männikkö

Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten,

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

Algoritmit 1 Syksy 2008

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 11 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

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

9 Erilaisia tapoja järjestää

Transkriptio:

Algoritmit 2 Luento 8 To 4.4.2019 Timo Männikkö

Luento 8 Algoritmien analysointi Algoritmien suunnittelu Rekursio Osittaminen Rekursioyhtälöt Rekursioyhtälön ratkaiseminen Master-lause Algoritmit 2 Kevät 2019 Luento 8 To 4.4.2019 2/31

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 silmukat, ehtolauseet ja muut rakenteet Algoritmit 2 Kevät 2019 Luento 8 To 4.4.2019 3/31

Perusoperaatiot Sijoituslause: Yleensä vakioaika Θ(1) Peräkkäiset lauseet: Lasketaan yhteen yksittäisten lauseiden suoritusaika Ehtolause: Ehtolausekkeen suoritusaika + ehdollisesti suoritetun lauseen maksimisuoritusaika Silmukka: Silmukkalauseen lausekkeiden suoritusaika + silmukan rungon suoritusaika summattuna yli silmukan suorituskertojen Algoritmit 2 Kevät 2019 Luento 8 To 4.4.2019 4/31

Aliohjelmat 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 2 Kevät 2019 Luento 8 To 4.4.2019 5/31

Algoritminen ongelmanratkaisu Tutkitaan tehtävän tai ongelman kuvaus Käydään läpi esimerkkitapauksia Jos ongelma voidaan muuntaa joksikin tunnetuksi ongelmaksi, sille saattaa löytyä valmiita ratkaisumenetelmiä Otetaan huomioon ratkaisuympäristön asettamat rajoitukset Algoritmit 2 Kevät 2019 Luento 8 To 4.4.2019 6/31

Algoritminen ongelmanratkaisu Käytetään hyviksi osoittautuneita algoritmien suunnittelumenetelmiä Algoritmin kuvaus Sanallinen, pseudokoodi Algoritmin analysointi Aikavaativuus, muiden resurssien käyttö Algoritmin toteutus Koodaus, testaus Algoritmit 2 Kevät 2019 Luento 8 To 4.4.2019 7/31

Algoritmien suunnittelumenetelmät Yleisiä tekniikoita ja periaatteita algoritmin muodostamiseksi Joskus algoritmi voidaan katsoa kuuluvan usean eri suunnittelumenetelmän mukaiseksi Joskus algoritmin ei voida katsoa kuuluvan mihinkään erityiseen suunnittelumenetelmäluokkaan Monesti algoritmi käyttää hyväksi ongelman erityisominaisuuksia Algoritmit 2 Kevät 2019 Luento 8 To 4.4.2019 8/31

Rekursio Algoritmi kutsuu itseään ratkaisun aikana Pienempi ongelma usein helpommin ratkaistavissa kuin samanlainen mutta suurempi ongelma Monille vaikeille ongelmille löytyy yksinkertainen rekursiivinen ratkaisumenetelmä Mutta rekursion käyttö voi joissain tapauksissa johtaa tehottomiin algoritmeihin Algoritmit 2 Kevät 2019 Luento 8 To 4.4.2019 9/31

Osittaminen Ositetaan eli jaetaan ongelma pienempiin vastaavanlaisiin osaongelmiin Ratkaistaan osaongelmat Muodostetaan osaongelmien ratkaisuista alkuperäisen ongelman ratkaisu Osaongelmat tyypiltään samanlaisia kuin alkuperäinen ongelma Osaongelmat voidaan ratkaista samalla tavalla Rekursio Algoritmit 2 Kevät 2019 Luento 8 To 4.4.2019 10/31

Rekursio ja ositus Oltava lopetusehto, jotta rekursio päättyy joskus Yleensä ositus kannattaa tehdä siten, että osaongelmat ovat keskenään suunnilleen samankokoisia Joissain tapauksissa on mahdollista, että osaongelmat eivät ole täysin erillisiä Kaikkia osaongelmia ei tarvitse aina ratkaista Riippuu tehtävästä, ratkaisuprosessin etenemisestä Ratkaisun muodostaminen osaongelmien ratkaisuista Riippuu tehtävästä Algoritmit 2 Kevät 2019 Luento 8 To 4.4.2019 11/31

Osittava ja rekursiivinen algoritmi Algoritmin kutsu annetulla ongelmalla: Jos riittävän pieni tai yksinkertainen ongelma Ratkaistaan se (ei-rekursiivisesti) ja palautetaan ratkaisu Muuten jaetaan ongelma pienempiin vastaavanlaisiin ongelmiin Ratkaistaan ne rekursiivisilla kutsuilla Muodostetaan pienempien ongelmien ratkaisuista tämän kutsun ongelman ratkaisu ja palautetaan se Algoritmit 2 Kevät 2019 Luento 8 To 4.4.2019 12/31

Esimerkki: Hanoin torni Kolme tankoa, n erikokoista kiekkoa Aluksi kaikki kiekot yhdessä tangossa suuruusjärjestyksessä Tehtävänä siirtää kaikki kiekot toiseen tankoon Siirretään vain yhtä kiekkoa kerrallaan Suurempaa kiekkoa ei saa siirtää pienemmän kiekon päälle Algoritmit 2 Kevät 2019 Luento 8 To 4.4.2019 13/31

Hanoin torni: Ratkaisu Siirretään lähdetangosta n 1 kiekkoa aputankoon Siirretään lähdetankoon jäänyt suurin kiekko kohdetankoon Siirretään aputangossa olevat n 1 kiekkoa kohdetankoon Algoritmia kutsutaan rekursiivisesti Rekursio päättyy kun siirrettävänä on vain yksi kiekko Algoritmit 2 Kevät 2019 Luento 8 To 4.4.2019 14/31

Hanoin torni: Algoritmi torni(lukumäärä, lähde, kohde, apu) { if (lukumäärä == 1) siirretään kiekko lähdetangosta kohdetankoon; else if (lukumäärä > 1) { torni(lukumäärä-1, lähde, apu, kohde); torni(1, lähde, kohde, apu); torni(lukumäärä-1, apu, kohde, lähde); } } Algoritmit 2 Kevät 2019 Luento 8 To 4.4.2019 15/31

Hanoin torni: Aikavaativuus Siirtojen lukumäärä s(n), kun kiekkoja n kappaletta Jos n = 1, niin s(n) = 1 Jos n > 1, niin s(n) = s(n 1) + s(1) + s(n 1) = 2s(n 1) + 1 Algoritmit 2 Kevät 2019 Luento 8 To 4.4.2019 16/31

Hanoin torni: Aikavaativuus s(n) = 2s(n 1) + 1 = 2 1 s(n 1) + 2 0 = 2[2s(n 2) + 1] + 1 = 4s(n 2) + 2 + 1 = 2 2 s(n 2) + 2 1 + 2 0 = 4[2s(n 3) + 1] + 2 + 1 =... = 2 n 1 s(1) + = 2 n 1 + 2 n 1 1 = 2 n 1 Eksponentiaalinen! n 2 j=0 2 j Algoritmit 2 Kevät 2019 Luento 8 To 4.4.2019 17/31

Rekursioyhtälöt Ongelma, jonka koko on n, jaetaan a:han osaongelmaan, joiden koko on n/b Osaongelmat ratkaistaan rekursiivisesti Lisäksi muu aika: Osaongelmien muodostaminen, ratkaisujen kokoaminen Rekursioyhtälö { c 1, kun n = 1 T (n) = at (n/b) + d(n), kun n = b k, k 1 Algoritmit 2 Kevät 2019 Luento 8 To 4.4.2019 18/31

Rekursioyhtälön ratkaiseminen T (n) = T (b k ) = at (b k 1 ) + d(b k ) = a[at (b k 2 ) + d(b k 1 )] + d(b k ) = a 2 T (b k 2 ) + ad(b k 1 ) + d(b k ) = a 2 [at (b k 3 ) + d(b k 2 )] + ad(b k 1 ) + d(b k ) = a 3 T (b k 3 ) + a 2 d(b k 2 ) + ad(b k 1 ) + d(b k ) =... = a k T (b 0 ) + }{{} =T (1)=c 1 k 1 j=0 a j d(b k j ) Algoritmit 2 Kevät 2019 Luento 8 To 4.4.2019 19/31

Rekursioyhtälön ratkaiseminen Erikoistapaus d(n) = cn α : T (n) = c 1 a k + = c 1 a k + k 1 j=0 k 1 j=0 k 1 = c 1 a k + cb αk a j d(b k j ) a j cb α(k j) j=0 ( a b α ) j Algoritmit 2 Kevät 2019 Luento 8 To 4.4.2019 20/31

Rekursioyhtälön ratkaiseminen Oletetaan ensin, että a b α : k 1 T (n) = c 1 a k + cb αk j=0 ( a b α ) j = c 1 a k + cb αk (a/bα ) k 1 (a/b α ) 1 = c 1 a k + c ak b αk (a/b α ) 1 Algoritmit 2 Kevät 2019 Luento 8 To 4.4.2019 21/31

Rekursioyhtälön ratkaiseminen T (n) = c 1 a k + c ak b αk (a/b α ) 1 = c 1 a log b n + c alog b n n α (a/b α ) 1 = c 1 n log b a + c nlog b a n α (a/b α ) 1 (k = log b n) (a log b n = n log b a ) Algoritmit 2 Kevät 2019 Luento 8 To 4.4.2019 22/31

Rekursioyhtälön ratkaiseminen T (n) = c 1 n log b a + c nlog b a n α (a/b α ) 1 Jos c = 0, kertaluokka n log b a Muuten kertaluokka joko n log b a tai n α riippuen siitä, kumpi eksponentti on suurempi log b a > α a > b α log b a < α a < b α Algoritmit 2 Kevät 2019 Luento 8 To 4.4.2019 23/31

Rekursioyhtälön ratkaiseminen Lisäksi tapaus a = b α ja c 0: k 1 T (n) = c 1 a k + cb αk j=0 = c 1 b αk + cb αk k = c 1 n α + cn α log b n ( a b α ) j Kertaluokka n α log b n Algoritmit 2 Kevät 2019 Luento 8 To 4.4.2019 24/31

Master-lause Rekursioyhtälön { c 1, kun n = 1 T (n) = at (n/b) + cn α, kun n = b k, k 1 ratkaisun kertaluokka on Θ(n log b a ), jos a > b α tai c = 0 Θ(n α ), jos a < b α ja c 0 Θ(n α log b n), jos a = b α ja c 0 Algoritmit 2 Kevät 2019 Luento 8 To 4.4.2019 25/31

Esimerkki: 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 2 Kevät 2019 Luento 8 To 4.4.2019 26/31

Esimerkki: 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 paikoissa l,..., k // ja k+1,..., h järjestykseen Algoritmit 2 Kevät 2019 Luento 8 To 4.4.2019 27/31

Esimerkki: Lomituslajittelu T (n) = { c 1, kun n = 1 2T (n/2) + cn, kun n = 2 k, k 1 a = 2, b = 2, α = 1, c 0 Master-lauseen kolmas kohta T (n) = Θ(n log 2 n) Algoritmit 2 Kevät 2019 Luento 8 To 4.4.2019 28/31

Esimerkki: Kokonaislukujen kertolasku Annettu n-bittisiä kokonaislukuja Oletus: n = 2 k jollain k 0 Kahden luvun yhteenlasku: Bitti kerrallaan Θ(n) Kertominen kakkosen potenssilla 2 m : Voidaan toteuttaa sivuttaissiirtona Θ(m) Kahden luvun kertolasku: Bitti kerrallaan ( peruskoulualgoritmilla ) Θ(n 2 ) Algoritmit 2 Kevät 2019 Luento 8 To 4.4.2019 29/31

Esimerkki: Kokonaislukujen kertolasku Kokonaislukujen X ja Y kertolasku osittamalla Jaetaan X :n bitit: X = A 2 n/2 + B Jaetaan Y :n bitit: Y = C 2 n/2 + D Silloin XY = AC 2 n + [(A B)(D C) + AC + BD] 2 n/2 + BD 3 kpl kertolaskuja n/2-bittisillä luvuilla 2 kpl sivuttaissiirtoja 6 kpl yhteen- ja vähennyslaskuja Algoritmit 2 Kevät 2019 Luento 8 To 4.4.2019 30/31

Esimerkki: Kokonaislukujen kertolasku T (n) = { c 1, kun n = 1 3T (n/2) + cn, kun n = 2 k, k 1 a = 3, b = 2, α = 1, c 0 Master-lauseen ensimmäinen kohta T (n) = Θ(n log 2 3 ) (log 2 3 1,58 < 2) Algoritmit 2 Kevät 2019 Luento 8 To 4.4.2019 31/31