6.1 Rekursiiviset palautukset Olk. = (Q, Σ, Γ, δ, q 0, q acc, q rej ) mv. standardimallinen Turingin kone ääritellään koneen laskema osittaisfunktio f : Σ Γ seur. u, jos q 0 w u q av, f (w) = q { q acc, q rej }, av Γ määrittelemätön, muuten Kone siis kuvaa merkkijonon w Σ koneen nauhapään vasemmalla puolella sijaitsevalle merkkijonolle u, jos laskenta pysähtyy syötteellä w Jos laskenta ei pysähdy, funktion arvoa pisteessä w ei ole määritelty Tällöin A:n tapaus w voidaan muuttaa rekursiivisesti B:n tapaukseksi f(w) ja Σ onko w:llä ominaisuus A? onko f(w):llä ominaisuus B? A f f Γ B 190 192 Osittaisftio f : Σ A on osittaisrekursiivinen, jos : f = f, A Γ Osittaisrekursiiviftio f on rekursiivinen, jos se voidaan laskea totaalisella Turingin koneella. Ts. jos sen arvo f(w) on määritelty kaikilla w Formalisoidaan ajatus, että ongelma A on enintään yhtä vaikea kuin ongelma B seuraavasti Olk. A Σ, B Γ formaaleja kieliä A voidaan palauttaa rekursiivisesti B:hen, merk. A m B, jos on olemassa rekursiivinen funktio f : Σ Γ s.e. w A f(w) B 191 w Σ Lemma 5.22 Kaikilla kielillä A, B, C pätee (i) A m A, (refleksiivisyys) (ii) jos A m B ja B m C, niin A m C, (transitiivisuus) (iii) jos A m B ja B on RE-kieli, niin A on RE-kieli ja (iv) jos A m B ja B on rekursiivinen, niin A on rekursiivinen Todistus. (i) Valitaan palautusftioksi f(x) = x. (ii) Olk. f palautusftio A:sta B:hen ja g B:stä C:hen. erk. f : A m B, g : B m C. Osoitetaan, että yhdistetty ftio h, h(x) = g(f(x)) on palautus h : A m C. 193
1) h on rekursiivinen: Olk. f ja g f:n ja g:n laskevat totaaliset Turingin koneet. REW korvaa kaikki nauhapään oikealla puolella olevat merkit :lla ja vie nauhapään nauhan alkuun. Seur. kuvan totaalinen kone laskee ftion h. 2) h on palautus: x A f(x) B joten h : A m C. g(f(x)) = h(x) C, (iii) (iv) Olk. f : A m B, B kielen B tunnistajakone ja f ftion f laskeva kone. Seur. kuvan kone tunnistaa kielen A ja on totaalinen jos B on. 194 Aiemmin jo käytimme lauseen 5.22 seurausta ratkemattomuuden todistamiseen Seuraus 5.23 Jos A m B ja A on ratkeamaton, niin myös B on ratkeamaton. Kieli A { 0, 1 } on RE-täydellinen, jos 1. A RE ja 2. B m A kaikilla B RE Lause Kieli U on RE-täydellinen Todistus. Tiedämme, että U RE. Olk. B mv. RE-kieli. Olk. edelleen B = L( B ). Nyt B voidaan palauttaa U:hun ftiolla f(x) = c B x. Funktio on selvästi rekursiivinen, ja sille pätee x B = L( B ) f(x) = c B x U. 196 x Lause 6.1 Olk. A RE-täydellinen kieli, B RE ja A m B. Tällöin myös B on RE-täydellinen. x f f Kaikki luonnolliset luokan RE \ REC kielet ovat RE-täydellisiä, mutta kuitenkin siinä on muitakin kieliä 195 Kielen A tunnistava Turingin kone REW B f(x) Yhdistetyn kuvauksen laskeva Turingin kone REW g f(x)v f(x)_ g(f(x))v Luokka RE ei ole suljettu komplementoinnin suhteen, joten sillä on duaaliluokka co-re = { A A RE } RE co-re = REC (Lause 5.3) A { 0, 1 } on co-re-täydellinen, jos A co-re ja B m A kaikilla B co-re Kieli A on co-re-täydellinen, jos ja vain jos kieli A on RE-täydellinen Kieli TOT = { c c pysähtyy kaikilla syötteillä } h(x) ei kuulu luokkaan RE, eikä co-re 197
198 REC RE co RE NE U NE U TOT RE täyd. co RE täyd. 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ä Biljoonakertanen 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 200 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 Algoritmi: n:n solmun verkossa kokeile kaikki n! reittiä ja valitse niistä lyhin Standardimallisen Turingin koneen = (Q, Σ, Γ, δ, q 0, q acc, q rej ) laskennan q 0 w u q av, q { q acc, q rej } pituus on siihen sisältyvien siirtymäaskelten lkm. Aikavaativuus syötteellä w: laskennan q 0 w... pituus, time = jos se pysähtyy, jos laskenta ei pysähdy w:llä Koneen aikavaativuus on siis ftio time : Σ N { } Yleensä vaativuutta tarkastellaan syötteen pituuden n ftiona: 199 201
keskimääräisessä tapauksessa kun n:n pituisia syötteitä saadaan todennäköisyysjakaumasta P n (w) time avg (n) = P n (w) time (w) w =n yleisemmin pahimmassa tapauks. time max (n) = max time (w) w =n Yleensä myös merkitään yksinkert. time : N N { }, time (n) = time max (n) Keskimääräisen tapauksen analysointi olisi mielenkiintoista, mutta yleensä se on niin hankalaa, että useinmiten tyydytään pahimman tapauksen tarkasteluun f = o(g): f on alempaa kertaluokkaa kuin g, jos c > 0 : n c N : f(n) < c g(n), n n c f = Ω(g): g on alaraja f:lle, jos c > 0 : äärettömän monella n N : f(n) c g(n) f = o(g) f = O(g) g O(f) 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 202 204 Vaativuusfunktioiden kertaluokat Pahimpaaan tapaukseen typistetyt vaativuusftiot ovat edelleenkin liian sotkuisia yksityiskohtaiseen käsittelyyn Tavallisesti tyydytään tarkastelemaan ftion kertaluokkaa Olk. f, g : N R + mv. ftioita. f = O(g): f on (korkeintaan) kertaluokkaa g, jos c, n 0 N : 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. cf(n) = Θ(f(n)) c > 0 ja funktioilla f, 7. f(n) + g(n) = Θ(max { f(n), g(n) }) kaikilla funktioilla f ja g sekä f(n) c g(n), n n 0 f = Θ(g): f ja g ovat samaa kertaluokkaa, jos f = O(g) ja g = O(f) 8. jos p(n) on aidosti astetta r oleva polynomi, niin p(n) = Θ(n r ) 203 205
Lemma 7.2 Olk. f, g : N R + mv. ftioita. Jos raja-arvo on olemassa ja f(n) L = lim n g(n) 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) 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 206 208 Tarkast. 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. uuten (kaikki nollat ja ykköset on merkitty) hyväksy syöte Kielen A tunnistaminen ei kuitenkaan ole Ω(n 2 ) toiminto, vaan seuraava Turingin kone vaatii vain O(n log 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 207 209
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 kork. 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 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 Olk. t: N R + mv. funktio Kieli A voidaan tunnistaa ajassa t, jos on olemassa deterministinen Turingin kone s.e. L() = A ja time (n) t(n) kaikilla n Formaalien kielten aikavaativuusluokka DTIE(t) = { A A voidaan tunnistaa ajassa t } 210 212 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 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 toimivalla moninauhaisella Turingin koneella on olemassa ekvivalentti yksinauhainen kone, joka vaatii O(t 2 ) ajan. Epädeterministisen Turingin koneen N laskennan vaativuus: time N (w) on pisimmän laskennan q 0 w N... pituus 211 213
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ädeterm. Turingin kone N s.e. L(N) = A ja time N (n) t(n) n Epädeterministiset vaativuusluokat: NTIE(t) = { A A voidaan tunnistaa epädeterm. ajassa t } 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 asymptoottisesti vaatima aika on O(2 t ). Lauseen 7.8 perusteella yksinauhainen deterministinen kone voidaan toteuttaa O(2 t ) 2 = O(2 2t ) = O(2 t ) 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 214 216 Lause 7.11 Jokaisella ajassa t toimivalla yksinauhaisella epädeterministisellä Turingin koneella on olemassa ekvivalentti yksinauhainen deterministinen kone, joka vaatii O(2 t ) ajan. Todistus. Lauseen 3.16 deterministinen Turingin kone 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 lkm:n mukaan. Olkoon b 2 yläraja tälle. Puun lehtien lkm. on korkeintaan b t(n). 215