Kierros 10: Laskennallisesti vaativampia ongelmia

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

Laskennan vaativuus ja NP-täydelliset ongelmat

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

Algoritmit 2. Luento 13 Ti Timo Männikkö

SAT-ongelman rajoitetut muodot

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:

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

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

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

6. Approksimointialgoritmit

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

Sisältö. ICS-C2000 Tietojenkäsittelyteoria. Kertausta edellisistä kerroista...

ICS-C2000 Tietojenkäsittelyteoria

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

Algoritmit 1. Luento 1 Ti Timo Männikkö

Algoritmi on periaatteellisella tasolla seuraava:

Algoritmit 2. Luento 13 Ti Timo Männikkö

Johdatus logiikkaan I Harjoitus 4 Vihjeet

Algoritmit 2. Luento 14 To Timo Männikkö

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

Algoritmit 1. Luento 2 Ke Timo Männikkö

Joonas Haapala Ohjaaja: DI Heikki Puustinen Valvoja: Prof. Kai Virtanen

Algoritmit 2. Luento 14 Ke Timo Männikkö

isomeerejä yhteensä yhdeksän kappaletta.

T kevät 2007 Laskennallisen logiikan jatkokurssi Laskuharjoitus 1 Ratkaisut

Muita vaativuusluokkia

Olkoon seuraavaksi G 2 sellainen tasan n solmua sisältävä suunnattu verkko,

Algoritmit 2. Luento 11 Ti Timo Männikkö

Taulumenetelmä modaalilogiikalle K

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 8. syyskuuta 2016

811312A Tietorakenteet ja algoritmit V Verkkojen algoritmeja Osa 2 : Kruskalin ja Dijkstran algoritmit

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

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

Matematiikan tukikurssi

Laskennan mallit (syksy 2008) 2. kurssikoe , ratkaisuja

v 8 v 9 v 5 C v 3 v 4

= 5! 2 2!3! = = 10. Edelleen tästä joukosta voidaan valita kolme särmää yhteensä = 10! 3 3!7! = = 120

Lineaariset kongruenssiyhtälöryhmät

Algoritmit 1. Luento 13 Ti Timo Männikkö

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Onko algoritmiselle ongelmalle löydetty ratkaisualgoritmi riittävän hyvä?

P? = NP Kysymys ratkaisun keksimisestä ja sen tarkistamisesta

verkkojen G ja H välinen isomorfismi. Nyt kuvaus f on bijektio, joka säilyttää kyseisissä verkoissa esiintyvät särmät, joten pari

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

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

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

Datatähti 2019 loppu

TIEA341 Funktio-ohjelmointi 1, kevät 2008

Algoritmit 1. Luento 13 Ma Timo Männikkö

Rekursiiviset palautukset [HMU 9.3.1]

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

TKT20005 Laskennan mallit (syksy 2018) Kurssikoe, malliratkaisut

HY / Matematiikan ja tilastotieteen laitos Johdatus logiikkaan I, syksy 2018 Harjoitus 4 Ratkaisuehdotukset

Verkon värittämistä hajautetuilla algoritmeilla

Näytetään nyt relaatioon liittyvien ekvivalenssiluokkien olevan verkon G lohkojen särmäjoukkoja. Olkoon siis f verkon G jokin särmä.

Johdatus graafiteoriaan

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

j(j 1) = n(n2 1) 3 + (k + 1)k = (k + 1)(k2 k + 3k) 3 = (k + 1)(k2 + 2k + 1 1)

Algoritmit 2. Luento 7 Ti Timo Männikkö

T Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 7 (opetusmoniste, kappaleet )

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)

HY / Matematiikan ja tilastotieteen laitos Johdatus logiikkaan I, syksy 2018 Harjoitus 5 Ratkaisuehdotukset

Turingin koneen laajennuksia

Matematiikan tukikurssi, kurssikerta 3

MS-A0402 Diskreetin matematiikan perusteet

Reaalilukuvälit, leikkaus ja unioni (1/2)

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Rajoittamattomat kieliopit (Unrestricted Grammars)

Lisää pysähtymisaiheisia ongelmia

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

Graafin 3-värittyvyyden tutkinta T Graafiteoria, projektityö (eksakti algoritmi), kevät 2005

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

5. Rajoitelaskenta (Constraint Satisfaction)

Luonnollisen päättelyn luotettavuus

Johdatus diskreettiin matematiikkaan Harjoitus 5, Ratkaise rekursioyhtälö

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

on rekursiivisesti numeroituva, mutta ei rekursiivinen.

10. Painotetut graafit

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

Polynomiset palautukset ja NP-täydellisyys

Yhtälöryhmä matriisimuodossa. MS-A0004/A0006 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5.

3. Laskennan vaativuusteoriaa

T Kevät 2005 Logiikka tietotekniikassa: erityiskysymyksiä I Kertausta Ratkaisut

Ellipsoidimenetelmä. Samuli Leppänen Kokonaislukuoptimointi. S ysteemianalyysin Laboratorio

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

NP-täydellisyys. Joonas Järvenpää ja Topi Talvitie. Laskennan teorian opintopiiri HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Algoritmit 2. Luento 12 Ke Timo Männikkö

Lineaarikombinaatio, lineaarinen riippuvuus/riippumattomuus

1. Primitiivirekursiiviset funktiot muodostetaan kolmesta perusfunktiosta käyttäen. succ(n) = n + 1

7 Vapaus. 7.1 Vapauden määritelmä

on Abelin ryhmä kertolaskun suhteen. Tämän joukon alkioiden lukumäärää merkitään

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

Kierros 6: Dynaaminen ohjelmointi ja ahneet algoritmit

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

Todistusmenetelmiä Miksi pitää todistaa?

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

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.

Aalto-yliopisto Perustieteiden korkeakoulu Tietotekniikan koulutusohjelma. Kaariväritysongelma. Kandidaatintyö. 29. huhtikuuta Sami J.

Transkriptio:

Kierros 10: Laskennallisesti vaativampia ongelmia Tommi Junttila Aalto University School of Science Department of Computer Science CS-A1140 Data Structures and Algorithms Autumn 2017 Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 1 / 48

Materiaalia: Nämä kalvot Kappale 34 kirjasta Introduction to Algorithms, 3rd ed. (online via Aalto lib) näiden kalvojen abstraktiotasolla formaalien kielten määritelmiä ei vaadita eikä niitä todistuksia, jotka eivät ole mukana kalvoilla Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 2 / 48

Tähän mennessä tarkastellut algoritmit ovat olleet suhteellisen tehokkaita, pahimman tapauksen ajoaikojen ollessa muotoa O(log 2 n), O(n), O(n log 2 n), O(( E + V )log 2 V ) jne Mutta on olemassa paljon (käytännön kannalta relevantteja) ongelmia, joiden ratkaisemiseksi ei tunneta yhtään aina tehokkaasti toimivaa algoritmia Itse asiassa on myös ongelmia, joita ei voida todistetusti ratkaista nykyisillä tietokoneilla Tässä ratkaista tietokoneella tarkoittaa on olemassa algoritmi, joka kaikilla syötteillä antaa oikeellisen ratkaisun Todistus ja lisää aiheesta kurssilla CS-C2150 Theoretical Computer Science (5op, periodit III-IV) Esimerkki Ei ole olemassa algoritmia, joka pystyy aina p = 3x 2 y 4 + 1 päättelemään, onko annetulla. p = x 3 + y 3 + z 3 29 monen muuttujan polynomilla p = x 3 + y 3 + z 3 33 kokonaislukunollakohtia. def hasintroots(p):.... return res false. true (x = 3, y = 1, z = 1)? Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 3 / 48

Tällä kierroksella tarkastellaan yhtä keskeistä luokkaa laskennallisesti vaativia ongelmia, niin sanottuja NP-täydellisä ongelmia, ja kuvataan joitain menetelmiä, joiden avulla tällaisia ongelmia voidaan käytännössä useimmiten ratkaista Formaaleja matemaattisia määritelmiä ja todistuksia ei käydä läpi, niistä (ja aiheesta muutenkin) lisää kursseilla CS-C2150 Theoretical Computer Science ja CS-E4530 Computational Complexity Theory Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 4 / 48

Laskennalliset ongelmat Tässä yhteydessä laskennallinen ongelma koostuu 1 kuvauksesta, minkälaisia syötteet voivat olla, ja 2 kysymyksestä, mihin algoritmin tulisi vastata saatuaan syötteen Määritelmä: ALKULUKU-ongelma (engl. PRIMALITY problem) Syöte: Positiivinen kokonaisluku x. Kysymys: Onko x alkuluku? x = 4831. x = 5899 def isprime(x):.... return res true. false Ongelma on ratkeava (engl. decidable, computable, tai recursive) jos on olemassa algoritmi, joka pystyy vastaamaan kysymykseen oikein kaikilla mahdollisilla syötteillä ALKULUKU-ongelma on ratkeava. Miksi? Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 5 / 48

Päätösongelma (engl. decision problem) on laskennallinen ongelma, jossa vastaus kysymykseen on aina joko ei tai kyllä Määritelmä: OSAJOUKKOSUMMA-ongelma (engl. SUBSET-SUM problem) Syöte: Joukko S kokonaislukuja ja kohdearvo t. Kysymys: Onko olemassa osajoukkoa S S siten, että s S s = t? Funktio-ongelmassa (engl. function problem) vastaus on joko ei kun ratkaisua ei ole syötteelle, tai jokin ratkaisu, kun sellainen tai sellaisia on olemassa. Määritelmä: OSAJOUKKOSUMMA-ongelma (funktio-ongelmaversio) Syöte: Joukko S kokonaislukuja ja kohdearvo t. Kysymys: Palauta jokin osajoukko S S siten, että s S s = t, jos sellainen on olemassa. Matemaattisesti jokainen päätösongelma voidaan kuvata joukkona syötemerkkijonoja, joilla vastaus on kyllä. Näihin tarkempiin määritelmiin tutustutaan kursseilla Theoretical computer science ja Computational Complexity Theory. Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 6 / 48

Optimointiongelmassa (engl. optimization problem) tulee löytää jokin optimikriteerin täyttävä ratkaisu, jos sellaisia on olemassa Määritelmä: MINIMAALINEN VIRITTÄVÄ PUU -ongelma (engl. MINIMUM SPANNING TREE problem) Syöte: Yhtenäinen ja painotettu suuntaamaton verkko G. Kysymys: Etsi jokin verkon minimaalinen virittävä puu. Optimointiongelmille on yleensä vastaava päätösongelmaversio missä annetaan jokin hyvyysraja ratkaisulle (onko olemassa vähintään näin hyvää ratkaisua?) Määritelmä: MINIMAALINEN VIRITTÄVÄ PUU (päätösongelmaversio) Syöte: Yhtenäinen ja painotettu suuntaamaton verkko G sekä kokonaisluku k. Kysymys: Onko verkolla virittävää puuta, jonka paino on korkeintaan k? Optimointiongelma on laskennallisesti vähintään yhtä vaikea kuin tällainen vastaava päätösongelma koska optimaalinen ratkaisu vastaa suoraan myös päätösongelman kysymykseen Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 7 / 48

Laskennallisen vaativuuden teoria mahdollistaa ratkeavien ongelmien luokittelun tarkempiin vaativuusluokkiin (engl. complexity class) Tarkastellaan selvyyden vuoksi vain päätösongelmia P ongelmat, jotka voidaan ratkaista polynomisessa ajassa ( aina tehokkaasti) jollakin algoritmilla NP ongelmat, joiden kyllä -syötteille on olemassa helposti tarkastettava tiivis sertifikaatti (eli ongelmat, jotka voidaan ratkaista polynomisessa ajassa epädeterministisellä koneella) PSPACE ongelmat, jotka voidaan ratkaista algoritmilla, joka käyttää korkeintaan polynomisen määrän lisämuistia (ajoaika mahdollisesti eksponentiaalinen) recursively enumerable recursive EXPTIME PSPACE NP P EXPTIME ongelmat, jotka voidaan ratkaista eksponentiaalisessa ajassa ja monia muita luokkia... Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 8 / 48

Polynomisessa ajassa ratkeavat ongelmat Ongelma on polynomisessa ajassa ratkeava jos on olemassa jokin algoritmi, joka 1 ratkaisee ongelman eli vastaa oikein jokaisella syötteellä, ja 2 toimii pahimmassa tapauksessa polynomisessa ajassa O(n c ), missä c on jokin vakio ja n on syötteen pituus bitteinä/tavuina. Tällaisia ongelmia pidetään tehokkaasti ratkeavina (engl. tractable) Englanninkielinen termi ongelmille, jotka eivät ole tehokkaasti ratkeavia, on intractable Polynomisessa ajassa ratkeavien päätösongemien luokkaa merkitään lyhenteellä P Huomaa, että myös esimerkiksi pahimmassa tapauksessa ajassa Θ(n 100 ) toimiva algoritmi on polynomisessa ajassa toimiva algoritmi. Tällaisia algoritmeja voidaan tuskin pitää tehokkaina. Mutta tällaiset ajoajat eivät ole kovin yleisiä ja yleensä jonkin polynomisessa ajassa toimivan algoritmin löytyminen ongelmalle johtaa myöhemmin melko alhaisen asteluvun polynomin ajassa toimivan algoritmin löytymiseen. Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 9 / 48

Järjestämisalgoritmien kierroksen perusteella tiedetään, kuinka n-alkioinen taulukko voidaan järjestää ajassa O(n log 2 n) Niinpä seuraava funktio-ongelma voidaan ratkaista polynomisessa ajassa: Määritelmä: MEDIAANIN ETSINTÄ -ongelma (engl. MEDIAN OF AN ARRAY problem) Syöte: Taulukko kokonaislukuja. Kysymys: Mikä on taulukon lukujen mediaani ( ei jos taulukko on tyhjä)?... ja vastaava päätösongelma alla kuuluu luokkaan P: Määritelmä: MEDIAANIN ETSINTÄ -ongelma (päätösongelmaversio) Syöte: Taulukko kokonaislukuja ja kokonaisluku k. Kysymys: Onko taulukon lukujen mediaani vähintään k? Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 10 / 48

Verkkoalgoritmikierroksen perusteella tiedetään, kuinka voidaan tehokkaasti etsiä jokin lyhin polku verkon kahden solmun välillä Täten seuraava ongelma kuuluu luokkaan P: Määritelmä: LYHIN POLKU -ongelma (engl. SHORTEST PATH problem) Syöte: suuntaamaton verkko G = (V,E), solmut v,v V, ja kokonaisluku k. Kysymys: Onko solmusta v solmuun v polkua, jonka pituus on korkeintaan k? Mutta ei tiedetä yhtään polynomisessa ajassa toimivaa algoritmia, joka ratkaisisi vastaavan pisimmän yksinkertaisen polun ongelman. Ei siis tiedetä, kuuluuko seuraava ongelma luokkaan P: Määritelmä: PISIN YKSINKERTAINEN POLKU -ongelma (engl. LONGEST SIMPLE PATH problem) Syöte: suuntaamaton verkko G = (V,E), solmut v,v V, ja kokonaisluku k. Kysymys: Onko solmusta v solmuun v yksinkertaista polkua, jonka pituus on vähintään k? Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 11 / 48

Vastaavasti tunnetaan algoritmeja, jotka löytävät minimaalisen virittävän puun tehokkaasti. Seuraava ongelma on siis luokassa P: Määritelmä: MINIMAALINEN VIRITTÄVÄ PUU Syöte: Yhtenäinen painotettu suuntaamaton verkko G = (V, E, w) ja kokonaisluku k. Kysymys: Onko verkolle virittävää puuta, jonka paino on korkeintaan k? Mutta jos kaikkien solmujen ei vaadita esiintyvän puussa vaan vain tietyn annetun osajoukon, niin ei tunneta algoritmia, joka ratkaisisi kaikki mahdolliset syötteet tehokkaasti. Eli ei tiedetä, kuuluuko seuraava ongelma luokkaan P: Määritelmä: MINIMAALINEN STEINER-PUU Syöte: Yhtenäinen painotettu suuntaamaton verkko G = (V, E, w), solmujoukko S V, ja kokonaisluku k. Kysymys: Onko verkolla aliverkkona puuta, joka sisältää kaikki solmut joukossa S ja jonka paino on korkeintaan k? Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 12 / 48

Luokan NP ongelmista Kaksi ekvivalenttia tapaa määritellä luokan NP muodostavat päätösongelmat: 1 Ongelmat, jotka voidaan ratkaista polynomisessa ajassa käyttäen epädeterministisiä (Turingin) koneita. Epädeterministen koneiden laskenta voi (rekursiivisesti) haaraantua yhdessä askeleessa kahdeksi samanaikaiseksi laskennaksi. Kone löytää ratkaisun jos mikä tahansa näistä laskennan haaroista löytää ratkaisun. Tällaisia koneita ei voi käytännössä toteuttaa mutta ne ovat tärkeä käsitteellinen työkalu; lisää epädeterministisyydestä Theoretical computer science -kurssilla. 2 Ongelmat, joiden jokaiselle kyllä -syötteelle, ja vain näille, on olemassa vähintään yksi sertifikaatti, joka on pieni (eli polynomisen kokoinen syötteen kokoon nähden) ja helposti tarkastettavissa (eli polynomisessa ajassa syötteen kokoon nähden) Mutta tällaisten sertifikaattien löytäminen, tai niiden olemassaolemattomuuden todistaminen, ei välttämättä ole helppoa (eli tehtävissä polynomisessa ajassa). Käytetään tällä kurssilla jatkossa jälkimmäistä määritelmää Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 13 / 48

Osajoukkosumma -ongelma Tarkastellaan jälleen Ohjelmointi 2 -kurssilta tuttua ongelmaa Määritelmä: OSAJOUKKOSUMMA -ongelma Syöte: Joukko S kokonaislukuja ja tavoitearvo t. Kysymys: Onko olemassa osajoukkoa S S siten, että s S s = t? Jokaiselle syötteelle (S, t), jolle vastaus on kyllä, sertifikaattina voi toimia sellainen joukko S kokonaislukuja, että (i) S S ja (ii) v S = t. Joukon S (bittiesityksen) koko on selvästikin aina polynominen suhteessa syötteen (S, t) (bittiesityksen) kokoon Voidaan tehokkaasti tarkastaa, päteekö sekä (i) S S, että (ii) v S = t Täten ongelma OSAJOUKKOSUMMA kuuluu luokkaan NP. Esimerkki Syötteelle (S,t), S = {2,7,14,49,98,343,686,2409,2793,16808,17206,117705,117993} ja t = 138457, sertifikaatti on S = {2,7,98,343,686,2409,17206,117705}. Syötteelle (S,t), missä S = {2,7,14,49} ja t = 15, ei ole olemassa sertifikaattia ja vastaus on ei. Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 14 / 48

Lauselogiikan toteutuvuus Lauselogiikan kaavat muodostetaan Boolen muuttujista ja käyttämällä negaatiota ( ei ), disjunktiota ( tai ) ja konjunktiota ( ja ) Totuusjakelu (engl. truth assignment) τ kaavalle φ on kuvaus kaavan muuttujilta vars(φ) Boolen arvoille B = {false, true}. Jakelu toteuttaa (engl. satisfies) kaavan jos kaava evaluoituu todeksi jakelun muuttujille antamilla arvoilla Kaava on toteutuva (engl. satisfiable) jos on olemassa jokin sen toteuttava totuusjakelu; muutoin se on toteutumaton (engl. unsatisfiable) Esimerkki Kaava ((a b c) (a b c) ( a b c) ( a b c)) (a b c) on toteutuva koska totuusjakelu τ = {a true,b false,c true} (ja 2 muutakin) evaluoi kaavan todeksi. Kaava (a) ( a b) ( b c) ( c a) on toteutumaton. Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 15 / 48

Määritelmä: LAUSELOGIIKAN TOTEUTUVUUS eli SAT Syöte: lauselogiikan kaava. Kysymys: onko kaava toteutuva? Ongelma on selvästikin luokassa NP koska mitä tahansa toteuttavaa totuusjakelua voidaan käyttää sertifikaattina: sen koko on lineaarinen kaavan muuttujien määrään verrattuna ja kaavan evaluointi jakelussa on helppoa Teoreettisen ja käytännönkin käsittelyn helpottamiseksi käytetään usein tietyn normaalimuodon mukaisia kaavoja: Literaali on joko muuttuja x i tai sen negaatio x i Klausuuli on disjunktio (l 1... l k ) joukosta literaaleja Kaava on 3-CNF -normaalimuodossa (CNF = konjunktiivinen normaalimuoto, (engl. conjunctive normal form)) jos se on konjunktio klausuuleista, jokaisessa klausuulissa on 3 literaalia ja nämä eivät viittaa samoihin muuttujiin. Esimerkiksi kaava (x 1 x 2 x 4 ) ( x 1 x 2 x 3 ) (x 2 x 3 x 4 ) on 3-CNF -muodossa. Määritelmä: 3-CNF-SAT Syöte: 3-CNF -muodossa oleva kaava. Kysymys: Onko kaava toteutuva? Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 16 / 48

Joitain muita ongelmia luokassa NP Määritelmä: KAUPPAMATKUSTAJA-ongelma (engl. TRAVELLING SALESPERSON) Syöte: Suuntaamaton painotettu verkko G ja kokonaisluku k. Kysymys: Onko verkossa yksinkertaista sykliä, joka sisältää kaikki solmut ja jonka paino on korkeintaan k? Määritelmä: YLEISTETYT SUDOKUT Syöte: n n-kokoinen osittain täytetty Sudoku-ruudukko (n = k 2 jollekin kokonaisluvulle k 1). Kysymys: Voidaanko ruudukko täyttää sääntöjen mukaisesti? Lähde: Univ. Waterloo 10 16 12 15 4 5 1 11 14 13 5 10 16 12 11 1 9 7 4 11 8 13 12 5 10 14 11 9 3 4 9 7 6 15 1 13 4 11 16 5 2 15 9 16 3 7 6 2 9 14 13 1 2 16 8 6 16 7 9 8 5 14 1 2 2 6 4 13 3 5 14 8 1 7 4 16 14 1 12 7 11 14 5 7 9 2 10 6 11 13 5 12 2 3 15 10 Ja tuhansia muita... Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 17 / 48

P vastaan NP Polynomisessa ajassa ratkeaville ongelmille, eli luokan P ongelmille, syöte itsessään voi toimia sertifikaattina koska kyllä vastauksen tarkastaminen siitä onnistuu polynomisessa ajassa Eli P NP... mutta ei tiedetä, päteekö P = NP Toisin sanoen: jos sertifikaatti ( ratkaisu) on pienehkö ja helposti tarkastettavissa, voidaanko se myös löytää helposti? Useimmat tutkijat uskovat, että P NP mutta kukaan ei ole onnistunut vielä todistamaan tätä Tiedetään tehokkaita algoritmeja useisiin ongelmiin kuten MINIMAALINEN VIRITTÄVÄ PUU, LYHIN POLKU,... mutta ei tunneta tehokkaita algoritmeja ongelmiin OSAJOUKKOSUMMA, 3-CNF-SAT eikä tuhansiin muihin (käytännön kannalta relevantteihin) ongelmiin luokassa NP vaikka erittäin monet erittäin älykkäät ihmiset ovat yrittäneet löytää sellaisia vuosikymmenten ajan Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 18 / 48

NP-täydelliset ongelmat Ongelma A luokassa NP on NP-täydellinen (engl. NP-complete) jos jokainen toinen ongelma B luokassa NP voidaan palauttaa (engl. reduce) siihen käyttämällä polynomisessa ajassa tapahtuvaa palautusta Instance of problem B in NP x Efficient algorithm for B polynomial time reduction R Instance of NP-complete problem A R(x) efficient algorithm for A solution Ominaisuus: Vastaus syötteeseen x on kyllä ongelmassa B vastaus syötteeseen R(x) on kyllä ongelmassa A Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 19 / 48

NP-täydelliset ongelmat Ongelma A luokassa NP on NP-täydellinen (engl. NP-complete) jos jokainen toinen ongelma B luokassa NP voidaan palauttaa (engl. reduce) siihen käyttämällä polynomisessa ajassa tapahtuvaa palautusta Instance of problem B in NP x Efficient algorithm for B polynomial time reduction R Instance of NP-complete problem A R(x) efficient algorithm for A solution Ominaisuus: Vastaus syötteeseen x on kyllä ongelmassa B vastaus syötteeseen R(x) on kyllä ongelmassa A Jos NP-täydellinen ongelma A voidaan ratkaista polynomisessa ajassa, niin silloin kaikki ongelma luokassa NP voidaan NP-täydelliset ongelmat ovat kaikkein vaikeimpia luokassa NP! Tällä hetkellä ei tiedetä onko NP-täydellisille ongelmille olemassa tehokkaita algoritmeja Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 19 / 48

Cook Levin -teoreema Teoreema (Cook 1971, Levin 1973) SAT (ja 3- CNF - SAT) on NP-ta ydellinen ongelma. Stephen Cook (1939 ) ACM Turing Award 1982 Leonid Levin (1948 ) Knuth Award in 2012 Richard Karp (1935 ) ACM Turing Award 1982 Karp [1972] esitteli ta ma n ja lkeen 21 muuta NP-ta ydellista ongelmaa Ta ma n ja lkeen tuhansia ongelmia on todistettu NP-ta ydellisiksi Esimerkiksi K AUPPAMATKUSTAJA, Y LEISTETYT SUDOKUT jne ovat NP-ta ydellisia ongelmia Esim. kirja Garey ja Johnson, 1979: Computers and Intractability: A Guide to the Theory of NP-Completeness Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 20 / 48

Kuinka todistaa ongelma NP-täydelliseksi? Annettuna: uusi ongelma C, jota epäillään NP-täydelliseksi. NP-täydellisyyden todistaminen: 1 osoita, että C kuuluu luokkaan NP, 2 valitse jokin jo NP-täydelliseksi todistettu ongelma A ja 3 palauta A ongelmaan C Instance of problem B in NP x Efficient algorithm for B Instance of NP-complete problem A x polynomial time reduction S Instance of your new problem C S(x) solution Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 21 / 48

Kuinka todistaa ongelma NP-täydelliseksi? Annettuna: uusi ongelma C, jota epäillään NP-täydelliseksi. NP-täydellisyyden todistaminen: 1 osoita, että C kuuluu luokkaan NP, 2 valitse jokin jo NP-täydelliseksi todistettu ongelma A ja 3 palauta A ongelmaan C Instance of problem B in NP x Efficient algorithm for B polynomial time reduction R Instance of NP-complete problem A R(x) polynomial time reduction S Instance of your new problem C S(R(x)) solution Polynomisessa ajassa tapahtuva palautukset yhdistyvät: B palautuu myös ongelmaan C! ongelma C on osoitettu NP-täydelliseksi Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 21 / 48

Kuinka todistaa ongelma NP-täydelliseksi? Annettuna: uusi ongelma C, jota epäillään NP-täydelliseksi. NP-täydellisyyden todistaminen: 1 osoita, että C kuuluu luokkaan NP, 2 valitse jokin jo NP-täydelliseksi todistettu ongelma A ja 3 palauta A ongelmaan C Instance of problem B in NP x Efficient algorithm for B polynomial time reduction R Instance of NP-complete problem A R(x) polynomial time reduction S Instance of your new problem C S(R(x)) efficient algorithm for C solution Polynomisessa ajassa tapahtuva palautukset yhdistyvät: B palautuu myös ongelmaan C! ongelma C on osoitettu NP-täydelliseksi jos ongelma C voidaan ratkaista polynomisessa ajassa, niin silloin myös A ja kaikki muutkin ongelmat luokassa NP voidaan Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 21 / 48

NP-täydellisyyden osoittaminen: esimerkki Määritelmä: TUNTEMATTOMIEN REKRYTOINTI Syöte: Sosiaalinen verkosto ja positiivinen kokonaisluku K, missä verkosto muodostuu (i) äärellisestä joukosta opiskelijoita ja (ii) symmetrisestä tuntee relaatiosta opiskelijoiden välillä. Kysymys: onko mahdollista rekrytoida kokeeseen K opiskelijaa niin, ettei kukaan opiskelija tunne toista ennestään? Inez Mary John Aino kun K = 3? Pete Pave Ida Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 22 / 48

NP-täydellisyyden osoittaminen: esimerkki Määritelmä: TUNTEMATTOMIEN REKRYTOINTI Syöte: Sosiaalinen verkosto ja positiivinen kokonaisluku K, missä verkosto muodostuu (i) äärellisestä joukosta opiskelijoita ja (ii) symmetrisestä tuntee relaatiosta opiskelijoiden välillä. Kysymys: onko mahdollista rekrytoida kokeeseen K opiskelijaa niin, ettei kukaan opiskelija tunne toista ennestään? Inez Mary John Aino kun K = 3? Pete Pave Ida Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 22 / 48

NP-täydellisyyden osoittaminen: esimerkki Määritelmä: TUNTEMATTOMIEN REKRYTOINTI Syöte: Sosiaalinen verkosto ja positiivinen kokonaisluku K, missä verkosto muodostuu (i) äärellisestä joukosta opiskelijoita ja (ii) symmetrisestä tuntee relaatiosta opiskelijoiden välillä. Kysymys: onko mahdollista rekrytoida kokeeseen K opiskelijaa niin, ettei kukaan opiskelija tunne toista ennestään? Inez Mary John Aino kun K = 3? Pete Pave Ida Määritelmä: RIIPPUMATON JOUKKO Syöte: Suuntaamaton verkko G = (V,E) ja kokonaisluku K. Kysymys: Onko verkossa riippumatonta joukkoa I V s.e. I = K? a a Riippumaton joukko on solmujoukko, jossa yhdenkään parin välillä ei ole kaarta. Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 22 / 48

Teoreema RIIPPUMATON JOUKKO on NP-täydellinen. Todistus: Idea esimerkin avulla Palautetaan ongelmasta 3-CNF-SAT. 3-CNF kaava φ: (x 1 x 2 x 3 ) ( x 1 x 2 x 3 ) ( x 1 x 2 x 3 ) Vastaava verkko G ja K = 3 (klausuulien määrä): x 2 x 1 x 3 x 2 x 1 x 3 x 2 x 1 x 3 Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 23 / 48

Teoreema RIIPPUMATON JOUKKO on NP-täydellinen. Todistus: Idea esimerkin avulla Palautetaan ongelmasta 3-CNF-SAT. 3-CNF kaava φ: (x 1 x 2 x 3 ) ( x 1 x 2 x 3 ) ( x 1 x 2 x 3 ) Vastaava verkko G ja K = 3 (klausuulien määrä): x 2 x 1 x 3 x 2 x 1 x 3 x 2 x 1 x 3 1 Jos φ on toteutuva, niin G sisältää riippumattoman joukon kokoa K Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 23 / 48

Teoreema RIIPPUMATON JOUKKO on NP-täydellinen. Todistus: Idea esimerkin avulla Palautetaan ongelmasta 3-CNF-SAT. 3-CNF kaava φ: (x 1 x 2 x 3 ) ( x 1 x 2 x 3 ) ( x 1 x 2 x 3 ) Vastaava verkko G ja K = 3 (klausuulien määrä): x 2 x 1 x 3 x 2 x 1 x 3 x 2 x 1 x 3 1 Jos φ on toteutuva, niin G sisältää riippumattoman joukon kokoa K 2 Jos G sisältää riippumattoman joukon kokoa K, niin φ on toteutuva Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 23 / 48

Teoreema RIIPPUMATON JOUKKO on NP-täydellinen. Todistus: Idea esimerkin avulla Palautetaan ongelmasta 3-CNF-SAT. 3-CNF kaava φ: (x 1 x 2 x 3 ) ( x 1 x 2 x 3 ) ( x 1 x 2 x 3 ) Vastaava verkko G ja K = 3 (klausuulien määrä): x 2 x 1 x 3 x 2 x 1 x 3 x 2 x 1 x 3 1 Jos φ on toteutuva, niin G sisältää riippumattoman joukon kokoa K 2 Jos G sisältää riippumattoman joukon kokoa K, niin φ on toteutuva φ on toteutuva jos ja vain jos G sisältää riippumattoman joukon kokoa K Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 23 / 48

Teoreema RIIPPUMATON JOUKKO on NP-täydellinen. Todistus: Idea esimerkin avulla Palautetaan ongelmasta 3-CNF-SAT. 3-CNF kaava φ: (x 1 x 2 x 3 ) ( x 1 x 2 x 3 ) ( x 1 x 2 x 3 ) Vastaava verkko G ja K = 3 (klausuulien määrä): x 2 x 1 x 3 x 2 x 1 x 3 x 2 x 1 x 3 1 Jos φ on toteutuva, niin G sisältää riippumattoman joukon kokoa K 2 Jos G sisältää riippumattoman joukon kokoa K, niin φ on toteutuva φ on toteutuva jos ja vain jos G sisältää riippumattoman joukon kokoa K Jos voitaisiin ratkaista ongelma RIIPPUMATON JOUKKO aina tehokkaasti, niin voitaisiin ratkaista myös 3-CNF-SAT ja kaikki muutkin ongelmat luokassa NP Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 23 / 48

Esimerkki: OSAJOUKKOSUMMA-ongelman NP-täydellisyys OSAJOUKKOSUMMA on luokassa NP koska voidaan helposti tarkastaa annetulle kokonaislukujoukkolle (i) onko se syötteen kokonaislukujoukon osajoukko ja (ii) summautuuko se tavoitearvoon t Voidaan näyttää ongelman OSAJOUKKOSUMMA NP-täydellisyys palauttamalla ongelma 3-CNF-SAT siihen Annettuna siis 3-CNF-kaava φ = C 1... C m Tehdään (polynomisessa ajassa) ongelman OSAJOUKKOSUMMA syöte (S φ,t φ ) siten, että φ on toteutuva jos ja vain jos S φ sisältää osajoukon, joka summautuu arvoon t φ Täten jos voitaisiin ratkaista OSAJOUKKOSUMMA polynomisessa ajassa, niin voitaisiin ratkaista polynomisessa ajassa myös 3-CNF-SAT ja kaikki muut ongelmat luokassa NP Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 24 / 48

Palautus ongelmasta 3-CNF-SAT ongelmaan OSAJOUKKOSUMMA: Annettuna 3-CNF-kaava φ = C 1... C m, missä jokainen klausuuli C i siis sisältää 3 literaalia, jotka eivät viittaa samoihin muuttujiin Olkoot kaavassa φ esiintyvät muuttujat x 1,...,x n Luvut joukossa S φ ja t φ ovat 10-kantaisia lukuja, joissa on n + m numeroa muodossa ˆx 1...ˆx n Ĉ 1...Ĉ m Jokaista muuttujaa x i kohden S φ sisältää kaksi lukua: v i missä numero ˆx i = 1 ja numero Ĉ j = 1 jokaiselle klausuulille C j, joka sisältää literaalin x i ; muut numerot ovat 0 v i missä numero ˆx i = 1 ja numero Ĉ j = 1 jokaiselle klausuulille C j, joka sisältää literaalin x i ; muut numerot ovat 0 Jokaiselle klausuulille C j, joukko S φ sisältää kaksi lukua: s j missä numero Ĉ j = 1 ja muut numerot ovat 0 s j missä numero Ĉ j = 2 ja muut numerot ovat 0 Tavoitearvossa t φ numero ˆx i = 1 jokaiselle muuttujalle x i numero Ĉ j = 4 jokaiselle klasuulille C j Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 25 / 48

Esimerkki Olkoot φ = C 1 C 2 C 3 C 4, missä C 1 = (x 1 x 2 x 3 ) C 2 = (x 1 x 2 x 3 ) C 3 = ( x 1 x 2 x 3 ) C 4 = ( x 1 x 2 x 3 ) Huom: totuusjakelu toteuttaa kaavan jos ja vain jos se asettaa parillisen määrän muuttujista x 1, x 2 ja x 3 arvoon true OSAJOUKKOSUMMA -ongelman syöte (S φ,t φ ) on kuvattu oikealla ˆx 1 ˆx 2 ˆx 3 Ĉ 1 Ĉ 2 Ĉ 3 Ĉ 4 v 1 = 1 0 0 1 1 0 0 v 1 = 1 0 0 0 0 1 1 v 2 = 0 1 0 1 0 1 0 v 2 = 0 1 0 0 1 0 1 v 3 = 0 0 1 0 1 1 0 v 3 = 0 0 1 1 0 0 1 s 1 = 0 0 0 1 0 0 0 s 1 = 0 0 0 2 0 0 0 s 2 = 0 0 0 0 1 0 0 s 2 = 0 0 0 0 2 0 0 s 3 = 0 0 0 0 0 1 0 s 3 = 0 0 0 0 0 2 0 s 4 = 0 0 0 0 0 0 1 s 4 = 0 0 0 0 0 0 2 t = 1 1 1 4 4 4 4 Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 26 / 48

Esimerkki Olkoot φ = C 1 C 2 C 3 C 4, missä C 1 = (x 1 x 2 x 3 ) C 2 = (x 1 x 2 x 3 ) C 3 = ( x 1 x 2 x 3 ) C 4 = ( x 1 x 2 x 3 ) Huom: totuusjakelu toteuttaa kaavan jos ja vain jos se asettaa parillisen määrän muuttujista x 1, x 2 ja x 3 arvoon true OSAJOUKKOSUMMA -ongelman syöte (S φ,t φ ) on kuvattu oikealla Sininen osajoukko S S φ oikealla on sertifikaatti syötteelle (S φ,t φ ). Tätä vastaava totuusjakelu τ = {x 1 false,x 2 true,x 3 true} toteuttaa kaavan φ. ˆx 1 ˆx 2 ˆx 3 Ĉ 1 Ĉ 2 Ĉ 3 Ĉ 4 v 1 = 1 0 0 1 1 0 0 v 1 = 1 0 0 0 0 1 1 v 2 = 0 1 0 1 0 1 0 v 2 = 0 1 0 0 1 0 1 v 3 = 0 0 1 0 1 1 0 v 3 = 0 0 1 1 0 0 1 s 1 = 0 0 0 1 0 0 0 s 1 = 0 0 0 2 0 0 0 s 2 = 0 0 0 0 1 0 0 s 2 = 0 0 0 0 2 0 0 s 3 = 0 0 0 0 0 1 0 s 3 = 0 0 0 0 0 2 0 s 4 = 0 0 0 0 0 0 1 s 4 = 0 0 0 0 0 0 2 t = 1 1 1 4 4 4 4 Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 26 / 48

Palautuksen oikeellisuus voidaan argumentoida seuraavasti. Oletetaan, että jakelu τ toteuttaa kaavan φ. Voidaan tehdä vastaava osajoukko S S φ, joka summautuu arvoon t φ, seuraavasti: Käydään läpi jokainen muuttuja x i : Jos τ(x i ) = true, niin sisällytä luku v i joukkoon S. Muutoin sisällytä luku v i joukkoon S. Tässä vaiheessa numero Ĉ j summassa on 1, 2 tai 3. Jokaiselle klasuulille C j, sisällytä löysennysluku (engl. slack value) s j, s j tai molemmat niin, että numeron Ĉ j summassa tulee arvoon 4. Todistus toiseen suuntaan: oletetaan, että osajoukko S S φ summautuu arvoon t φ. Rakennetaan vastaava kaavan φ toteuttava totuusjakelu τ seuraavasti. Havaitaan ensin, että S sisältää joko luvun v i tai v i (muttei molempia) jokaiselle muuttujalle x i koska numero ˆx i = 1 tavoitearvossa t φ Jos v i S, niin otetaan τ(x i ) = true, muutoin τ(x i ) = false Nyt vähintään yksi literaali jokaisessa klausuulissa C j evaluoituu todeksi jakelussa τ koska löysennysluvut s j ja s j yksinään voivat saada numeron Ĉ j summassa korkeintaan arvoon 3 eikä arvoon 4 kuten t φ vaatisi. Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 27 / 48

NP-täydellisyys: merkitys Voidaanko NP-täydellisiä ongelmia ratkaista polynomisessa ajassa? Yksi seitsemästä 1M$ Clay Mathematics Institute Millenium Prize -ongelmasta (näistä 6 edelleen avoinna) There is nothing wrong in trying to prove that an NP-complete problem can be solved in polynomial time. The point is that without an NP-completeness proof one would be trying the same thing without knowing it! (muokattu kirjasta C. Papadimitriou: Computational complexity) Mitä tehdä kun ongelma on NP-täydellinen? Kehitetään peräytyvään hakuun pohjautuvia algoritmeja, joissa on hyvä heuristiikka ja karsintamenetelmiä Tarkastellaan vain käytännössä esiintyviä rajoitetumman muotoisia syötteitä Kehitetään virheen sallivia approksimointialgoritmeja Käytetään epätäydellisiä lokaalin haun menetelmiä Käytetään olemassa olevia, pitkälle kehitettyjä ohjelmistoja... Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 28 / 48

Kattava hakeminen Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 29 / 48

Ehkäpä suoraviivaisin tapa ratkaista laskennallisesti vaativia ongelmia on käydä kattavasti läpi kaikki ratkaisumahdollisuudet Tämä tehdään tyypillisesti peräytyvällä hakemisella (engl. backtracking search), joka yrittää muodostaa ratkaisun laajentamalla osittaisratkaisuja Luonnollisesti, jos P NP, niin tämän lähestymistavan ajoaika tulee olemaan pahimmassa tapauksessa ylipolynominen, yleensä vähintään eksponentiaalinen, NP-täydellisille ja näitä vaikeammille ongelmille Mutta joillekin syötteille tällainen haku voi hyvinkin nopeasti löytää ratkaisun tai päätellä, että ratkaisuja ei ole olemassa Hakualgoritmia voidaan usein tehostaa lisäämällä siihen karsintamenetelmiä (engl. pruning techniques), joiden avulla voidaan päätellä aikaisemmin, että nykyistä osittaisratkaisua ei voida laajentaa täydeksi ratkaisuksi Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 30 / 48

OSAJOUKKOSUMMA-ongelma Ohjelmointi 2-kurssilta: yksinkertainen peräytyvän hakemisen algoritmi OSAJOUKKOSUMMA-ongelmalle: def solve ( set : Set [ I n t ], t a r g e t : I n t ) : Option [ Set [ I n t ] ] = { def i n n e r ( s : Set [ I n t ], t : I n t ) : Option [ Set [ I n t ] ] = { i f ( t == 0) return Some( Set [ I n t ] ( ) ) else i f ( s. isempty ) return None val e = s. head val r e s t = s e / / Search f o r a s o l u t i o n w i t h o u t e val solnotin = inner ( rest, t ) i f ( solnotin. nonempty ) return solnotin / / Search f o r a s o l u t i o n with e val s o l I n = i n n e r ( rest, t e ) i f ( s o l I n. nonempty ) return Some( s o l I n. get + e ) / / No s o l u t i o n found here, backtrack return None } i n n e r ( set, t a r g e t ) } Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 31 / 48

Esimerkki Mahdollinen kutsupuu kun S = { 9, 3,7,12} ja t = 10. inner({-9,-3,7,12}, 10) omit -9 take -9 inner({-3,7,12}, 10) inner({-3,7,12}, 19) omit -3 take -3 omit -3 take -3 inner({7,12}, 10) inner({7,12}, 13) inner({7,12}, 19) inner({7,12}, 22) omit 7 take 7 omit 7 take 7 omit 7 take 7 inner({12}, 10) inner({12}, 3) inner({12}, 13) inner({12}, 6) inner({12}, 19) inner({12}, 12) omit 12take 12 omit 12 take 12 omit 12 take 12 omit 12 take 12 omit 12 take 12 omit 12 take 12 inner({}, 10) inner({}, -2) inner({}, 3) inner({}, -9) inner({}, 13) inner({}, 1) inner({}, 6) inner({}, -6) inner({}, 19) inner({}, 7) inner({}, 12) inner({}, 0) Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 32 / 48

Hakualgoritmia voidaan tehostaa lisäämällä siihen karsintasääntö, joka huomaa, onko nykyinen tavoitearvo t liian suuri tai pieni suhteessa nykyisessä joukossa s esiintyvien lukujen maksimaaliseen tai minimaaliseen summaan def solve ( set : Set [ I n t ], t a r g e t : I n t ) : Option [ Set [ I n t ] ] = { def i n n e r ( s : Set [ I n t ], t : I n t ) : Option [ Set [ I n t ] ] = { i f ( t == 0) return Some( Set [ I n t ] ( ) ) else i f ( s. isempty ) return None else i f ( s. f i l t e r ( > 0). sum < t s. f i l t e r ( < 0). sum > t ) / / The p o s i t i v e ( negative ) number cannot add up ( down ) to t return None val e = s. head val r e s t = s e / / Search f o r a s o l u t i o n w i t h o u t e val solnotin = inner ( rest, t ) i f ( solnotin. nonempty ) return solnotin / / Search f o r a s o l u t i o n with e val s o l I n = i n n e r ( rest, t e ) i f ( s o l I n. nonempty ) return Some( s o l I n. get + e ) / / No s o l u t i o n found here, backtrack return None } i n n e r ( set, t a r g e t ) } Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 33 / 48

Esimerkki Mahdollinen kutsupuu kun S = { 9, 3,7,12} ja t = 10. inner({-9,-3,7,12}, 10) omit -9 take -9 inner({-3,7,12}, 10) inner({-3,7,12}, 19) omit -3 take -3 omit -3 take -3 inner({7,12}, 10) inner({7,12}, 13) inner({7,12}, 19) inner({7,12}, 22) omit 7 take 7 omit 7 take 7 omit 7 take 7 inner({12}, 10) inner({12}, 3) inner({12}, 13) inner({12}, 6) inner({12}, 19) inner({12}, 12) omit 12take 12 omit 12 take 12 omit 12 take 12 omit 12 take 12 inner({}, 10) inner({}, -2) inner({}, 3) inner({}, -9) inner({}, 6) inner({}, -6) inner({}, 12) inner({}, 0) Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 34 / 48

Erikoistapaukset Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 35 / 48

Joskus laskennallinen ongelma voi täydessä laajuudessaan olla vaikea ratkaista mutta ne syötteet, joita tulee käytännössä vastaan, ovatkin jollain tavalla rajoitetumpia erikoistapauksia Tällaisissa tapauksissa voi olla mahdollista kehittää tehokas algoritmi näille syötteille Teknisesti algoritmi ei välttämättä enää ratkaise samaa ongelmaa, vaan ongelman jonka syötteet ovat alkuperäisen ongelman syötteiden osajoukko Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 36 / 48

OSAJOUKKOSUMMA-ongelma pienehköillä arvoilla OSAJOUKKOSUMMA-ongelman tapauksessa on kohtuullisen helppoa muodostaa dynaamiseen ohjelmointiin (kierros 6) perustuva algoritmi, joka toimii erittäin tehokkaasti silloin, kun ongelmassa esiintyvät luvut ovat pienehköjä Käytetään edellisen, peräytyvään hakuun pohjautuvan, algoritminkin perustana olevaa rekursiivista määritelmää. sss-rec(s, t) evaluoituu todeksi jos ja vain jos joukolla S on arvoon t summautuva osajoukko: sss-rec(s,t) = true jos t = 0 sss-rec(s,t) = false jos S = /0 ja t 0 sss-rec(s,t) = true jos sss-rec(s \ {e},t) = true tai sss-rec(s \ {e},t e) = true jollekin luvulle e S Käyttäen osatulosten tallentamista taulukoihin, voidaan toteuttaa dynaamisen ohjelmoinnin algoritmi, jonka pahimman tapauksen ajoaika on O( S ( s S,s>0 s s S,s<0 s)) ja lisämuistin tarve luokkaa O( s S,s>0 s s S,s<0 s) Konkreettisen ratkaisun muodostaminen on myös melko suoraviivaista Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 37 / 48

Algoritmin luonnos: Otetaan tyhjä taulukko a. Vuoronperään jokaiselle luvulle x S, kirjoitetaan yhdellä kerralla a[y + x] = x jokaiselle y, jolle a[y] on jo määritelty, ja a[x] = x. Eli yksi luku kerrallaan lisätään taulukkoon kaikki ne osasummat, jotka saadaan luvusta joko itsekseen tai summaamalla johonkin aiemmista luvuista saatuun summaan. Alkioon a[s] kirjoitettava luku kertoo, mikä oli summan s viimeisin lisätty luku ja mahdollistaa vastauksen konstruoinnin. Esimerkki Tarkastellaan ongelmaa kun syötteen joukko on S = {2,7,14,49,98,343,686,2409,2793,16808,17206,117705,117993}. Taulukon alkuosa on 1 2 7 8 9 14 15 16 21 22 23... 49 50 51 56 57 58 2 7 7 14 14 14 14 49 49 49 49 Taulukosta nähdään suoraan esimerkiksi, että on olemassa osajoukko S S jolle s S = 58 ja että tällainen osajoukko saadaan alkioista a[58] = 49, a[58 49] = a[9] = 7 ja a[9 7] = a[2] = 2. Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 38 / 48

Onko edellä tehty dynaamiseen ohjelmointiin perustuva algoritmi polynomisen ajan algoritmi NP-täydelliselle ongelmalle OSAJOUKKOSUMMA? Ei ole: ongelmassa syötteen koko on syötteen bittiesityksen koko summan s S,s>0 s s S,s<0 s arvo, ja siten algoritmin ajoaika, voi olla eksponentiaalisen suuri syötteen kokoon nähden Tarkastellaan esimerkkinä lukuja, joita muodostettiin kun palautettiin 3-CNF-SAT-ongelman syötteitä OSAJOUKKOSUMMA-summan syötteiksi: Kun 3-CNF-SAT-ongelman kaavassa on n muuttujaa ja m klausuulia, niin muodostetuissa luvuissa on n + m numeroa. Lukujen arvot ovat siis kokoluokassa 10 n+m eli ylipolynomisen suuria suhteessa 3-CNF-kaavan bittiesityksen kokoon O(m log 2 n). Huom: jos tämä dynaamisen ohjelmoinnin algoritmi toteutettaisiin kuvausten (HashMap tms) avulla taulukoiden sijaan, se toimisi hyvin myös sellaisille syötteille, joissa (i) luvut voisivat olla todella isoja mutta (ii) luvuista muodostettavien erilaisten summien lukumäärä olisi pienehkö Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 39 / 48

Palauttaminen toiseen ongelmaan Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 40 / 48

Joillekin NP-täydellisille ja vaativammille ongelmille on tehty erittäin pitkälle kehitettyjä ja useilla syötteillä tehokkaita ratkaisinohjelmistoja: lauselogiikan toteutuvuus: MiniSat ja monia muita lineaarinen kokonaislukuoptimointi (engl. integer linear programming, ILP): lp solve ja muita toteutuvuus teorioiden suhteen (engl. satisfiability modulo theories): Z3 ja muita... Täten jos voidaan palauttaa tarkasteltava ongelma B johonkin yllämainituista ongelmista A, niin voi olla mahdollista saada aikaan monilla syötteillä tehokkaasti toimiva ratkaisumenetelmä ongelmalle B ilman, että tarvitsee itse ohjelmoida mahdollisesti hyvinkin monimutkaista hakumenetelmää Instance of problem B in NP x Efficient algorithm for B polynomial time reduction R Instance of NP-complete problem A R(x) efficient algorithm for A solution Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 41 / 48

Esimerkki: Sudokujen ratkaiseminen lauselogiikan toteutuvuuden avulla Käytetään palauttamismenetelmää ratkaisemaan Sudoku-ongelmia Käytetään lauselogiikan toteutuvuusongelman ratkaisevia hyvin kehittyneitä ohjelmia, ns. SAT-solvereita Eli kun on annettu n n-alkion osittain täytetty Sudoku-ruudukko, niin muodostetaan lauselogiikan kaava φ siten, että Sudoku-ruudukolla on ratkaisu jos ja vain jos kaava on toteutuva, ja kaavan toteuttavasta totuusjakelusta saadaan helposti ratkaisu Sudoku-ruudukolle Kaavassa kytetään Boolen muuttujia x r,c,v jokaiselle riville r = 1,...,n, sarakkeelle c = 1,...,n ja arvolle v = 1,...,n Intuitio: jos x r,c,v = true, niin ruudukon rivin r ja sarakkeen c arvo on v Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 42 / 48

Konjunktiivisen normaalimuodon kaava φ = C 1 C 2 C 3 C 4 C 5 C 6 rakennetaan klausuulijoukoista, jotka rajoittavat toteuttavia totuusjakeluita vastaamaan Sudoku-ratkaisuilta vaadittavaa muotoa: Jokaisella alkiolla on ainakin yksi arvo: C 1 = 1 r n,1 c n(x r,c,1 x r,c,2... x r,c,n ) Jokaisella alkiolla on korkeintaan yksi arvo: C 2 = 1 r n,1 c n,1 v<v n( x r,c,v x r,c,v ) Jokainen rivi sisältää kaikki arvot: C 3 = 1 r n,1 v n(x r,1,v x r,2,v... x r,n,v ) Jokainen sarake sisältää kaikki arvot: C 4 = 1 c n,1 v n(x 1,c,v x 2,c,v... x n,c,v ) Jokainen pieni ruudukko sisältää kaikki arvot: C 5 = 1 r n,1 c n,1 v n ( (r,c) B n (r,c ) x r,c,v) missä B n (r,c ) = {(r n + i,c n + j) 0 i < n,0 j < n} Ruudukossa jo annetut arvot H pysyvät samoina: C 6 = (r,c,v) H(x r,c,v ) Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 43 / 48

Muodostettu kaava sisältää H yksikköklausuulia, n 2 n(n 1) binääriklausuulia ja 2 3n 2 klausuulia, joissa on n literaalia Kaavan koko on siis polynominen suhteessa arvoon n Sudoku-ruudukko: 1 4 2 5 4 7 8 3 1 9 3 4 2 5 1 8 6 Kaava: (x 1,1,1 x 1,1,2... x 1,1,9 )...... (x 9,9,1 x 9,9,2... x 9,9,9 ) ( x 1,1,1 x 1,1,2 )... ( x 9,9,8 x 9,9,9 ) (x 1,1,1 x 1,2,1... x 1,9,1 )...... (x 9,1,9 x 9,2,9... x 9,9,9 ) (x 1,1,1 x 2,1,1... x 9,1,1 )...... (x 1,9,9 x 2,9,9... x 9,9,9 ) (x 1,1,1 x 1,2,1 x 1,3,1 x 2,1,1... x 3,3,1 )...... (x 7,7,9 x 7,8,9 x 7,9,9 x 8,7,9... x 9,9,9 ) (x 1,8,1 ) (x 2,1,4 ) (x 3,2,2 )... (x 9,6,6 ) Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 44 / 48

Huom. Tämän lähestymistavan toteutus, käyttäen Java-pohjaista Sat4j toteutuvuustarkistinta, sisältyy ohjelmointitehtävän coloring with SAT Eclipse-pakettiin Kannattaa kokeilla, kuinka sen suorituskyky vertautuu Ohjelmointi 2-kurssilla tekemääsi, peräytyvään hakuun pohjautuvaan, Sudoku-ratkaisimeen Tällaista lähestymistapaa, jossa jonkin toisen ongelman syötteet kuvataan lauselogiikan toteutuvuuden, tai jonkin muun vastaavan rajoiteongelman toteutuvuuden (engl. constraint satisfaction), avulla, kutsutaan rajoiteohjelmoinniksi (engl. constraint programming). Se on eräs deklaratiivisen ohjelmoinnin (engl. declarative programming) muoto. Deklaratiivisessa ohjelmoinnissa ohjelma kuvaa, millaisia ratkaisujen tulisi olla (eikä kuinka ne löydetään), ja tämän jälkeen ratkaisin etsii ratkaisun (tai kertoo, ettei sellaisia ole). Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 45 / 48

Loppusanat Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 46 / 48

Joitain mielenkiintoisia kursseja keväällä 2018: CS-E4000 Seminar in Computer Science: Algorithms (periodit III-IV), organisoijana Parinya Chalermsook CS-E4800 Artificial Intelligence (periodit III-IV) CS-E4580 Programming parallel computers (periodi V) CS-E3220 Declarative programming (periodi V) Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 47 / 48

Kiitoksia syksystä 2017! Toivottavasti ohjelmointitehtävät ovat olleet opettavaisia Kiitoksia myös kaikesta palautteesta! En ole kaikkeen pystynyt antamaan henkilökohtaista vastapalautetta A+-järjestelmässä mutta kaikki palautteet luetaan ja otetaan huomioon. Kurssin suorittaminen hyväksytysti: ohjelmointitehtävien läpäiseminen ja tentin läpäiseminen Tentit ovat joulukuussa 2017 ja helmikuussa 2018 Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 48 / 48

Kiitoksia syksystä 2017! Toivottavasti ohjelmointitehtävät ovat olleet opettavaisia Kiitoksia myös kaikesta palautteesta! En ole kaikkeen pystynyt antamaan henkilökohtaista vastapalautetta A+-järjestelmässä mutta kaikki palautteet luetaan ja otetaan huomioon. Kurssin suorittaminen hyväksytysti: ohjelmointitehtävien läpäiseminen ja tentin läpäiseminen Tentit ovat joulukuussa 2017 ja helmikuussa 2018 Menestyksekästä loppusyksyä ja tenttikautta, hyvää joulua ja algoritmirikasta uutta vuotta 2018! Tommi Junttila (Aalto University) Kierros 10 CS-A1140 / Autumn 2017 48 / 48