Laskennanteoria: Mitä voimmelaskea tietokoneella ja kuinkatehokkaasti?



Samankaltaiset tiedostot
Kaikki mitä olet aina halunnut tietää pumppauslemmoista, mutta mitä et ole kehdannut kysyä

Kreikkalainen historioitsija Herodotos kertoo, että Niilin tulvien hävittämät peltojen rajat loivat maanmittareiden

DISKREETTI MATEMATIIKKA

Karttojen värittäminen

Tieto tietojenkäsittelytieteessä

Tieto, totuus, tiede (2004)

Y100 kurssimateriaali

Eero Ojanen. Hyvä päätös? polemia KAKS KUNNALLISALAN KEHITTÄMISSÄÄTIÖ

Elä sitä, mitä jo olet!

Kirjallisuuden vaihto hankintatapana

Johdatus matemaattiseen päättelyyn

1.Kuvauksen lähtöaineisto

Lukiotason matematiikan tietosanakirja

Itseindeksit Kun tiivistetty teksti ja sen indeksi ovatkin sama asia

1.1 Tavallinen binäärihakupuu

Luova ympäristö lasten omaaloitteisen

1.1 Yhtälön sieventäminen

2. Polynomien jakamisesta tekijöihin

Markkinoiden toimivuudesta 1

WORD- ja EXCEL-opas Office 2010

Shakin säännöt. Luku 1

Miten nostaa yläasteen oppilaitten kiinnostusta matematiikan sanallisia tehtäviä kohtaan? Esimerkkejä, neuvoja, analyysi

Jarkko Peltomäki. Järjestetyt joukot ja hilat

Käsikirja Mathcad 15.0 Lokakuu 2010

Palloja voi pyörittää kevyellä liikkeellä normaaliasennosta (harmaa) vaakatasossa niin, että numerot tulevat

Pohjoismaisten matematiikkakilpailujen tehtävät ja ratkaisut

$ $($( )) * + $ $((,%- # $((,%- $ ($(. +/ $ (( 0 $ (( 0 1 $

Teknologian käyttö matematiikan oppitunnilla yläkoulussa ja lukiossa. Senja Roivas

sanalli Matematiikan sanalliset tehtävät TEHTÄVÄN YMMÄRRYS Toim. Teija Laine, Turun Matikkamaa

Algoritmit 1. Luento 10 Ke Timo Männikkö

Transkriptio:

Laskennanteoria: Mitä voimmelaskea tietokoneella ja kuinkatehokkaasti? Wilhelmiina Hämäläinen Johdatus tietojenkäsittelytieteeseen 1.-2.12. 2003 Tietojenkäsittelytieteen laitos Joensuun yliopisto

1 Johdanto Laskennateoria (theory of computation) koostuu kahdesta osa-alueesta: 1. Laskettavuuden teoria (theory of computability): Mitä tietokoneella voidaan ratkaista? Kuinka vaikea ongelma on? ongelmian vaikeusluokat (kuinka monimutkaista laskennanmallia tarvitaan) 2. Laskennan vaativuusteoria (theory of computational compleity): Kuinka tehokkaasti ongelma voidaan ratkaista? ongelmien vaativuusluokat (aika- ja tilavaativuus) ONGELMA EI LASKENNALLINEN ONGELMA LASKENNALLINEN ONGELMA RATKEAVA ONGELMA RATKEAMATON ONGELMA TEHOKKAASTI RATKAISTAVISSA EI TEHOKASTA RATKAISUA OSITTAIN RATKEAVA TÄYSIN RATKEAMATON Kuva 1: Ongelmien luokittelu. 2 Laskettavuudenteoria Laskettavuudenteorian keskeisiä kysymyksiä ovat: Onko annettu ongelma ylipäänsä (tietokoneella) ratkeava? Jos se on, niin kuinka vaikea se on? Ts. kuinka järeää kalustoa tarvitsemme ongelman mallintamiseen ja ratkaisemiseen? Näiden ongelmien ratkaisemiseksi on määritelty erilaisia laskennanmalleja. Tunnetuin tällainen malli on Turingin kone, jonka avulla voidaan tutkia minkä tahansa (laskennallisen) ongelman ratkeavuutta sekä jatkossa myös laskennallista vaativuutta. Helpompia ongelmia voidaan mallintaa yksinkertaisemmilla laskennanmalleilla, kuten äärellisillä 1

automaateilla ja pinoautomaateilla. Ongelmat voidaankin jakaa vaikeusluokkiin sen perusteella, kuinka vahvaa laskennanmallia ne vaativat. Seuraavassa keskitymme kuitenkin vain Turingin koneisiin. Muista laskennamalleista ja niiden käyttötavoista kerrotaan Tietojenkäsittelytieteen teoreettiset perusteet - kurssilla. 2.1 Laskennamallit ja Churchin-Turingin teesi Ongelmia: Maija ja Matti ovat ratkaisseet saman ongelman, mutta Maija on kirjoittanut ratkaisunsa Adalla ja Matti Perlillä. Kumman ratkaisu on tehokkaampi, oikeellisempi, parempi,...? Et ole keksinyt ongelmaan ratkaisua Pascalilla, voisiko Java auttaa? Ratkaisusi Kauppamatkustajan ongelman vaatii pahimmassa tapauksessa eksponentiaalisen ajan. Onko toivoa, että se ratkeaisi konekielellä polynomisessa ajassa? Pomosi on tilannut sinulta universaalin virustunnistajan, joka varoittaa kaikista sellaisista ohjelmista, jotka voivat muuttaa järjestelmätiedostoja. Pystytkö laatimaan vaaditun ohjelman? Pysähtyykö tämä ohjelma koskaan? Ratkaisu: abstraktit laskennanmallit laskennanmalli (model of computation): mitä voi laskea ja kuinka vaativaa se on? alkujaan matemaattinen ongelma tietokoneilla voi laskea kaikkea, mitä matematiikassakin! tietojenkäsittelytieteessäkin useita laskennanmalleja, esim. erilaiset ohjelmointikielet, RAM-koneet, automaatit ohjelmointikielten ongelma: metsää voi olla vaikea nähdä puilta itse ongelman analysointi on vaikeaa yhdestä ratkaisusta 2

Mitä jos sitä yhtäkään ratkaisua ei keksi? Onko ongelma silloin ratkeamaton? tavoite: mallinnetaan laskukonetta mahdollisimman abstraktisti, karsien pois kaikki turhat yksityiskohdat. Silti mallin oltava riittävän vahva: kyettävä kaikkeen, mihin matematiikassa ja tietokoneilla kyetään. Turingin koneet tarjoavat ratkaisun! = yksinkertainen abstrakti laskukone, jolla voi ratkaista kaiken, mikä on nykytietämyksen mukaan laskennallisesti ratkaistavissa (millä tahansa ohjelmointikiellä tai matematiikassa) = ns. Churchin-Turingin teesi voidaan ratkaista mikä tahansa mekaanisesti ratkeava ongelma voidaan siis tutkia, onko ongelma ylipäänsä ratkeava analysoida sen vaativuutta (montako aika-askelta tai työnauhan solua kone tarvitsee työssään) mikä tahansa algoritmi voidaan siis esittää Turingin koneena Huom! Yleensä algoritmiksi kutsutaan vain sellaista algoritmia, jonka laskenta päättyy aina, kaikilla syötteillä. Ei ole järkeä kirjoittaa ohjelmaa, joka ei pysähdy koskaan! Huom2! Vain teesi, ei teoreema (lause): kukaan ei ole voinut todistaa oikeaksi, mutta kaikki tunnetut (vahvat) laskennanmallit ovat osoittautuneet ekvivalenteiksi ja yleisesti uskotaan pätevän kaikille laskennanmalleille. Jotkut ovat spekuloineet, olisivatko ns. kvanttitietokoneet vahvempia... 2.2 Turingin koneet 2.2.1 Koneen rakenne Äärellistilainen ohjausyksikkö, jonka toimintaa säätelee siirtymäfunktio δ (delta). Kullakin hetkellä kone on jossain tilassa q i. Merkkipaikkoihin jaettu työnauha, joka on loppupäästään äärettömän pitkä. Nauhapää, joka kullakin hetkellä osoittaa yhtä työnauhan merkkiä. Kone voi lukea ja kirjoittaa vain nauhapään kohdalla olevan merkin. 3

nauha: T U R I > < N G nauhapää: ohjausyksikkö: q 1 q 2 q 0 δ Syötteet Kuva 2: Turingin kone. syötteenä annetaan merkkijono, joka kirjoitetaan koneen työnauhalle usein käytetään binääriaakkostoa eli merkkijono koostuu 1:istä ja 0:ista, esim. luku 7 koodataan jonona 111 ja luku 8 jonona 0001 (merkitsevin bitti vasemmalla) Huom! Minkä tahansa merkkijonon voi koodata binääriaakkosin! lisäksi nauhan alkua merkitsevä erikoismerkki > ja loppua merkitsevä erikoismerkki < (loppumerkki liikkuu eteenpäin, kun sen päälle kirjoitetaan aakkoston symboli ts. voit ajatella, että koko loppunauha on täynnä loppumerkkiä <<<<<... Tulosteet kun kone pysähtyy, voidaan tulosjono lukea työnauhalta tärkeä erikoistapaus ns. tunnistuskoneet, jotka ratkaisevat jonkin päätösongelman ts. ne tunnistavat, kuuluuko annettu syötejono haluttuun joukkoon ja vastaavat vain Kyllä tai Ei. Esim. Onko annetun merkkijonon koodaama binääriluku parillinen? Kyllä-vastaus, kun kone pysähtyy hyväksyvässä lopputilassa, ja Eivastaus, kun kone pysähtyy hylkäävässä lopputilassa Huom! Ongelman vaikeuden kannalta riittää tutkia vastaavaa päätösongelmaa. Esim. ongelmaa laske +y vastaa päätösongelma annettu merkkijono yz, onko +y=z? 4

Koneen toiminta Aluksi nauhalla on syötemerkkijono (ja loppu nauhasta tyhjä), nauhapää osoittaa ensimmäistä nauhapään paikkaa ja kone käynnistetään alkutilassa q 0 Kullakin laskenta-askeleella se lukee nauhapään kohdalla olevan merkin, päättää siirtymäfunktion mukaisesti uuden tilansa, kirjoittaa nauhapään kohdalla uuden merkin ja siirtää nauhapäätä yhden askeleen vasemmalle tai oikealle (ensimmäisen paikan vasemmalle puolelle ei voi kuitenkaan mennä) Koneella on hyväksyvä lopputila q yes ja hylkäävä lopputila q no (kun kyseessä on merkkijonon tunnistaminen, jota käsittelemme). Kone pysähtyy, kun se saavuttaa lopputilan. Esim. kielen {a k b k c k k 0} tunnistava Turingin kone a/a, R B/B, R b/b, R C/C, R a/a, R b/b, R q 0 q 1 q 2 </<, L a/a, R c/c, L q 4 A/A, R q 3 </<, L q 5 B/B, R B/B, R C/C, R C/C, L b/b, L B/B, L a/a, L Kuva 3: Kielen {a k b k c k k 0} tunnistava Turingin kone. Idea: kone pitää kirjaa tapaamistaan a:sta, b:stä ja c:stä muuttamalla ne yksi kerrallaan A:ksi, B:ksi ja C:ksi. muutettuaan viimeisen a:n A:ksi tarkistaa, ettei enää jäljellä b:tä tai c:tä. Sama ohjelmana: 5

while ((c=getchar())!=eof) { switch(c) { case 'a': A++; case 'b': B++; case 'c': C++; else: ERROR; } } if ((A==B) && (B==C)) printf(ok); 2.2.2 *Formaali määrittely Määritelmä: Turingin kone on seitsikko missä M = (Q, Σ, Γ, δ, q 0, qyes, qno), Q on koneen tilojen äärellinen joukko; Σ on koneen syöteaakkosto; Γ Σ on koneen nauha-aakkosto; ol. että >, < / Γ; δ : (Q \ {qyes, qno}) (Γ {>, <}) Q (Γ {>, <}) {L, R} on koneen siirtymäfunktio; q 0 Q on koneen alkutila; qyes Q on koneen hyväksyvä ja qno Q sen hylkäävä lopputila. Siirtymäfunktion arvoilta vaaditaan: (i) jos b = >, niin a = >; (ii) jos a = >, niin b = > ja = R; (iii) jos b = <, niin a = < ja = L. δ(q, a) = (q, b, ) 6

Siirtymäfunktion arvon δ(q, a) = (q, b, ) tulkinta: Ollessaan tilassa q ja lukiessaan nauhamerkin (tai alku- tai loppumerkin) a, kone siirtyy tilaan q, kirjoittaa lukemaansa paikkaan merkin b, ja siirtää nauhapäätä yhden merkkipaikan verran suuntaan (L left, R right). Sallittuja kirjoitettavia merkkejä ja siirtosuuntia on rajoitettu, mikäli a = `>' tai `<', ja siirtymäfunktion arvo on aina määrittelemätön, kun q = qyes tai q = qno. Joutuessaan jompaan kumpaan näistä tiloista kone pysähtyy heti. Huom! Hyväksymiseen riittää, että pääsemme hyväksyvään lopputilaan, koko merkkijonoa ei välttämättä tarvitse edes lukea! Nauhalle saa luonnollisestikin jäädä merkkejä. 2.2.3 Turingin koneen esitys siirtymäkaaviona Turingin kone voidaa esittää antamalla sen siirtymäfunktio tai havainnollisemmin siirtymäkaaviona. q Tila q q 0 Alkutila Hyväksyvä lopputila (qyes) Hylkäävä lopputila (qno) a/b, q q Tilasiirtymä δ(q, a) = (q, b, ) Kuva 4: Turingin koneiden kaavioesityksen merkinnät. Esimerkki: Merkitään a n :llä merkkijonoa, jossa on n kappaletta a-kirjaimia, esim. a 3 = aaa. Kieli {a 2k k 0} voidaan tunnistaa Turingin koneella M = ({q 0, q 1, qyes, qno}, {a}, {a}, δ, q 0, qyes, qno), 7

missä δ(q 0, a) = (q 1, a, R), δ(q 1, a) = (q 0, a, R), δ(q 0, <) = (qyes, <, L), δ(q 1, <) = (qno, <, L). a/a, R q 0 q 1 </<, L a/a, R </<, L Kuva 5: Kielen {a 2k k 0} tunnistava Turingin kone. Koneen M laskenta esimerkiksi syötteellä aaa etenee seuraavasti: (q 0, aaa) M (q 1, aaa) (q 0, aaa) M M (q 1, aaaɛ) M (qno, aaa). Kone pysähtyy tilassa qno, joten aaa / L(M). (Yllä merkki ilmaisee koneen nykytilanteen seuraajaa ts. missä tilassa kone on, M mitä on työnauhalla ja mihin nauhapää osoittaa sillä hetkellä.) Esimerkki 2: Kielen {a k b k c k k 0} tunnistavan koneen laskenta syötteellä aabbcc: (q 0, aabbcc) (q 2, AABBCc) (q 1, Aabbcc) (q 2, AABBCc) (q 1, Aabbcc) (q 3, AABBCC) (q 2, AaBbcc) (q 3, AABBCC) (q 2, AaBbcc) (q 3, AABBCC) (q 3, AaBbCc) (q 3, AABBCC) (q 3, AaBbCc) (q 4, AABBCC) (q 3, AaBbCc) (q 5, AABBCC) (q 3, AaBbCc) (q 5, AABBCC) (q 4, AaBbCc) (q 5, AABBCC) (q 1, AABbCc) (q 5, AABBCCɛ) (q 1, AABbCc) (qyes, AABBCC). 8

1. 2. 3. A L A N M A T H I S O N T U R I N G q 1 q 2 q 0 δ Kuva 6: Kolmenauhainen Turingin kone. 2.3 Turingin koneiden laajennuksia Turingin koneista on olemassa monia erilaisia variaatioita. Koneen työnauha voi esimerkiksi olla kumpaankin suuntaan ääretön tai sallitaan, että koneen nauhapää saa pysyä paikallaan. Seuraavaksi esitellään kolme hyödyllistä variaatiota: moninauhaiset koneet, joilla on useita toisistaan riippumattomia työnauhoja, moniuraiset koneet, joiden työnauha koostuu useasta rinnakkaisesta urasta, sekä tärkeimpänä kaikista, epädeterministiset Turingin koneet. Huom! Mikä tahansa näistä variaatioista voidaan esittää standardimallisena Turingin koneena. Moninauhaiset koneet Sallitaan, että Turingin koneella on useita, esim. k toisistaan riippumatonta nauhaa, joilla on kullakin oma nauhapäänsä. Kone lukee ja kirjoittaa kaikki nauhat yhdessä laskenta-askelessa. Laskennan aluksi syöte sijoitetaan ykkösnauhan vasempaan laitaan ja kaikki nauhapäät nauhojensa alkuun. Tällaisen koneen siirtymäfunktion arvot ovat muotoa δ(q, a 1,..., a k ) = (q, (b 1, 1 ),..., (b k, k )), 9

missä a 1,..., a k ovat nauhoilta 1,..., k luetut merkit, b 1,..., b k niiden tilalle kirjoitettavat merkit, ja 1,..., k {L, R} nauhapäiden siirtosuunnat. Merkitys: usein helpompi ratkaista ongelma moninauhaisella koneella esim. yhteenlaskussa a+b = c kirjoitetaan eka nauhalle luvun a binääriesitys, toka nauhalle luvun b binääriesitys y ja lasketaan kolmannelle nauhalle vastauksen c binääriesitys z. Ja mikäli ongelma kyetään ratkaisemaan monen nauhan avulla, se kyetään ratkaisemaan myös yksinauhaisella standardikoneella. Moniuraiset koneet A M T L A U A T R N H I # I N # S G # # O N # # nauhapää: Kuva 7: Kolmeuraisen Turingin koneen nauha. Sallitaan, että Turingin koneen nauha koostuu k:sta rinnakkaisesta urasta, jotka kaikki kone lukee ja kirjoittaa yhdessä laskenta-askelessa. Koneen siirtymäfunktion arvot ovat tällöin muotoa: δ(q, (a 1,..., a k )) = (q, (b 1,..., b k ), ), missä a 1,..., a k ovat urilta 1,..., k luetut merkit, b 1,..., b k niiden tilalle kirjoitettavat merkit, ja {L, R} on nauhapään siirtosuunta. Laskennan aluksi tutkittava syöte sijoitetaan ykkösuran vasempaan laitaan; muille urille tulee sen kohdalle erityisiä tyhjämerkkejä, esim. #. Merkitys: moninauhainen kone voidaan muuntaa yksinauhaiseksi muuntamalla se ensin vastaavaksi moniurakoneeksi ja sitten yksiuraiseksi standardikoneeksi. Epädeterministiset koneet tavalliset Turingin koneet ovat deterministisiä ts. koneen toiminta on yksikäsitteisesti määrättyä: kun tunnetaan nauhapään kohdalla oleva merkki ja koneen senhetkinen tila, määrää siirtymäfunktio yksikäsitteisesti nauhapään kohdalle kirjoitettavan merkin ja seuraavan tilan. 10

Epädeterministisen Turingin koneen toiminta on epädeterministä ts. se ei ole yksikäsitteisesti määriteltyä: kun tunnetaan nauhapään kohdalla oleva merkki ja senhetkinen tila, voi koneella olla useita vaihtoehtoja, mitä kirjoittaa nauhapään kohdalle ja mihin tilaan siirtyä seuraavaksi. Siirtymäfunktio on siis muotoa δ(q, a) = {(q 1, b 1, 1 ),..., (q k, b k, k )} Ts. ollessaan tilassa q ja lukiessaan merkin a kone voi toimia jonkin kolmikon (q i, b i, i ) mukaisesti. Syötemerkkijon hyväksymiseksi riittää siis, että jokin koneen laskentapolku johtaa hyväksyvään lopputilaan. Merkitys: usein helpompi keksiä epädeterministinen kone, joka arvaa kulloinkin parhaan toiminta-askeleen. Mikäli halutaan vain tutkia ongelman vaikeutta, tämä riittää, sillä mikä tahansa epädeterministinen kone voidaan esittää deterministisenä! (aina voidaan simuloida deterministisellä koneella kaikkia mahdollisia laskentapolkuja.) Esim. Epädeterministinen kone, joka tutkii, sisältääkö annettu merkkijono osajonon 100: 0/0,R 1/1,R 1/1,R 0/0,R 0/0,R </<,L </<,L 1/1,R </<,L 1/1,R Saman ongelman ratkaiseva deterministinen kone: Huom! Epädeterministiset koneet ovat tärkeitä myös määritettäessä ongelman epädeterministisiä vaativuusluokkia ja erityisesti ongelman NP-täydellisyyttä. 11

0/0,R 1/1,R 1/1,R 0/0,R 0/0,R </<,L </<,L 1/1,R </<,L 2.4 Loppusanat Turingin koneet joskus turhan monimutkainen laskennanmalli jotkut ongelmat ratkeavat helpommilla laskennamalleilla kuten äärellisillä automaateilla tai pinoautomaateilla kaikki ongelmat eivät ole ratkeavia ongelma on ratkeava vain jos sille voidaan laatia aina pysähtyvä Turingin kone! ongelma on osittain ratkeava, jos vastaava Turingin kone pysähtyy vain joskus (tunnistuskone pysähtyy vain Kyllä-tapauksissa tai tavallinen kone laskee funktion arvon vain joskus muulloin se jää ikuisesti laskemaan). Huom! Osittain ratkeavakin ongelma on ratkeamaton! ongelma on täysin ratkeamaton, jos vastaava kone ei pysähdy koskaan! ratkeamattomuuden todistamiseksi osoitettava, ettei ongelmalle voi laatia pysähtyvää Turingin konetta (osoitetaan antiteesillä, että olettamus tällaisesta koneesta johtaa ristiriitaan) Turingin koneilla voidaan arvioida ongelman vaativuusluokka vaatiiko kone syötteen pituuteen nähden lineaarisen, polynomisen, eksponentiaalisen määrän aika-askelia (siirtymiä) tai työnauhan soluja vai vieläkin enemmän? Vai ratkeaako ongelma aina vakioajassa? sama vaativuusluokka pätee myös muilla laskennanmalleilla laadituille ratkaisuille sen parempaan ei pysty edes konekielellä, vaikka operaatioita kuinka tehostaisi (= ns. vahva Churchin-Turingin teesi) 12

3 Laskennan vaativuusteoria Tietojenkäsittelytieteilijälle ei riitä tieto, onko ongelma ratkeava, vaan hän haluaa myös tietää, kuinka vaativa se on, ts. kuinka nopeasti se voidaan ratkaista ja kuinka paljon muistikapasiteettia ratkaiseminen vaatii. Laskennavaativuusteoria tarkastelee näitä kysymyksiä. Abstraktit laskennamallit kuten Turingin koneet tarjoavat objektiivisen tavan arvioida ja vertailla ongelmien vaativuutta, ennen kuin ongelmaan on laadittu ratkaisua millään ohjelmointikielellä. Ideana on muodostaa ongelman ratkaiseva Turingin kone ja tutkia sen käyttämien aika-askelien ja työnauhan solujen lukumääriä. Luonnollisestikin saman ongelman voi ratkaista usealla erilaisella Turingin koneella, joten parhain löydetty Turingin kone antaa yleensä vain ylärajan ongelman vaativuudelle. Ongelmanvaativuusluokkia määriteltäessä tämä on kuitenkin riittävä lähtökohta: mikäli ongelma voidaan ratkaista polynomisessa ajassa toimivalla deterministisellä Turingin koneella, on se myös käytännössä tehokkaasti ratkaistavissa. Jos ongelman ratkaisu edellyttää vaativampaa konetta tai ratkeaa polynomisessa ajassa vain epädeterministisellä Turingin koneella, saattaa sen ratkaisu olla käytännössä liian tehotonta. Ns. NP-täydelliset ongelmat ovat eräs tällainen vaativien ongelmien luokka, johon kuuluu monia käytännössä tärkeitä ongelmia, mutta joille ei tunneta tehokkaita ratkaisualgoritmeja. 3.1 Aika- ja tilavaativuus 3.1.1 Turingin koneen aika- ja tilavaativuus Koneen M aika- ja tilavaativuus syötteellä : time M () = koneen M suorittamien siirtymäaskelien lukumäärä syötteellä, jos laskenta pysähtyy, ja, muuten. space M () = koneen M käyttämien työnauhan solujen lukumäärä syötteellä. Tavallisesti kuvaamme koneen aika- ja tilavaativuuden määrittelemällä, kuinka monta askelta tai työnauhan solua kone M tarvitsee pahimmassa tapauksessa n:n pituisella syötteellä. Määrittelemme siis aika- ja tilavaativuuden n:n funktioina time M (n) ja space M (n). 13

Esimerkki a/a, R q 0 q 1 </<, L a/a, R </<, L Kuva 8: Kielen {a 2k k 0} tunnistava Turingin kone. Tarkastellaan oheisen koneen (kuva 8) käyttämien askelten ja työnauhan solujen lukumääriä syötteillä a, aa, aaa,... Huomaa, että syötejonon loppussa on aina lopetusmerkki <. syöte syötteen pituus askeleet solujen lkm a 1 2 1 aa 2 3 2 aaa 3 4 4............ aa...a n n + 1 n Toisin sanoen time M (n) = n + 1 ja space M (n) = n. Koneen aikavaativuus on siis lineaarinen syötteen koon suhteen ja se tarvitsee työtilaa vain syötteen pituuden verran. 3.1.2 Aika- ja tilavaativuusluokat Tarkan aika- tai tilavaativuusfunktion sijasta meitä kiinnostaa, onko vaativuusfunktio polynominen vai eksponentiaalinen vai vieläkin pahempi. Polynominen aikavaativuus: time M (n) = O(n k ) jollain k 0 ts. aikavaativuusluokka on korkeintaan syötteen pituuden n polynomi. 14

Eksponentiaalinen aikavaativuus: time M (n) = O(2 nk ) jollain k 0 ts. aikavaativuusluokka on korkeintaan syötteen pituuden n eksponenttifunktio. Tilavaativuudet määritellään vastaavasti. Nyt ongelmat voidaan jakaa vaativuusluokkiin ratkaisukoneen aika- ja tilavaativuuden (polynominen vai eksponentiaalinen) perusteella. Koska epädeterministinen Turingin kone kykenee ratkaisemaan ongelman huomattavasti tehokkaammin kuin deterministinen kone, määritellemme erikseen deterministiset ja epädeterministiset vaativuusluokat. Deterministiset aika- ja tilavaativuusluokat: P = polynomisessa ajassa deterministisellä TM:llä ratkeavat ongelmat P SP ACE = polynomisessa tilassa deterministisellä TM:llä ratkeavat ongelmat E = eksponentiaalisessa ajassa deterministisellä TM:llä ratkeavat ongelmat ESP ACE = eksponentiaalisessa tilassa deterministisellä TM:llä ratkeavat ongelmat Epädeterministiset aika- ja tilavaativuusluokat: N P = polynomisessa ajassa epädeterministisellä TM:llä ratkeavat ongelmat NP SP ACE = polynomisessa tilassa epädeterministisellä TM:llä ratkeavat ongelmat N E = eksponentiaalisessa ajassa epädeterministisellä TM:llä ratkeavat ongelmat N ESP ACE = eksponentiaalisessa tilassa epädeterministisellä TM:llä ratkeavat ongelmat Vaativuusluokat voidaan pistää lineaariseen järjestykseen: P NP NPSPACE = PSPACE E NE NESPACE = ESPACE. 15

ESPACE NE E PSPACE NP P Kuva 9: Vaativuusluokkien sisältyvyyssuhteet. Huom! Tiedämme, että P E, NP NE, PSPACE ESPACE. Sen sijaan ei tiedetä, onko P NP, NP PSPACE, PSPACE E jne. Erityisesti ongelma P = NP? on ehkä tärkein avoin tietojenkäsittelytieteen ongelma. 3.2 N P-täydellisyys 3.2.1 Luokan NP ongelmat Luokkaan N P kuuluvat siis ongelmat, jotka voidaan ratkaista polynomisessa ajassa epädeterministisellä Turingin koneella, mutta joille ei tunneta polynomista ratkaisua deterministisellä Turingin koneella. Tämä merkitsee sitä, että ongelman ratkaisevan ohjelman aikavaativuus on pahimmassa tapauksessa eksponentiaalinen. Suurilla syötteillä ongelmaa ei siis kyetä ratkaisemaan järkevässä ajassa. Kaiken lisäksi tähän luokkaan kuuluu paljon käytännössä tärkeitä ongelmia, esimerkiksi 1. Lausekalkyylin toteutuvuusongelma: Annettu muuttujista 1,..., n, vakioista 0 ja 1 sekä loogisista konnektiiveista (ja), (tai) ja (ei) koostuva lausekalkyylin kaava F. Onko F toteutuva, ts. voidaanko muuttujille antaa totuusarvot siten, että F on tosi? 2. Hamiltonin kehä -ongelma: Annettu suuntaamaton verkko G. Sisältääkö G Hamiltonin kehän ts. syklin (suljetun polun), joka kulkee kaikkien verkon 16

solmujen kautta täsmälleen kerran? 3. Kauppamatkustajan ongelma: Annettu täydellinen suuntaamaton painotettu verkko G (ts. kartta, jossa jokaisesta kaupungista pääsee jokaiseen muuhun kaupunkiin, ja kunkin kaaren paino kertoo kaupunkien välisen etäisyyden) ja jokin luonnollinen luku k. Onko verkossa Hamiltonin kehää, jonka paino on korkeintaan k? (Tai optimointiongelmana: etsi lyhin reitti, joka kulkee jokaisen solmun kautta kertaalleen ja palaa takaisin lähtöpisteeseen.) 4. Repun pakkausongelma: Annettu n esinettä, joista kullakin on paino w i ja arvo v i (kumpikin positiivisia kokonaislukuja). Lisäksi on annettu kaksi luonnollista lukua, repun koko W ja jokin vakio K. Valitse sellainen esinejoukko S, että esineiden kokonaispaino on korkeintaan W, mutta kokonaisarvo vähintään K. Ts. Σ i S w i W ja Σ i S v i K. (Optimointiongelmana: valitse sellaiset esineet, että ne mahtuvat reppuun, mutta niiden arvo on mahdollisimman suuri.) 3.2.2 N P-täydellisyys Luokasta N P löytyy joukko ongelmia, jotka ovat siinä mielessä täydellisiä, että kaikki muut luokan N P ongelmat voidaan palauttaa niiksi polynomisella muunnoksella, ts. muunnoksella, joka vaatii korkeintaan polynomisen ajan. Tällaisia ongelmia kutsutaan NP-täydellisiksi (NP-complete). Esimerkiksi jos X on N P-täydellinen ja Y jokin muu luokan N P ongelma, voimme ensin muuntaa Y :n X:ksi ja ratkaista sitten X:n. Y :n aikavaativuusluokka (NP) ei silti muutu, sillä muunnos vaati vain polynomisen ajan. Tämä merkitsee sitä, että jos voisimme ratkaista yhdenkin N P-täydellisen ongelman polynomisessa ajassa deterministisellä Turingin koneella, voisimme ratkaista kaikki muutkin luokan N P ongelmat polynomisesti deterministisellä Turingin koneella, ja luokka N P olisikin P! Toistaiseksi kukaan ei kuitenkaan ole pystynyt keksimään tällaista ratkaisua, mutta ei myöskään osoittamaan, että se olisi teoriassa mahdotonta. Voimme osoittaa, että uusi ongelma A on N P-täydellinen seuraavasti: 1. Osoitetaan, että A kuuluu luokkaan N P, ts. muodostetaan epädeterministinen Turingin kone, joka ratkaisee A:n polynomisessa ajassa. 17

1) NP SAT 2) 3) NP B A NP B A Kuva 10: N P-täydellisyystodistusten idea. Luokan N P ongelmien välisiä polynomisia muunnoksia on merkitty nuolilla. 1) Cook on osoittanut, että SAT-ongelma on N P-täydellinen. 2) Olkoon B N P-täydellinen ongelma ja B voidaan muuntaa polynomisesti A:ksi. 3) Nyt myös A on N P-täydellinen ongelma. 2. Muunnetaan jokin tunnettu N P-täydellinen ongelma B A:ksi polynomisella muunnoksella. Periaatteessa voimme valita minkä tahansa tunnetun NPtäydellisen ongelman, mutta kannattaa valita sellainen, joka muistuttaa uutta ongelmaa A. Uusia N P-täydellisiä ongelmia on siis helppo löytää, kunhan tunnemme ainakin yhden NP-täydellisen ongelman. Ainut ongelma on, miten todistaa jollain muulla tavalla, että ensimmäinen ongelma on NP-täydellinen. Onneksi Cook on hoitanut todistuksen puolestamme: hän on osoittanut, että lausekalkyylin toteutuvuusongelma SAT on N P-täydellinen, ja voimme nojata tähän tulokseen. 3.2.3 Loppusanat Joskus puhumme myös N P-kovista (NP-hard) ongelmista. N P-kovat ongelmat muistuttavat N P-täydellisiä ongelmia siinä, että mikä tahansa luokan N P ongelma voidaan muuntaa polynomisessa ajassa N P-kovaksi ongelmaksi. Sen sijaan emme tiedä, kuuluuko ongelma itse luokkaan N P (se on siis niin kova ongelma, ettei kukaan ole keksinyt edes epädeterminististä polynomisessa ajassa toimivaa Turingin konetta, joka ratkaisisi ongelman). Mikäli joku ongelma havaitaan N P-kovaksi, voi suurella todennäköisyydellä arvata sen olevan eksponentiaalista tai vieläkin pahempaa aikavaativuusluokkaa. Toinen tärkeä kysymys on, mitä teemme jos ja kun törmäämme N P-täydelliseen ongelmaan? Hyvin pienillä syötteillä voimme käyttää kylmästi brute force -menetelmää ja kokeilla kaikki mahdolliset vaihtoehdot. Tämän aikavaativuus on eksponentiaalinen, joten se toimii todellakin vain hyvin pienillä syötteillä. Suuremmilla syötteillä 18

meidän on turvauduttava jonkinlaisiin heuristiikkoihin, joiden avulla voidaan rajata hakuavaruutta. Valitettavasti tällaiset oikopolut eivät kuitenkaan takaa optimaalista lopputulosta, mutta toivon mukaan kuitenkin melko hyvän tuloksen. Esimerkiksi soveltaessamme ahnetta heuristiikkaa repunpakkausongelmaan, valitsemme seuraavaksi aina sen esineen, jonka arvo-paino-suhde on paras (ts. suurin arvo suhteessa painoon). Selvästikin saamme repun pakattua paremmin kuin täysin satunnaisella pakkauksella, mutta on hyvin epätodennäköistä, että lopputulos olisi paras mahdollinen. Helppoa (ja hauskaa) oheislukemistoa Hamburger, Henry & Richards, Dana: Logic and Language Models for Computer Science. Prentice Hall 2002. Kinber, Em & Smith, Carl: Theory of Computing. A Gentle Introduction. Prentice Hall 2001. Hofstadter, Douglas R.: Gödel, Esser, Bach: An Eternal Golden Braid. Vintage Books, New York, 1989. 19