7. Aikavaativuus. Ohjelmistotekniikan laitos OHJ-2300 Johdatus tietojenkäsittelyteoriaan, syksy

Samankaltaiset tiedostot
6.1 Rekursiiviset palautukset

3. Laskennan vaativuusteoriaa

Kielenä ilmaisten Hilbertin kymmenes ongelma on D = { p p on polynomi, jolla on kokonaislukujuuri }

Epädeterministisen Turingin koneen N laskentaa syötteellä x on usein hyödyllistä ajatella laskentapuuna

Algoritmit 2. Luento 13 Ti Timo Männikkö

C C. x 2. x 3 x 3. Lause 3SAT p m VC Todistus. Olk. φ = C 1 C 2 C m 3-cnf-kaava, jossa esiintyvät muuttujat. φ toteutuva:

Lause (Cook-Levin) Kieli SAT = { on toteutuva lausekalkyylin kaava } on NP-täydellinen.

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

Turingin koneen laajennuksia

= k 0 NTIME(n k + k) Siis polynomisessa ajassa epädeterministisellä Turingin koneella tunnistettavien kielten joukko

Säännöllisen kielen tunnistavat Turingin koneet

10. Satunnaisalgoritmit

Algoritmit 2. Luento 13 Ti Timo Männikkö

δ : (Q {q acc, q rej }) (Γ k {, }) Q (Γ k {, }) {L, R}.

Algoritmit 1. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 14 To Timo Männikkö

Laskennan mallit (syksy 2009) Harjoitus 11, ratkaisuja

3. Laskennan vaativuusteoriaa

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

on rekursiivisesti numeroituva, mutta ei rekursiivinen.

9.5. Turingin kone. Turingin koneen ohjeet. Turingin kone on järjestetty seitsikko

Laskennan teoria (kevät 2006) Harjoitus 3, ratkaisuja

M = (Q, Σ, Γ, δ, q 0, q acc, q rej )

kaikki kielet tunnistettavat A TM HALT TM { a n } { a n b n } { a n b n c n } TOTAL TM EQ TM

Lisää pysähtymisaiheisia ongelmia

Algoritmit 2. Luento 1 Ti Timo Männikkö

3SAT-ongelman NP-täydellisyys [HMU ]

5.3 Ratkeavia ongelmia

Satunnaisalgoritmit. Antti Tanhuanpää. 25. maaliskuuta 2013

vaihtoehtoja TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 13. lokakuuta 2016 TIETOTEKNIIKAN LAITOS

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmin määritelmä [Sipser luku 3.3]

Algoritmit 1. Demot Timo Männikkö

Pysähtymisongelman ratkeavuus [Sipser luku 4.2]

1. Universaaleja laskennan malleja

Satunnaisalgoritmit. Topi Paavilainen. Laskennan teorian opintopiiri HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Täydentäviä muistiinpanoja laskennan rajoista

V. V. Vazirani: Approximation Algorithms, luvut 3-4 Matti Kääriäinen

(0 1) 010(0 1) Koska kieli on yksinkertainen, muodostetaan sen tunnistava epädeterministinen q 0 q 1 q 2 q3

Laskennan rajoja. TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 10. joulukuuta 2015 TIETOTEKNIIKAN LAITOS.

Algoritmit 1. Demot Timo Männikkö

Laskennan rajoja. TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 20. kesäkuuta 2013 TIETOTEKNIIKAN LAITOS.

1. Universaaleja laskennan malleja

1.4 Funktioiden kertaluokat

Algoritmit 1. Luento 1 Ti Timo Männikkö

Todistus: Aiemmin esitetyn mukaan jos A ja A ovat rekursiivisesti lueteltavia, niin A on rekursiivinen.

Laskennan vaativuus ja NP-täydelliset ongelmat

Laskennan rajoja. TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 6. maaliskuuta 2012 TIETOTEKNIIKAN LAITOS.

Muita vaativuusluokkia

Rekursiiviset palautukset [HMU 9.3.1]

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9

Algoritmit 1. Luento 13 Ti Timo Männikkö

4. Tehtävässä halutaan todistaa seuraava ongelma ratkeamattomaksi:

Nopea kertolasku, Karatsuban algoritmi

6. Approksimointialgoritmit

Laskennan rajoja. Sisällys. Meta. Palataan torstaihin. Ratkeavuus. Meta. Universaalikoneet. Palataan torstaihin. Ratkeavuus.

Muunnelmia Turingin koneista sekä muita vaihtoehtoisia malleja

Automaatit. Muodolliset kielet

Induktiotodistus: Tapaus n = 0 selvä; ol. väite pätee kun n < m.

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

Algoritmit 1. Luento 14 Ke Timo Männikkö

1 Lukujen jaollisuudesta

3. Turingin koneet. osaa esittää yksinkertaisia algoritmeja täsmällisesti käyttäen Turingin konetta ja sen muunnelmia

Algoritmit 2. Luento 11 Ti Timo Männikkö

6.5 Turingin koneiden pysähtymisongelma Lause 6.9 Kieli. H = {c M w M pysähtyy syötteellä w}

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

Yhteydettömän kieliopin jäsennysongelma

Graafit ja verkot. Joukko solmuja ja joukko järjestämättömiä solmupareja. eli haaroja. Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria

Algoritmi on periaatteellisella tasolla seuraava:

Täydentäviä muistiinpanoja Turingin koneiden vaihtoehdoista

Verkon värittämistä hajautetuilla algoritmeilla

TKT20005 Laskennan mallit (syksy 2018) Kurssikoe, malliratkaisut

2. Laskettavuusteoriaa

Algoritmit 2. Luento 12 Ke Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

Valitaan alkio x 1 A B ja merkitään A 1 = A { x 1 }. Perinnöllisyyden nojalla A 1 I.

Testaa taitosi 1: Lauseen totuusarvo

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Rajoittamattomat kieliopit (Unrestricted Grammars)

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 29. toukokuuta 2013

Johdatus verkkoteoriaan 4. luento

Laskennan mallit (syksy 2008) 2. kurssikoe , ratkaisuja

Diofantoksen yhtälön ratkaisut

P? = NP Kysymys ratkaisun keksimisestä ja sen tarkistamisesta

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011

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

LUKUTEORIA johdantoa

Tietorakenteet, laskuharjoitus 2,

4 Tehokkuus ja algoritmien suunnittelu

Äärellisten automaattien ja säännöllisten kielten ekvivalenssi

10. Painotetut graafit

Algoritmit 1. Luento 10 Ke Timo Männikkö

Laskennan mallit (syksy 2010) Harjoitus 4, ratkaisuja

58131 Tietorakenteet ja algoritmit (syksy 2015) Toinen välikoe, malliratkaisut

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

Algoritmit 2. Luento 12 To Timo Männikkö

Algoritmit 1. Luento 13 Ma Timo Männikkö

Luku 8. Aluekyselyt. 8.1 Summataulukko

811120P Diskreetit rakenteet

v 8 v 9 v 5 C v 3 v 4

Transkriptio:

212 7. Aikavaativuus Edellä tarkasteltiin ongelmien ratkeavuutta kiinnittämättä huomiota ongelman ratkaisun vaatimaan aikaan Nyt siirrytään tarkastelemaan ratkeavien ongelmien aikavaativuutta Periaatteessa ratkeava ongelma voi olla käytännössä ratkeamaton TSP (kauppamatkustajan ongelma) on löytää lyhin mahdollinen Hamiltonin kehä painotetusta verkosta Triviaalialgoritmi: n:n solmun verkossa kokeile kaikki n! reittiä ja valitse niistä lyhin 213 Koneessa, jossa yhden reitin tutkiminen kestää 0.001 s, vaatisi tämä algoritmi 22-solmuisella verkolla enemmän aikaa kuin maailmankaikkeuden tähänastinen ikä Biljoonakertainen koneen nopeus: vieläkään ei kyettäisi maailmankaikkeuden eliniän puitteissa ratkaisemaan TSP:tä 31-solmuiselle verkolle Kaikki reittivaihtoehdot tutkivaa eksponentiaalista algoritmia (n! O(n n )) ei näin ollen voi nimittää ratkaisualgoritmiksi TSP:lle Algoritmia, jonka ajankäyttöä rajoittaisi n:n polynomi ei tunneta; ei osata osoittaa, että sellainen menetelmä olisi mahdoton 1

214 Standardimallisen Turingin koneen M =(Q,,,, q 0,accept, reject) laskennan q 0 w M u q av, q {accept,reject } pituus on siihen sisältyvien siirtymäaskelten lukumäärä Aikavaativuus syötteellä w: time M laskennan q, 0 w M pituus, jos se pysähtyy jos laskenta ei pysähdy w : llä Koneen M aikavaativuus on siis funktio time M : * { } 215 Yleensä vaativuutta tarkastellaan syötteen pituuden n funktiona: keskimääräisessä tapauksessa kun n:n pituisia syötteitä saadaan todennäköisyysjakaumasta P n (w) time M avg (n) = w =n P n (w) time M (w) yleisemmin pahimmassa tapauksessa time M max (n) = max w =n time M (w) Yleensä myös merkitään yksinkert. time M : { }, time M (n) = time M max (n) Keskimääräisen tapauksen analysointi olisi mielenkiintoista, mutta yleensä se on niin hankalaa, että useimmiten tyydytään pahimman tapauksen tarkasteluun 2

216 Vaativuusfunktioiden kertaluokat Pahimpaan tapaukseen typistetyt vaativuusfunktiot ovat edelleenkin liian sotkuisia yksityiskohtaiseen käsittelyyn Tavallisesti tyydytään tarkastelemaan funktion kertaluokkaa Olkoot f, g: + mv. funktioita. f = O(g): f on (korkeintaan) kertaluokkaa g, jos c, n 0 : f(n) c g(n), n n 0 f = (g): f ja g ovat samaa kertaluokkaa, jos f = O(g) ja g = O(f) 217 f = o(g): f on alempaa kertaluokkaa kuin g, jos c > 0: n c : f(n) < c g(n), n n c f = (g): g on alaraja f:lle, jos c > 0: äärettömän monella n : f=o(g) f=o(g) g O(f) f(n) c g(n) f (g) f = o(g) Usein puhutaan hieman epätäsmällisemmin sanoen ''funktio n! on kertaluokkaa O(n n )'' tai ''2n 2 on kertaluokkaa n 2 '' 3

218 Lemma 7.1 1. log a n = (log b n) a, b > 0, 2. n a =o(n b ), jos a < b, 3. 2 an = o(2 bn ), jos a < b, 4. log a n = o(n b ) a, b > 0, 5. n a =o(2 bn ) a, b > 0, 6. c f(n) = (f(n)) c > 0 ja funktioilla f, 7. f(n) + g(n) = (max { f(n), g(n) }) kaikilla funktioilla f ja g sekä 8. jos p(n) on aidosti astetta r oleva polynomi, niin p(n) = (n r ) 219 Lemma 7.2 Olkoot f, g: + mv. funktioita. Jos raja-arvo L =lim n f(n)/g(n) on olemassa ja 1. 0 < L < f = (g) 2. L= 0 f = o(g) 3. L> g = o(f) 4. L< f = O(g) 5. L> 0 f = (g) 4

220 Tarkastellaan kielen A = { 0 k 1 k k 0 } tunnistamista Paljonko aikaa yksinauhainen Turingin kone vaatii A:n tunnistamiseksi? Syötteellä w 1. Käy w läpi, hylkää syöte, jos merkki 0 löytyy merkin 1 oikealta puolelta 2. Toista niin kauan kuin molempia merkkejä on nauhalla Käy läpi nauhaa merkiten käsitellyksi yksi 0 ja yksi 1 3. Jos kaikki nollat (ykköset) on merkitty ja ykkösiä (nollia) on vielä jäljellä, hylkää syöte. Muuten (kaikki nollat ja ykköset on merkitty) hyväksy syöte 221 A:n tunnistajakoneen ensimmäinen vaihe vaatii n askelta syötteellä w, w = n Toiset n askelta kuluu, kun lukupää palautetaan nauhan alkuun Ensimmäinen vaihe siis vaati O(n) askelta Vaiheessa 2 0/1-parin merkitseminen vaatii O(n) askelta ja korkeintaan n/2 tällaista pyyhkäisyä vaaditaan Kaikkiaan siis vaihe 2 vaatii O(n 2 ) askelta Kolmas vaihe on taas lineaarisen askelten lukumäärän vaativa Kaikkiaan koneen toiminta siis vaatii O(n) + O(n 2 ) + O(n) = O(n 2 ) ajan 5

222 Kielen A tunnistaminen ei kuitenkaan ole (n 2 ) toiminto, vaan seuraava Turingin kone vaatii vain O(nlog n) ajan Syötteellä w 1. Hylkää syöte, jos merkki 0 löytyy merkin 1 oikealta puolelta 2. Toista niin kauan kuin molempia merkkejä on nauhalla a) Jos merkkejä on yhteensä pariton määrä, niin hylkää syöte b) Poista joka toinen 0 alkaen ensimmäisestä 0:sta. Toimi samoin merkkien 1 kanssa 3. Jos kaikki merkit 0 ja 1 on poistettu, hyväksy syöte, muuten hylkää se 223 Eo. Turingin kone puolittaa joka kierroksella käsittelemättömien nollien määrän (poistaen jakojäännöksen) Kunkin kierroksen pituus on O(n) ja kierroksia on korkeintaan 1 + log n Kaikkiaan aikaa kuluu siis O(n log n) Koneen oikeellisuus: jos alunperin esim. 7 nollaa ja 6 ykköstä, niin hylätään parittomuustestillä heti Jos 7 nollaa ja 5 ykköstä, niin määrien ensimmäisen puolituksen jälkeen on jäljellä 3 nollaa ja 2 ykköstä ja parittomuustesti ottaa kiinni 7 nollaa ja 3 ykköstä, vaatii kaksi puolituskierrosta ennen kuin parittomuustesti ottaa kiinni 6

224 Yksinauhainen Turingin kone ei voi tunnistaa kieltä A asymptoottista aikaa O(n log n) tehokkaammin Sen sijaan kaksinauhaisella koneella tunnistaminen sujuu lineaarisessa ajassa Syötteellä w 1. Hylkää syöte, jos merkki 0 löytyy merkin 1 oikealta puolelta 2. Kopioi kaikki merkit 0 nauhalle 2 3. Käy läpi merkit 1, kunkin kohdalla merkiten yksi 0 nauhalta 2 käsitellyksi. Jos nollat loppuvat ennen ykkösiä, hylkää w 4. Jos kaikki nollat on merkitty hyväksy w, jos nollia on vielä jäljellä, hylkää w 225 Laskennan universaalit mallit eivät siis ole yhtä tehokkaita Vaativuusteoriassa on merkitystä sillä mitä laskennan mallia käytetään Determinististen laskennan mallien tehokkuuserot eivät kuitenkaan ole dramaattisia Olkoon t: + mv. funktio Kieli A voidaan tunnistaa ajassa t, jos on olemassa deterministinen Turingin kone M s.e. L(M) = A ja time M (n) t(n) kaikilla n Formaalien kielten aikavaativuusluokka DTIME(t) = { A A voidaan tunnistaa ajassa t } 7

226 Yksinauhaisella koneella voidaan simuloida moninauhaista konetta (lause 3.13) Yhden k-nauhaisen koneen askelen simulointi vaatii O(t(n)) ajan, missä t(n) n on moninauhaisen koneen vaativuusfunktio Askelia on kaikkiaan O(t(n)), joten Lause 7.8 Jokaisella ajassa t(n) toimivalla moninauhaisella Turingin koneella on olemassa ekvivalentti yksinauhainen kone, joka vaatii O(t 2 (n)) ajan. Epädeterministisen Turingin koneen N laskennan vaativuus: time N (w) on pisimmän laskennan (q 0 w N ) pituus 227 Epädeterministisen koneen laskentoja syötteellä w on usein hyödyllistä ajatella laskentapuuna. Puun lehdissä laskenta pysähtyy. Kone hyväksyy w:n, jos jokin lehti vastaa hyväksyvää lopputilaa. Pahimman tapauksen aikavaativuus: time N (n) = max w =n time N (w) Kieli A voidaan tunnistaa epädeterministisesti ajassa t, jos on olemassa epädeterministinen Turingin kone N s.e. L(N) = A ja time N (n) t(n) n Epädeterministiset vaativuusluokat: NTIME(t) = { A A voidaan tunnistaa epädeterm. ajassa t } 8

228 Lause 7.11 Jokaisella ajassa t(n) toimivalla yksinauhaisella epädeterministisellä Turingin koneella on olemassa ekvivalentti yksinauhainen deterministinen kone, joka vaatii 2 O(t(n)) ajan. Todistus. Lauseen 3.16 deterministinen Turingin kone M käy systemaattisesti läpi epädeterministisen koneen N laskentapuuta. Olkoon N:n toiminta-aika t(n), jolloin laskentapuun jokaisen haaran pituus n:n pituisella syötteellä on korkeintaan t(n). Solmujen haarautumisaste määräytyy N:n siirtymäfunktion tarjoamien siirtymävaihtoehtojen lukumäärän mukaan. Olkoon b 2yläraja tälle. Puun lehtien lukumäärä on korkeintaan b t(n). 229 Puun läpikäyminen vaatii pahimmassa tapauksessa kaikkien sen solmujen käsittelyä. Solmuja on kaikkiaan alle kaksi kertaa lehtien maksimimäärä, eli luokkaa O(b t(n) ). Joten kolminauhaisen koneen M asymptoottisesti vaatima aika on 2 O(t(n)). Lauseen 7.8 perusteella yksinauhainen deterministinen kone voidaan toteuttaa (2 O(t(n)) ) 2 = 2 O(2t(n)) = 2 O(t(n)) ajassa. Yksi- ja moninauhaisten koneiden tehokkuusero on siis korkeintaan t:n neliö, siis polynominen t:n suhteen Determinististen ja epädeterminististen koneiden tehokkuusero puolestaan on eksponentiaalinen t:n suhteen 9

230 7.1 Luokka P Tässä yhteydessä ajatellaan polynomisen tehokkuuseron olevan pieni ja eksponentiaalisen suuri Vaativuusfunktioissa polynomisen ajan ajatellaan olevan käyttökelpoisen, kun taas eksponentiaalinen useimmiten on käyttökelvoton Tyypillisimmin eksponentiaaliseen vaativuuteen törmätään kattavaa hakua tehtäessä Kaikissa kohtuullisissa laskennan malleissa voidaan ratkoa samat ongelmat polynomisessa ajassa Mallit ovat tässä mielessä ekvivalentteja 231 Luokka P on: P = { DTIME(t) t on polynomi } = k 0 DTIME(n k + k) Luokka P on keskeinen, koska se on laskennan mallista riippumaton (Turingin koneen kanssa polynomisesti ekvivalenttien mallien suhteen) ja se jotakuinkin vastaa tietokoneella realistisesti ratkaistavissa olevien ongelmien joukkoa Korkea-asteiset polynomiset algoritmit eivät tietenkään ole kovin käyttökelpoisia, mutta niitä esiintyy vain harvoin Luokan P asema on luokan REC asemaa laskettavuusteoriassa vastaava 10

232 Ratkeavia ongelmia Olkoon G suunnattu verkko, jossa on solmut s ja t Ongelma PATH: Onko G:ssä suunnattu polku s:stä t:hen? Kattava haku kävisi kaikki G:n polut läpi tutkien onko jokin niistä etsitty polku Pahimmassa tapauksessa polkuja on kuitenkin eksponentiaalinen lukumäärä (verkon solmujen suhteen) Tarvitaan siis hienovaraisempi algoritmi Asetetaan merkki solmuun s Niin kauan kuin merkittyjen solmujen joukko kasvaa: tutki kaikki verkon kaaret, jos kaari (a, b) kulkee merkitystä solmusta a merkitsemättömään b, lisää b merkittyjen joukkoon 233 Jos t kuuluu merkittyjen solmujen joukkoon hyväksy syöte, muuten hylkää se Olkoon m verkon G solmujen lukumäärä Edellinen algoritmin toista askelta toistetaan korkeintaan m kertaa, koska vain niin kauan voidaan lisätä uusia alkioita merkittyjen joukkoon Kaikkiaan siis m + 2 helposti polynomisessa ajassa toteutettavaa askelta PATH P 11

234 Kaksi kokonaislukua ovat keskenään alkulukuja (relative primes), jos niillä ei ole lukua 1 suurempia kokonaislukutekijöitä Esim. 10 ja 21 ovat keskenään alkulukuja, vaikka kumpikaan ei ole alkuluku Sen sijaan 9 ja 21 ovat molemmat 3:lla jaollisia Tarkastellaan kokonaislukuparien, jotka ovat keskenään alkulukuja, tunnistamisongelmaa RP Jälleen suoraviivaisin haku osoittautuu tehottomaksi Kaikkien mahdollisten jakajien läpikäyminen on eksponentiaalisen ajan vaativaa, koska mahdollisia jakajia on annettujen lukujen binääriesityksen pituuteen nähden eksponentiaalinen määrä 235 Ikivanha Eukleideen algoritmi lukuparin suurimman yhteisen tekijän (syt) määräämiseksi antaa mahdollisuuden ratkaista RP tehokkaasti Esim.syt(18, 24) = 6 Luonnollisesti x ja y ovat keskenään alkulukuja josssyt(x, y) = 1 Olkoot x ja y luonnollisia lukuja binääriesityksenä 1. Toista kunnes y = 0 a)x xmod y b) vaihda x ja y keskenään 2. Palauta x 12

236 Esim. x = 18, y = 24 x 18 mod 24 = 18 x 24, y 18 x 24 mod 18 = 6 x 18, y 6 x 18 mod 6 = 0 x 6, y 0 Palauta x = 6 237 Kun askel 1 on suoritettu ensimmäisen kerran pätee varmasti x > y Sen jälkeen jokainen askelen 1(a) suoritus vähintään puolittaa x:n arvon x 2y xmod y < y x/2 x < 2y x mod y = x - y < x/2 Joka toinen askelen 1 suoritus puolittaa toisen alkuperäisistä arvoista x ja y, joten pahimmassa tapauksessa kierroksia on min{ 2log 2 x, 2log 2 y } Lukujen binääriesitykset ovat logaritmisia pituudeltaan, joten Eukleideen algoritmi vaatii lineaarisen ajan 13