3. Laskennan vaativuusteoriaa Siirrymme tarkastelemaan, mitä laskennallisia ongelmia voidaan ratkaista tehokkaalla algoritmilla [HMU luku 10]. Tämän luvun jälkeen opiskelija tuntee laskennallisen vaativuuden peruskäsitteet ja osaa soveltaa niitä tuttuihin algoritmeihin tuntee NP-täydellisyyden teknisen määritelmän ja käytännön merkityksen tunnistaa tyypilliset NP-täydelliset ongelmat osaa laatia yksinkertaisia NP-täydellisyystodistuksia 164
Tähän asti on puhuttu siitä, mitä on mahdollista laskea äärellisessä ajassa. Nyt siirrymme tarkastelemaan laskemista kohtuullisessa ajassa. Määrittelemme pian peruskäsitteet täsmällisesti. Sovellettaessa teoreettisia tuloksia käytännön tilanteisiin on syytä miettiä tarkasti, onko tämä teoreettinen määritelmä hyvä formalisointi sille, mitä sovelluksessa oikeasti voidaan pitää kohtuullisena. Kaikki tässä luvussa käsiteltävät ongelmat (kuten kursseilla Tietorakenteet jne. kohdatutkin) ovat selvästi ratkeavia. Ne ovat siis laskettavuuden teorian kannalta ekvivalentteja (ja helppoja ). Laskennan vaativuusteoriassa pyrimme tavallaan löytämään luokan REC ( helpot ongelmat) sisällä hienorakennetta : jotkin ratkeavat ongelmat ovat kuitenkin jossain mielessä helpompia, jotkin vaikeampia. Laskennan vaativuusteoria on tutkimuksen kannalta jossain mielessä vaikeampaa kuin laskettavuuden teoria: monet perustavanlaatuiset kysymykset ovat vielä avoinna. 165
Keskeinen kysymyksenasettelu Laskennan vaativuusteorian peruskysymykset ovat intuitiivisesti seuraavan tyyppisiä (ajan sijaan voidaan puhua muistista tms.): Annettu laskennallinen ongelma A ja aikaraja T. Voiko ongelman A ratkaista ajassa T (tai alle)? (yläraja aikavaativuudelle) Annettu laskennallinen ongelma A ja aikaraja T. Viekö ongelman A ratkaiseminen välttämättä vähintään ajan T? (alaraja aikavaativuudelle) Ylärajoja todistetaan tyypillisesti laatimalla tehokas algoritmi ja analysoimalla sen aikavaativuus. Tietojenkäsittelytieteilijät ovat hyviä tässä. Alarajojen todistaminen on vaikeaa. Tyypillisesti se onnistuu vain jos ongelma A on sopiva keinotekoinen ongelma (esim. diagonalisoimalla saatu) tai tehdään lisärajoituksia sille, millaiset algoritmit ovat sallittuja (esim. O(n log n)-alaraja järjestämiselle). Ideaalitapauksessa ylä- ja alaraja yhtyvät, jolloin on löydetty optimaalinen algoritmi. 166
Deterministinen aikavaativuus Sovellamme Tietorakenteista yms. tuttua algoritmin aikavaativuuskäsitettä Turingin koneisiin [HMU 10.1.1, 10.1.2]. Olkoon M deterministinen (mutta mahdollisesti moninauhainen) Turingin kone. Jos syötteellä x Σ kone M tekee tasan k laskenta-askelta ja pysähtyy, merkitsemme steps M (x) = k. Jos laskenta ei pysähdy, niin steps M (x) =. Koneen M aikavaativuus on funktio time M : N N { }, jolla time M (n) = max { steps M (x) x = n }. Siis koneen aikavaativuus on T, jos millään pituutta n olevalla syötteellä kone kone ei laske yli T (n) askelta, ja T on pienin mahdollinen jolle tämä pätee. Koneen M aikavaativuus on polynominen, jos jollakin polynomilla p pätee time M (n) p(n) kaikilla n. 167
Huomioita aikavaativuuden määritelmästä Aikavaativuuden polynomisuus voitaisiin yhtäpitävästi ilmaista vaatimalla, että jollakin k N pätee tai että jollakin l pätee time M (n) n k + k time M (n) = O(n l ). kaikilla n Yleensä ei tarkastellakaan tarkkaa aikavaativuutta time M, vaan jotain ylärajaa T jolla time M (n) = O(T (n)). [O-notaatio: ks. Tietorakenteet] Käytämme tässä pahimman tapauksen aikavaativuutta eli kullakin n tarkastelemme vaikeinta syötettä, jonka pituus on n. On mahdollista tarkastella myös keskimääräisen tapauksen aikavaativuutta, mutta tämä on teknisesti vaikeaa ja edellyttää usein epärealistisia oletuksia syötteen jakaumasta. Voimme vastaavasti määritellä koneen M tilavaativuuden space M (n), joka on suurin koneen käyttämä nauhapaikkojen lukumäärä kun syötteen pituus on n. 168
Tärkeitä deterministisiä vaativuusluokkia Ryhmittelemme päätösongelmia niiden vaatimien laskentaresurssien mukaan. Päätösongelma A kuuluu luokkaan P, jos se voidaan tunnistaa polynomisessa ajassa, eli A = L(M) jollain deterministisellä M jonka aikavaativuus on polynominen. Formaalisti P = { L(M) M deterministinen, time M (n) = O(n k ) jollain k }. Päätösongelma A kuuluu luokkaan E, jos A = L(M) jollain M jonka aikavaativuus on korkeintaan eksponenttifunktio. Formaalisti E = { L(M) M deterministinen, time M (n) = O(2 nk ) jollain k }. Päätösongelma A kuuluu luokkaan PSPACE, jos se voidaan tunnistaa polynomisessa tilassa, eli A = L(M) jollain M jonka tilavaativuus on polynominen. Formaalisti PSPACE = { L(M) M deterministinen, space M (n) = O(n k ) jollain k }. 169
Huomautuksia vaativuusluokista Kaikki vaativuusluokat ovat triviaalisti rekursiivisten kielten luokan REC aitoja osajoukkoja. Selvästi P E. On mahdollista osoittaa, että P E, mutta tämä ei ole mitenkään ilmeistä. On melko helppo osoittaa, että P PSPACE ja PSPACE E. Ei tiedetä, päteekö P = PSPACE tai PSPACE = E. (Arvellaan, että kumpikaan ei päde.) Kun sanotaan, että ongelman aikavaativuus on eksponentiaalinen, tarkoitetaan yleensä, että aikavaativuus on vähintään 2 cn jollain c > 0, eikä kuulumista luokkaan E. Määrittelemme jatkossa myös epädeterministisiin Turingin koneisiin perustuvat vaativuusluokat NP jne. jotka ovat myös tärkeitä. Kirjallisuudesta löytyy runsaasti muitakin vaativuusluokkia ( structural complexity theory ). 170
Tila- ja aikavaativuus eri laskennan malleissa Jos A = L(M) moninauhaisella Turingin koneella M, niin A = L(N) missä N on yksinauhainen, time N (n) = O(time M (n) 2 ) ja space N (n) = O(space M (n)) (s. 37-38). Jos kieli voidaan tunnistaa RAM-mallissa (tai jossain muussa nykyaikaisen tietokoneen abstraktissa mallissa) ajassa t ja tilassa s, niin se voidaan tunnistaa Turingin koneella ajassa O(t(n) 2 ) ja tilassa O(s(n)). Yleisemmin aiemmin esitetyissä universaaleissa laskennan malleissa aika- ja tilavaativuudet (kun ne määritellään järkevästi) ovat polynomisesssa suhteessa: ts. jos jokin ongelma ratkeaa jossain mallissa ajassa t(n) niin missä tahansa toisessa mallissa se ratkeaa ajassa O(t(n) k ) jollain vakiolla k (joka riippuu käytetyistä malleista, mutta ei ongelmasta). Johtopäätös: luokat P, E ja PSPACE eivät ole kovin herkkiä sille, mitä laskennan mallia käytetään. 171
Usein ajatellaan, että polynomisessa ajassa ratkeavat ongelmat ovat käytännössä ratkeavia. Mahdollista kritiikkiä: Jos vaativuus on esim. luokkaa n 100 niin ongelma ei varmaan ole käytännössä ratkeava. Kommentti: harvoja poikkeuksia lukuunottamatta ei tunneta käytännön esimerkkejä joissa aikavaativuus olisi polynominen mutta korkeaa astetta Käytännössä syötteen koolla on jokin äärellinen yläraja, joten ei-polynomisuus ei ole ongelma Kommentti: näin voi olla jos yläraja on riittävän pieni; tyypilliset ei-polynomiset aikavaativuusfunktiot kuitenkin kasvat nopeasti jo melko pienillä n. Pahin tapaus ei kerro koko totuutta. Kommentti: voi hyvin pitää paikkansa, mutta esim. keskimääräisen tapauksen analyysi vaikeaa ja usein edellyttää kyseenalaisia oletuksia. Johtopäätös: yleensä polynomisuus = tehokkuus mutta mallin rajoituksia pitää harkita tapauskohtaisesti 172
Esimerkkejä polynomisista ja ei-polynomisista ongelmista Ennen yleisempiä teoriatarkasteluja katsotaan joitain tyypillisiä esimerkkejä ongelmista ja niiden vaativuudesta kaikki nämä ongelmat ratkeavia (nähdään helposti) pääkysymys: mitkä niistä ratkeavat polynomisessa ajassa osoittautuu, että tämä on yllättävän vaikea kysymys Kuten ratkeavuustarkasteluissa, meidän pitää tehdä joitain teknisiä esitysmuoto-oletuksia. luokat P, PSPACE ja E määritelty luokkina formaaleja kieliä ts. formaalisti ongelmien syötteet ovat merkkijonoja käytännön ongelmissa syötteet ovat verkkoja, loogisia kaavoja, joukkoja jne. täytyy sopia syötteiden esittämisestä merkkijonoina 173
Esimerkki: suunnattu verkko Kurssilla Tietorakenteet opittuun tapaan suunnattu verkko G = (V, E) voidaan esittää esim. vierusmatriisina tai vieruslistana. a b V = { a, b, c } E = { (a, b), (a, c), (c, a) } c Vierusmatriisi A 1 2 3 1 0 1 1 2 0 0 0 3 1 0 0 a = v 1, b = v 2, c = v 3 A(i, j) = 1 joss (v i, v j ) E Vieruslista ((2, 3), (), (1)) Alilista i sisätää ne j joilla (v i, v j ) E Vierusmatriisi tai vieruslista voidaan esittää merkkijonona sillä tavalla kuin tällaisia rakenteita koodataan esim. ASCII-jonoiksi normaalisssa ohjelmoinnissa. 174
Kun sanomme että jokin esim. verkkoja koskeva päätösongelma ratkeaa polynomisessa ajassa, tarkoitamme että vastaava merkkijonoesityksistä koostuva formaali kieli kuuluu luokkaan P. Jatkossa ei kiinnitetä huomiota esitystavan yksityiskohtiin, vaan oletetaan se tehdyksi jollain järkevällä tavalla. Lopputulos on, että muodollinen määritelmä on sama kuin esim. kurssilta Tietorakenteet tuttu polynominen aikavaativuus Pitää kuitenkin muistaa, että aikavaativuus määritellään syötteen pituuden suhteen. Siis järkevä pitää sisällään sen, että syötteen koko ei kasva liikaa Huom. tärkeä erikoistapaus: luonnollisen luvun n koodin pituus on O(log n) (esim. binääriesitys log 2 n + 1 bittiä) 175
Esimerkkejä verkko-ongelmista vierusmatriisiesityksen koko on O(n 2 ), vieruslistaesityksen koko O(n + m) = O(n 2 ) missä n = V ja m = E (huom. m = O(n 2 )) verkon tapauksessa oletetaan, että syötteen pituus on polynominen verkon solmujen lukumäärän n suhteen siis ongelmaa vastaavan formaalin kielen kuuluminen luokkaan P tarkoittaa samaa kuin että ongelma ratkeaa solmujen lukumäärän n suhteen polynomisessa ajassa Kurssilla Tietorakenteet opitun perustella esim. seuraavat ongelmat ratkeavat polynomisessa ajassa: onko suunnatussa (tai suuntaamattomassa) verkossa G polku solmusta u solmuun v (syvyyssuuntainen etsintä O(n + m)) onko painotetussa verkossa G solmusta u solmuun v polku, jonka kustannus on korkeintaan c (Dijkstran algoritmi O(n log n + m)) Huom. nämä on tässä muotoiltu päätösongelmina; palaamme pian kysymykseen etsintä- ja optimointiongelmista 176
Eulerin kehä (Euler tour) Verkko Eräs Eulerin kehä Eulerin kehä on polku, joka käyttää verkon jokaista kaarta tasan kerran ja palaa lähtöpisteeseensä Kysymys Onko annetussa suuntaamattomassa verkossa Eulerin kehä? ratkeaa polynomisessa ajassa Ratkaisu perustuu havaintoon, että Eulerin kehä on olemassa, jos ja vain jos verkko on yhtenäinen ja jokaisen solmun aste on parillinen (Euler 1736). 177
Hamiltonin kehä (Hamiltonian Circuit, HC) Verkko Eräs Hamiltonin kehä Hamiltonin kehä on polku, joka käy jokaisessa solmussa tasan kerran ja palaa lähtöpisteeseensä. Ongelmalle Onko annetussa suuntaamattomassa verkossa Hamiltonin kehä? ei tunneta polynomisessa ajassa toimivaa algoritmia. Pidetään luultavana, ettei tällaista algoritmia ole olemassa, eli että HC P. 178
Hamiltonin kehä -ongelmalle on seuraava (erittäin) naiivi ratkaisualgoritmi: Olkoon G = (V, E) missä V = { v 1,..., v n }. Toista kaikilla jonon (v 1, v 2, v 3,..., v n ) permutaatioilla (u 1, u 2, u 3,..., u n ): Jos (u j, u j+1 ) E kun j = 1,..., n 1 ja (u n, u 1 ) E niin palauta kyllä Palauta ei. Algoritmi toimii selvästi polynomisessa tilassa; siis HC PSPACE Tarkistettavia permutaatioita on n! kappaletta, yhden tarkistus sujuu selvästi polynomisessa ajassa. Koska (n/2) n/2 n! n n, niin HC E, mutta tämän algoritmin aikavaativuus ei ole polynominen. Itse asiassa HC on NP-täydellinen ongelma, mistä lisää pian. 179
Päätösongelmaan HC liittyy myös ilmeinen etsintäongelma: Syöte: suuntaamaton verkko G = (V, E) Tuloste: jokin verkon G Hamiltonin kehä H E jos olemassa; ei ole muuten Oletetaan nyt, että funktio DecideHC(G) ratkaisee päätösongelman HC, ts. palauttaa tosi joss verkossa G on Hamiltonin kehä. Tällöin seuraava algoritmi FindHC ratkaisee yo. etsintäongelman: FindHC(V, E): /* Olkoon E = { e 1,..., e m }. */ H := E; for i := 1 to m do if DecideHC(V, H { e i }) then H := H { e i }; return polku joka koostuu joukon H kaarista; Erityisesti jos olisi HC P, niin myös etsintäongelma ratkeaisi polynomisessa ajassa. Toisaalta jos HC P kuten luullaan, niin etsintäongelma ei tietenkään ratkea polynomisessa ajassa. 180
Alkulukutestaus Luonnollinen luku n 2 on alkuluku jos luvun n ainoat tekijät ovat 1 ja n. Määritellään päätösongelma PRIMES = { n N n alkuluku }. Ongelmalle PRIMES on äskettäin löydetty polynomisessa ajassa toimiva ratkaisualgoritmi ( PRIMES is in P, M. Agrawal, N. Kayal ja N. Saxena, 2002). Aikavaativuuspolynomi on korkeaa astetta, käytännössä aiemmat satunnaisuuteen perustuvat algoritmit saattavat olla parempia. Huom. Ongelma on testata luku n sen pituuden O(log n) suhteen polynomisessa ajassa. Itse luvun n suhteen polynominen aika saavutetaan triviaalisti. Tämä ei kuitenkaan auta jos n on esim. 1000-bittinen, siis n 2 1000 10 301. Tässä tapauksessa etsintäongelma näyttäisi olevan vaikeampi kuin päätösongelma. Edelleenkään ei osata tehokkaasti jakaa lukua alkutekijöihin. Tehokas algoritmi tekijöihin jaolle murtaisi monet salausmenetelmät. 181
Yleistettyjä lautapelejä Yleistetty tammi: Annettu: mielivaltainen pelitilanne n n tammilaudalla Kysymys: voiko musta pelaaja pakottaa voiton itselleen Yleistetty go: Annettu: mielivaltainen pelitilanne n n go-laudalla Kysymys: voiko musta pelaaja pakottaa voiton itselleen Kumpikin ongelma ratkeaa eksponentiaalisessa mutta ei polynomisessa ajassa; ratkeavuus polynomisessa tilassa avoin. (Kumpaankin tapaukseen liittyy epätriviaaleja oletuksia sääntöjen yksityiskohdista.) 182
Epädeterministiset vaativuusluokat [HMU 10.1.3, 10.1.4] Määrittelemme nyt epädeterministisen Turingin koneen aika- ja tilavaativuuden. Tämä on hyödyllinen käsite ongelmien analysoimisessa; ei realistinen mitta ongelman ratkaisuajalle oikeilla tietokoneilla. Annetun yksittäisen laskennan aika- ja tilavaativuus voidaan määritellä kuten deterministisessä tapauksessa. Epädeterministisellä koneella N voi syötteellä x olla useita mahdollisia laskentoja, joten määritellään steps N (x) = koneen N pisimmän laskennan pituus syötteellä x. Aikavaativuusfunktio on kuten ennenkin time N (n) = max { steps N (x) x = n }. Vastaavasti space N (n) on suurin tila, joka voidaan käyttää pituutta n olevalla syötteellä. 183
Epädeterministisen Turingin koneen N laskentaa syötteellä x on usein hyödyllistä ajatella laskentapuuna. q 0 x solmuina laskennan mahdolliset tilanteet juurena alkutilanne lehtinä tilanteet joista ei siirtymää, erityisesti hyväksyvät tilanteet... qyes...... qyes... solmun vqw jälkeläisiä ne v q w joilla vqw N v q w... qyes.... N hyväksyy syötteen x joss puussa ainakin yksi hyväksyvä lehti 184
Jos time N (x) = t, laskentapuussa kork. d t solmua missä d suurin määrä seuraajia millään yksittäisellä tilanteella. Haarautumisasteelle d saadaan triviaali yläraja d 2 Γ Q, joka riippuu koneen N rakenteesta mutta ei syötteestä x. Määritelmän mukaan aikavaativuus määräytyy puun pisimmän haaran mukaan. Tämä voi tuntua ei-intuitiiviselta, mutta itse asiassa ei ole oleellista. Seuraava lause näet osoittaa, että jos lyhimmän hyväksyvän polun pituudelle tunnetaan yläraja, laskennasta voidaan karsia kaikki tätä pitemmät haarat. Tunnistettu kieli pysyy samana, ja karsinnan toteuttamisesta tulee korkeintaan neliöllinen lisäaikarasite. 185
Lause 3.1: Jos A = L(N) missä N on yksinauhainen epädeterministinen Turingin kone ja jokaisella x A koneen N lyhimmän hyväksyvän laskennan pituus on O( x k ), niin A = L(N ) missä N on yksinauhainen epädeterministinen Turingin kone ja time N (x) = O( x 2k ). Todistushahmotelma Muodostetaan ensin kaksinauhainen N, joka aluksi kirjoittaa kakkosnauhalle O( x k ) nollaa ja sen jälkeen simuloi konetta N käyttäen kakkosnauhaa käskylaskurina (vrt. harj. 3. teht. 5.) Tämä kaksinauhainen kone toimii ajassa O(n k ), joten sitä voidaan simuloida yksinauhaisella ajassa O(n 2k ). 186
Tärkeitä epädeterministisiä vaativuusluokkia Päätösongelma A kuuluu luokkaan NP (nondeterministic polynomial time), jos se voidaan tunnistaa epädeterministisellä Turingin koneella. jonka aikavaativuus on polynominen. Formaalisti NP = { L(N) N epädeterministinen, time N (n) = O(n k ) jollain k }. Kuten deterministisessä tapauksessa, voidaan määritellä myös NE = { L(N) N epädeterministinen, time N (n) = O(2 nk ) jollain k } NPSPACE = { L(N) N epädeterministinen, space N (n) = O(n k ) jollain k }. Koska deterministiset koneet ovat epädeterminististen erikoistapaus, on triviaalisti P NP jne. Itse asiassa voidaan osoittaa PSPACE = NPSPACE, joten epädeterministinen tilavaativuus ei yleensä ole kiinnostavaa. Sen sijaan kysymys, päteekö P NP, on avoin. 187
Sivulla 47 esitetystä laskelmasta seuraa, että jos A NP, niin A voidaan tunnistaa deterministisellä Turingin koneella ajassa O(2 p(n) ) jollakin polynomilla p. Tämä laskelma perustuu oleellisesti edelläesitetyn laskentapuun läpikäymiseen leveyssuuntaisesti. Periaatteessa on mahdollista, että on jokin tehokkaampikin tapa simuloida epädeterministisiä laskentoja. Oleellisesti tehokkaampaa tapaa ei kuitenkaan tunneta, eikä sellaisen löytymistä pidetä todennäköisenä. Toisin sanoen arvellaan, että luokan NP vaikeimmat ongelmat todella vaativat eksponentiaalisen laskenta-ajan (realistisissa laskennan malleissa). Ennen tämän ajatuksen tarkempaa tutkimista tarkastellaan, millaisia ongelmia luokassa NP on. 188
Esimerkki: Hamiltonin kehä Osoitetaan, että HC NP. Tehdään ensin pseudokoodiesitys epädeterministiselle algoritmille, joka toimii polynomisessa ajassa ja ratkaisee ongelman HC. Määritellään ensin normaali deterministinen apuproseduuri CheckHC(V, E, Q), joka tarkistaa onko annettu solmujono Q Hamiltonin kehä verkossa (V, E): CheckHC(V, E, Q): /* Olkoon Q = (u 1,..., u m ). */ if m V or { u 1,..., u m } = V then return false; if (u m, u 1 ) E then return false; for i := 1 to m 1 do if (u i, u i+1 ) E then return false; return true Selvästi CheckHC toimii polynomisessa ajassa. 189
Hamiltonin kehä -ongelmalle saadaan nyt seuraava epädeterministinen algoritmi: HC(G): 1. Olkoon G = (V, E) ja V = n. 2. Arvaa epädeterministisesti solmujono Q = (u 1,..., u n ) V n. 3. Jos CheckHC(V, E, Q) = true niin hyväksy, muuten hylkää. Tämä toimii polynomisessa ajassa, ja on epädeterministinen algoritmi ongelmalle HC koska 1. jos G HC niin jokin arvaus Q johtaa hyväksymiseen ja 2. jos G HC niin kaikki arvaukset Q johtavat hylkäämiseen. 190
Määritelmien konkretisoimiseksi käännetään vielä tämä pseudokoodi Turingin koneeksi. Koodataan syöte G = (V, E), missä V = { v 1,..., v n } ja E = { (v i1, v j1 ),..., (v im, v jm ) }, aakkoston { 0, 1, } merkkijonona ˆn î 1 ĵ 1 î 2 ĵ 2... ˆ i m ˆ j m missä î on luvun i binääriesitys. Tämä esitys on helppo muodostaa vieruslistasta tai -matriisista. Esim. jos V = { a, b, c, d } ja E = { (a, b), (a, c), (b, c), (c, d) } niin koodataan a 1, b 10, c 11 ja d 100 ja esitykseksi tulee 100 1 10 1 11 10 11 11 100 191
Kielen HC tunnistava kone N on kaksinauhainen ja toimii seuraavasti: 1. Kirjoita kakkosnauhalle epädeterministisesti jokin merkkijono v { 0, 1, }, jonka pituus on korkeintaan n 2 + n + 1. 2. Olkoon v = w 1 w 2... w n missä w i { 0, 1 } ja n = V ; jos v ei ole tätä muotoa niin hylkää. 3. Jos jollain i = 1,..., n koodi î esiintyy merkkijonossa v kaksi kertaa tai ei esiinny lainkaan, hylkää. 4. Jos syöte ei sisällä merkkijonoa w 1 w n eikä w n w 1, niin hylkää. 5. Jos jollain i = 1,..., n 1 syöte ei sisällä merkkijonoa w i w i+1 eikä w i+1 w i niin hylkää (huom. suuntaamaton verkko, jompi kumpi suunta riittää) 6. Muuten hyväksy. 192
Askelten 2.-5. perusteella kone N hyväksyy syötteen, jos ja vain jos nauhalle 2 generoitu merkkijono v esittää jotain Hamiltonin polkua verkossa G. Triviaalisti tällainen merkkijono v on olemassa, jos ja vain jos G HC. Toisin sanoen koneella N on hyväksyviä laskentoja, jos ja vain jos G HC. Kone N toimii selvästi polynomisessa ajassa: Askel 1 vie ajan O(n 2 ). Askelet 2 ja 3 menevät samoin ajassa O(n 2 ). Askelissa 4 ja 5 pitää oleellisesti käydä läpi syötteeseen koodattu verkon G vieruslista n kertaa, mikä vie karkeasti ajan O(n 3 ). Siis N on polynomisessa ajassa toimiva epädeterministinen Turingin kone, joka ratkaisee Hamiltonin kehä -ongelman, joten HC NP. Käytännössä ongelman kuuluminen luokkaan NP voidaan tehdä korkean tason pseudokoodilla, kunhan ymmärretään mitä epädeterministinen arvaaminen tarkoittaa. 193
Propositiologiikan toteutuvuusongelma (Satisfiability, SAT) Otetaan vielä esimerkkinä yksi tärkeä luokan NP ongelma. [HMU 10.2.1, 10.2.2] Propositiologiikan kaava muodostuu loogisista konnektiiveista, ja, sulkumerkeistä ( ja ), vakiosymboleista 0 ja 1 sekä muuttujasymboleista x i, i = 1, 2, 3,..., tuttuun tapaan; esim. x 4 (x 7 x 1 ). Kaavat voidaan ilmeisellä tavalla esittää aakkoston {,,, (, ), 0, 1, x } merkkijonoina; esim. x100 (x111 x1). Kaavan totuus määritellään tuttuun tapaan; 0 = epätosi ja 1 = tosi. Jos φ(x 1,..., x n ) on muuttujia x 1,..., x n sisältävä kaava ja (v 1,..., v n ) { 0, 1 } n, niin φ(v 1,..., v n ) on kaavan arvo kun muuttujille sijoitetaaan arvot x i := v i ; esim. kun φ(x 1, x 2, x 3 ) = (x 3 x 1 ) x 2 niin φ(0, 1, 0) = (0 0) 1 = 0. Kaava φ(x 1,..., x n ) on toteutuva jos φ(v 1,..., v n ) = 1 jollain (v 1,..., v n ) { 0, 1 } n. 194
Määritellään nyt propositiologiikan toteutuvuusongelma SAT = { φ φ on toteutuva }. Toteutuvuusongelma voidaan helposti ratkaista epädeterministisesti polynomisessa ajassa: 1. Lue φ(x 1,..., x n ). 2. Arvaa epädeterministisesti (v 1,..., v n ) { 0, 1 } n. 3. Jos φ(v 1,..., v n ) = 1 niin hyväksy; muuten hylkää. Siis SAT NP. 195
Luokan NP ongelmien yleinen luonne ( ) Edellisiä esimerkkejä yleistäen voidaan osoittaa, että mikä tahansa luokan NP ongelma A voidaan ratkaista seuraavan tyyppisellä proseduurilla: A(x): 1. Olkoon n = x. 2. Arvaa epädeterminisesti y, missä y = p(n) jollain polynomilla p. 3. Jos CheckA(x, y) = true niin hyväksy, muuten hylkää. Tässä CheckA(x, y) on jokin deterministinen, polynomisessa ajassa toimiva proseduuri. Emme tässä todista, miksi kaikki epädeterminismi voidaan tällä tavoin rajoittaa alussa tapahtuvaan arvausvaiheeseen, mutta tarkastelemme hieman asian tulkintaa. 196
Jos x ja y ovat sellaisia, että edellisen sivun merkinnöillä CheckA(x, y) = true, niin sanomme että y on todiste sille, että x A. Esim. SAT-ongelman tapauksessa jos φ(x 1,..., x n ) SAT, niin tämän seikan todisteita ovat sellaiset (v 1,..., v n ) { 0, 1 } n joilla φ(v 1,..., v n ) = 1. Jotta edellisen sivun konstruktio todella osoittaisi A NP, seuraavien ehtojen on oltava voimassa: 1. jos x A, niin tälle on jokin polynomisen kokoinen todiste, 2. jos x A, niin mikään y ei todista x A ja 3. kysymys todistaako y, että x A voidaan annetuilla x ja y ratkaista deterministisesti polynomisessa ajassa. Intuitiivisesti luokan NP ongelmat siis ovat sellaisia, että niiden kyllä -tapauksille on suhteellisen pienet todisteet, ja annettu todiste on helppo tarkastaa. Ongelma on siinä, että potentiaalisia todisteita on 2 p(n) kappaletta. 197
Epädeterminismi vs. satunnaislaskenta ( ) Miten sivulla 196 esitetyn tyyppinen algoritmi voidaan suorittaa oikealla tietokoneella? Oletetaan y { 0, 1 }. Ilmeisimmät vaihtoehdot: Vaihtoehto 1: Käydään läpi kaikki y { 0, 1 } p(n). saadaan varmasti oikea vastaus pitää käydä läpi 2 p(n) mahdollisuutta (paljon!) Vaihtoehto 2: Valitaan y { 0, 1 } p(n) satunnaisesti tasaisesta jakaumasta aikavaativuus sama kuin epädeterministisen algoritmin aikavaativuus jos x A, vastaa aina oikein jos x A, vastaa oikein ainakin todennäköisyydellä 1/2 p(n) (pieni!) jos halutaan aina oikea vastaus ainakin todennäköisyydellä 1/2, pitää suorittaa 2 p(n) 1 riippumatonta toistoa (monta!) 198
P = NP -ongelma Pääsemme nyt vihdoin kysymykseen, mitä (jos mitään) tieto A NP kertoo ongelman A deterministisestä aikavaativuudesta. laskettavuusteoria: mikä voidaan tunnistaa epädeterministisellä Turingin koneella, voidaan tunnistaa myös deterministisellä Turingin koneella vaativuusteoria: koskeeko sama tunnistamista polynomisessa ajassa; ts. päteekö P = NP? kysymys ollut kiivaan tutkimuksen kohteena vuodesta 1971 (Stephen Cook, The complexity of theorem-proving procedures ), yhä avoin intuitiivisesti P = NP olisi hyvin yllättävä tulos, koska em. tulkinnan mukaan se tarkoittaisi, että todiste voidaan löytää eksponentiaalisesta etsintäavaruudesta polynomisessa ajassa P = NP pätee jos ja vain jos jokin NP-täydellinen ongelma (esim. HC, SAT) ratkeaa polynomisessa ajassa; siirrytään tarkastelemaan näitä. 199