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

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

1.4 Funktioiden kertaluokat

Algoritmit 1. Luento 2 Ke Timo Männikkö

5 Kertaluokkamerkinnät

Algoritmit 2. Demot Timo Männikkö

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

A TIETORAKENTEET JA ALGORITMIT

4 Tehokkuus ja algoritmien suunnittelu

Tutkimusmenetelmät-kurssi, s-2004

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9

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

Algoritmit 1. Demot Timo Männikkö

2. Algoritmien analysointimenetelmistä

9 Erilaisia tapoja järjestää

3. Laskennan vaativuusteoriaa

1 Erilaisia tapoja järjestää

Algoritmit 1. Luento 5 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

Algoritmit 1. Demot Timo Männikkö

58131 Tietorakenteet ja algoritmit (syksy 2015)

Algoritmi on periaatteellisella tasolla seuraava:

4. Algoritmien tehokkuus

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Algoritmianalyysin perusteet

Algoritmit 1. Luento 3 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

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

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia

2. Algoritmien analysointimenetelmistä

2. Algoritmien analysointimenetelmistä

Tietorakenteet, laskuharjoitus 3, ratkaisuja

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

Johnson, A Theoretician's Guide to the Experimental Analysis of Algorithms.

1. Osoita, että joukon X osajoukoille A ja B on voimassa toinen ns. de Morganin laki (A B) = A B.

Shorin algoritmin matematiikkaa Edvard Fagerholm

Ensimmäinen induktioperiaate

Algoritmit 2. Luento 14 Ke Timo Männikkö

MS-A0401 Diskreetin matematiikan perusteet

Ensimmäinen induktioperiaate

= 3 = 1. Induktioaskel. Induktio-oletus: Tehtävän summakaava pätee jollakin luonnollisella luvulla n 1. Induktioväite: n+1

Algoritmit 1. Luento 1 Ti Timo Männikkö

Reaalifunktioista 1 / 17. Reaalifunktioista

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

Tarkennamme geneeristä painamiskorotusalgoritmia

MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä ym., osa I

MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä ym., osa I

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmien suunnittelu ja analyysi (kevät 2004) 1. välikoe, ratkaisuja

Algoritmit 2. Luento 7 Ti Timo Männikkö

7.4 Sormenjälkitekniikka

Tietorakenteet, laskuharjoitus 2,

Vastaus 1. Lasketaan joukkojen alkiot, ja todetaan, että niitä on 3 molemmissa.

Todistamisessa on tärkeää erottaa tapaukset, kun sääntö pätee joillakin tai kun sääntö pätee kaikilla. Esim. On olemassa reaaliluku x, jolle x = 5.

Algoritmit 2. Luento 13 Ti Timo Männikkö

Miten perustella, että joukossa A = {a, b, c} on yhtä monta alkiota kuin joukossa B = {d, e, f }?

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Nopea kertolasku, Karatsuban algoritmi

Miten osoitetaan joukot samoiksi?

58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut

2.1. Tehtävänä on osoittaa induktiolla, että kaikille n N pätee n = 1 n(n + 1). (1)

Esitetään tehtävälle kaksi hieman erilaista ratkaisua. Ratkaisutapa 1. Lähdetään sieventämään epäyhtälön vasenta puolta:

Sekalaiset tehtävät, 11. syyskuuta 2005, sivu 1 / 13. Tehtäviä

Tietorakenteet ja algoritmit - syksy

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

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

4.3. Matemaattinen induktio

isomeerejä yhteensä yhdeksän kappaletta.

Perustehtävät. Kompleksitehtävät, 10/9/2005, sivu 1 / 10. Tehtävä 1. Sievennä 1.

JOHDATUS LUKUTEORIAAN (syksy 2017) HARJOITUS 3, MALLIRATKAISUT

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Tehtävä 1. Päättele resoluutiolla seuraavista klausuulijoukoista. a. 1 {p 3 } oletus. 4 {p 1, p 2, p 3 } oletus. 5 { p 1 } (1, 2) 7 (4, 6)

Diskreetin matematiikan perusteet Laskuharjoitus 1 / vko 8

Algoritmit 2. Luento 2 Ke Timo Männikkö

MS-A0401 Diskreetin matematiikan perusteet Esimerkkejä ym., osa I

MS-A0401 Diskreetin matematiikan perusteet Esimerkkejä ym., osa I

MS-A0401 Diskreetin matematiikan perusteet Esimerkkejä ym., osa I

Induktiota käyttäen voidaan todistaa luonnollisia lukuja koskevia väitteitä, jotka ovat muotoa. väite P(n) on totta kaikille n = 0,1,2,...

Vaihtoehtoinen tapa määritellä funktioita f : N R on

Matematiikan johdantokurssi, syksy 2016 Harjoitus 11, ratkaisuista

Numeeriset menetelmät

Rekursio. Funktio f : N R määritellään yleensä antamalla lauseke funktion arvolle f (n). Vaihtoehtoinen tapa määritellä funktioita f : N R on

Algoritmit 2. Luento 14 To Timo Männikkö

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

2 Funktion derivaatta

Johdatus matemaattiseen päättelyyn

Konsensusongelma hajautetuissa järjestelmissä. Niko Välimäki Hajautetut algoritmit -seminaari

AVL-puut. eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta

811312A Tietorakenteet ja algoritmit I Johdanto

2 Sanoja järjestävän funktion ohjelmoiminen

2.2.1 Ratkaiseminen arvausta sovittamalla

Liite 1. Laajennettu Eukleideen algoritmi suoraviivainen tapa

Testaa: Vertaa pinon merkkijono syötteeseen merkki kerrallaan. Jos löytyy ero, hylkää. Jos pino tyhjenee samaan aikaan, kun syöte loppuu, niin

Johdatus diskreettiin matematiikkaan Harjoitus 5, Ratkaise rekursioyhtälö

(b) Onko hyvä idea laske pinta-alan odotusarvo lähetmällä oletuksesta, että keppi katkeaa katkaisukohdan odotusarvon kohdalla?

Yhtäpitävyys. Aikaisemmin osoitettiin, että n on parillinen (oletus) n 2 on parillinen (väite).

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

1 sup- ja inf-esimerkkejä

Algoritmit 2. Luento 8 To Timo Männikkö

Johdatus lukuteoriaan Harjoitus 2 syksy 2008 Eemeli Blåsten. Ratkaisuehdotelma

Transkriptio:

Määritelmä: on O(g(n)), jos on olemassa vakioarvot n 0 > 0 ja c > 0 siten, että c g(n) kun n > n 0 O eli iso-o tai ordo ilmaisee asymptoottisen ylärajan resurssivaatimusten kasvun suuruusluokalle Samankaltaisia notaatioita: Ω eli iso-omega ja Θ eli theta Ω: asymptoottinen alaraja Θ: asymptoottinen yhtäsuuruus Tietorakenteet, syksy 2007 1 Terminologiasta: kasvunopeuden suuruusluokkaa nimitetään usein algoritmin (asymptoottiseksi) kompleksisuudeksi Määritelmä: on Ω(g(n)), jos on olemassa vakioarvot n 0 > 0 ja c > 0 siten, että c g(n) kun n > n 0 ainoa ero O:n määritelmään on suuremmuuden suunta = Ω(g(n)): kompleksisuus on vähintään g(n) Tietorakenteet, syksy 2007 2 algoritmin suoritusaika t = Ω(g(n)) jos ja vain jos g(n) = O() algoritmin suoritusaika t cg(n) g(n) 1 c cg(n) cg(n) n 0 Syötteen koko (parametri) n n 0 Syötteen koko (parametri) n Tietorakenteet, syksy 2007 3 Tietorakenteet, syksy 2007 4

Esimerkiksi = 2n 2 + 3n log(n) = Ω(n 2 ) 2n 2 + 3n log(n) n 2, kun n > n 0 = 1 Esimerkiksi = 1 100 n2 3n = Ω(n 2 ) 1 100 n2 = 1 200 n2 + 1 200 n2 1 200 n2 3n, kun n > n 0 = 600 = 1 100 n2 3n = 1 200 n2 + ( 1 200 n2 3n) 1 200 n2, kun n > n 0 = 600 Θ eli theta yhdistää O- ja Ω-merkinnät Määritelmä: on Θ(g(n)), jos on Ω(g(n)) ja on O(g(n)) on olemassa vakio n 0 > 0, c 1 > 0 ja c 2 > 0, joilla c 1 g(n) c 2 g(n) aina kun n > n 0 = Θ(g(n)): kompleksisuus on täsmälleen g(n) (vakiotekijän rajoissa) Tietorakenteet, syksy 2007 5 Tietorakenteet, syksy 2007 6 algoritmin suoritusaika t c 2 g(n) c 1 g(n) = Θ(g(n)) jos ja vain jos g(n) = Θ() c 1 g(n) c 2 g(n) 1 c 2 g(n) 1 c 1 algoritmin suoritusaika t c 2 g(n) c 1 g(n) n 0 Syötteen koko (parametri) n n 0 Syötteen koko (parametri) n Tietorakenteet, syksy 2007 7 Tietorakenteet, syksy 2007 8

Θ on asymptoottisesti yksikäsitteinen jos esim. = Θ(g 1 (n)) ja = Θ(g 2 (n)), niin g 1 (n) ja g 2 (n) omaavat keskenään saman kompleksisuuden Esim. O-raja voi olla asymptoottisesti epätarkka, mutta Θ-arvo ei 2n = O(n) (tarkka) ja toisaalta 2n = O(n 2 ) (epätarkka raja) Esimerkiksi = 1 100 n2 3n = Θ(n 2 ) aiemmin todettiin, että = Ω(n 2 ) tarvitsee näyttää, että = O(n 2 ) 1 100 n2 n 2 3n n 2 = 1 100 n2 3n 2n 2, kun n > n 0 = 0 1 100 n2 3n = Ω(n 2 ) ja 1 100 n2 3n = O(n 2 ), joten = 1 100 n2 3n = Θ(n 2 ) Tietorakenteet, syksy 2007 9 Tietorakenteet, syksy 2007 10 Asymptoottisen notaation käytöstä Huomioita O-notaation käytöstä merkintä = O(g(n)) ei oikeasti tarkoita yhtäsuuruutta, vaan että funktiolla on suuruusluokkaa g(n) oleva yläraja formaalisti O(g(n)) on funktioiden joukko sisältää kaikki funktiot, joiden kasvunopeus on korkeintaan samaa suuruusluokkaa kuin funktion g(n) voitaisiin siis (oikeammin) merkitä O(g(n)) Tietorakenteet, syksy 2007 11 Asymptoottisen notaation käytöstä Kuitenkin vallitseva tapa: = O(g(n)) Esimerkki: 2n 2 + 5n = 2n 2 + O(n) O(g(n)): jokin kasvunopeuden O(g(n)) omaava funktio O-arvot on yleensä tarkoituksenmukaista antaa mahdollisimman sievennetyssä muodossa Mukaanlukien vakiotermien poisto (esim. O(3n 2 ) sievennetään muotoon O(n 2 )) Vastaavat huomiot pätevät myös esim. Ω- ja Θ-notaatioille Tietorakenteet, syksy 2007 12

Asymptoottisen notaation käytöstä Asymptoottisen notaation päätarkoitus on auttaa algoritmien korkean tason analysoinnissa vakiokertoimien huomioimatta jättäminen voi olla käytännössä merkittävää esim. O(n log(n)) toisinaan käytännössä tehokkaampi kuin O(n) Usein O-notaatiota käytetään Θ-notaation roolissa Tyypillinen tulkinta: O() tarkoittaa (mahdollisimman) tiukkaa pahimman tapauksen kompleksisuutta Tietorakenteet, syksy 2007 13 Asymptoottisen notaation käytöstä Jos puhutaan yleisesti ottaen algoritmin kompleksisuudesta, niin O: algoritmin kompleksisuuden yläraja pahimman tapauksen analyysi Ω: algoritmin kompleksisuuden alaraja parhaan tapauksen analyysi Θ: algoritmin kompleksisuus vakiokertoimeen asti syötteestä riippumaton parhaalla ja pahimmalla tapauksella sama kompleksisuus Tietorakenteet, syksy 2007 14 Asymptoottisen notaation käytöstä Jos tarkastellaan nimenomaan parasta / keskimääräistä / pahinta tapausta: = Θ(g(n)): kompleksisuus on kyseisessä tapauksessa tarkalleen g(n) = O(g(n)): kompleksisuus on kyseisessä tapauksessa korkeintaan g(n) = Ω(g(n)): kompleksisuus on kyseisessä tapauksessa vähintään g(n) tällöin O ja ω mielekkäitä lähinnä jos tarkka Θ vaikea määrittää (tai se on vaikealukuinen) Tietorakenteet, syksy 2007 15 o ja ω O- ja Ω-merkintöjen aidot versiot: o ja ω Määritelmä: on o(g(n)), jos mille tahansa vakiolle c > 0 on olemassa vakioarvo n 0 siten, että < cg(n), kun n > n 0 on o(g(n)): g(n) 0, kun n tarkoittaa, että funktion kompleksisuus on aidosti pienempi kuin funktion g(n) vrt. = O(g(n)): kompleksisuus on pienempi tai yhtäsuuri kuin g(n) Esim. 2n + log(n) = 2n + o(n) Tietorakenteet, syksy 2007 16

o ja ω Määritelmä: on ω(g(n)), jos mille tahansa vakiolle c > 0 on olemassa vakioarvo n 0 siten, että > cg(n), kun n > n 0 funktion kompleksisuus on aidosti suurempi kuin funktion g(n) vrt. = Ω(g(n)): kompleksisuus on suurempi tai yhtäsuuri kuin g(n) Esim. 2n log(n) + 5n = ω(n) = ω(g(n)) g(n) = o() Muutama esimerkki Algorithm OddCount(A, n) odds 0 for i 0 to n 1 Do if A[i] on pariton then odds odds + 1 end if odds Asymptoottinen analyysi: riittää laskea alkeisoperaatioiden lukumäärän suuruusluokka o- ja ω-notaatioita käytetään melko harvoin Tietorakenteet, syksy 2007 17 Tietorakenteet, syksy 2007 18 Muutama esimerkki Algorithm OddCount(A, n) odds 0 for i 0 to n 1 do if A[i] on pariton then odds odds + 1 end if odds for-silmukan sisällä: O(1) silmukkaa suoritetaan O(n) kertaa kompleksisuus O(1) O(n) = O(1 n) = O(n) Tietorakenteet, syksy 2007 19 Algorithm FindFirstOdd(A, n) i 0 while i < n ja A[i] ei ole pariton do i i + 1 end while i Paras tapaus? A[0] on pariton parhaan tapauksen työmäärä Θ(1) Pahin tapaus? jokainen A[i] parillinen pahimman tapauksen työmäärä Θ(n) Ω(1) ja O(n), Θ ei yleisesti ottaen olemassa Tietorakenteet, syksy 2007 20

Algorithm FindFirstOdd(A, n) i 0 while i < n ja A[i] ei ole pariton do i i + 1 end while i Keskimääräinen tapaus? O(1) jos A sisältää satunnaislukuja todennäköisyys 1 2, että A[i] parillinen todennäköisyys edetä alkioon i: 1 2 i esim. i 4 n. 1 = 1 2 4 16-osalle syötteistä Tietorakenteet, syksy 2007 21 Algorithm FindFirstOdd(A, n) i 0 while i < n ja A[i] ei ole pariton do i i + 1 end while i Keskimääräinen tapaus jatkuu... olkoon q erilaisten kokoa n olevien syötteiden lukumäärä 1 2 i q syötettä, joilla tutkitaan alkio A[i] Tietorakenteet, syksy 2007 22 Algorithm FindFirstOdd(A, n) i 0 while i < n ja A[i] ei ole pariton do i i + 1 end while i Keskimääräinen tapaus jatkuu... kaikkien syötteiden käsittely: tutkitaan yhteensä Σ n 1 i=0 (q 1 ) alkiota 2 i keskiarvo: em. lukumäärä jaettuna arvolla q: Σi=0 n 1 ( 1 ) = 2 1 < 2 = O(1) 2 i 2 n 1 Tietorakenteet, syksy 2007 23 Hieman hankalampi tapaus: Voidaan soveltaa induktiota koodin yhteydessä ns. silmukkainvariantti Tutkitaan mitä tapahtuu algoritmin alkuvaiheessa (pienillä i:n arvoilla), ja yritetään edetä induktiivisesti arvosta i arvoon i + 1 Tietorakenteet, syksy 2007 24

Aluksi nyrkkisääntö: algoritmin kompleksisuuden määrää sen useimmin suoritetun operaation suorituskertojen lukumäärä, lkm max operaatioita vakio c operaatioiden kokonaislukumäärä korkeintaan c lkm max Tietorakenteet, syksy 2007 25 Tästä ensimmäinen huomio: algoritmin Mysteeri kompleksisuus verrannollinen sisäsilmukan suorituskertojen lukumäärään Jatkohuomio: kukin sisäsilmukan suoritus kasvattaa muuttujan c arvoa yhdellä kompleksisuus verrannollinen c:n lopulliseen arvoon Tietorakenteet, syksy 2007 26 Tutkitaan arvon c muutosta induktiivisesti i = 1: sisäsilmukka suoritetaan arvoille j = 2...n eli c kasvaa arvosta 1 arvoon n i = 2: sisäsilmukka suoritetaan arvoille j = n + 1...n 2 eli c kasvaa arvosta n arvoon n 2 Tietorakenteet, syksy 2007 27 i = 3: sisäsilmukka suoritetaan arvoille j = n 2 + 1...n 3 eli c kasvaa arvosta n 2 arvoon n 3 c:n arvot kun i = 1...3: n, n 2, n 3 c:n arvo näyttäisi noudattavan kaavaa n i Edetään induktioperiaatteen mukaisesti ja silmukkainvarianttia käyttäen Tietorakenteet, syksy 2007 28

Silmukkainvariantti: c:n arvo on n i kierroksen i jälkeen Induktio-oletus: sääntö päti kun i = 1...3. Oletetaan, että c:n arvo on n i aina kun i < i Induktioaskel: tutkitaan päteekö väite kierroksen i jälkeen Tietorakenteet, syksy 2007 29 Oletuksen nojalla c:n arvo kierroksen i 1 jälkeen on n i 1 kierroksen i alussa asetetaan eli k saa arvon nn i 1 = n i c:n arvo kasvaa arvolla k c, joten c:n uusi arvo on c + k c = k = n i Induktion nojalla väite pätee kaikilla i Tietorakenteet, syksy 2007 30 Kierroksen i = n jälkeen c = n i = n n Algoritmin Mysteeri kompleksisuus on näin ollen O(n n ) tarkkaan ottaen Θ(n n ), koska pahin ja paras tapaus identtisiä ja esitetyssä analyysissä ainoastaan vakiotekijän suuruinen epätarkkuus Tietorakenteet, syksy 2007 31