Algoritmit 2. Luento 10 To Timo Männikkö

Samankaltaiset tiedostot
Algoritmit 2. Luento 11 Ti Timo Männikkö

Algoritmit 2. Luento 10 To Timo Männikkö

Algoritmit 2. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 11 Ti Timo Männikkö

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 12 Ke Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

Algoritmit 1. Luento 13 Ma Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 2. Luento 4 To Timo Männikkö

Algoritmit 2. Luento 4 Ke Timo Männikkö

Algoritmit 2. Luento 6 Ke Timo Männikkö

v 1 v 2 v 3 v 4 d lapsisolmua d 1 avainta lapsen v i alipuun avaimet k i 1 ja k i k 0 =, k d = Sisäsolmuissa vähint. yksi avain vähint.

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 1. Luento 12 Ke Timo Männikkö

Algoritmit 2. Luento 12 To Timo Männikkö

Algoritmit 1. Luento 13 Ti Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 8 To Timo Männikkö

Minimax ja alfa-beta-karsinta

Algoritmit 2. Luento 13 Ti Timo Männikkö

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

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut

Algoritmit 2. Luento 14 To Timo Männikkö

Algoritmit 1. Luento 11 Ti Timo Männikkö

Algoritmit 2. Luento 9 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

Algoritmit 1. Luento 9 Ti Timo Männikkö

Datatähti 2019 loppu

JOHDATUS TEKOÄLYYN TEEMU ROOS

Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö

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.

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

JOHDATUS TEKOÄLYYN TEEMU ROOS

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Verkon värittämistä hajautetuilla algoritmeilla

Miten käydä läpi puun alkiot (traversal)?

Ohjelmoinnin perusteet Y Python

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A Tietorakenteet ja algoritmit, , Harjoitus 6, Ratkaisu

Algoritmit 2. Luento 3 Ti Timo Männikkö

58131 Tietorakenteet (kevät 2009) Harjoitus 11, ratkaisuja (Topi Musto)

Algoritmit 1. Luento 7 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

T Syksy 2002 Tietojenkäsittelyteorian perusteet Harjoitus 8 Demonstraatiotehtävien ratkaisut

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe ratkaisuja (Jyrki Kivinen)

Algoritmit 2. Luento 3 Ti Timo Männikkö

Äärellisten mallien teoria

S BAB ABA A aas bba B bbs c

Kuljetustehtävä. Materiaalia kuljetetaan m:stä lähtöpaikasta n:ään tarvepaikkaan. Kuljetuskustannukset lähtöpaikasta i tarvepaikkaan j ovat c ij

Ohjelmoinnin perusteet Y Python

Malliratkaisut Demot

Algoritmit 2. Demot Timo Männikkö

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

Tietorakenteet, laskuharjoitus 10, ratkaisuja. 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

Algoritmit 1. Luento 14 Ke Timo Männikkö

Harjoitus 6 ( )

JOHDATUS TEKOÄLYYN TEEMU ROOS

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Ohjelmoinnin perusteet Y Python

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003

811312A Tietorakenteet ja algoritmit, , Harjoitus 6, Ratkaisu

Tehtävä 10 : 1. Tehtävä 10 : 2

Harjoitus 6 ( )

Numeeriset menetelmät

Johdatus tekoälyyn (T. Roos) Kurssikoe

Jäsennysaiheesta lisää Täydentäviä muistiinpanoja TIEA241 Automaatit ja kieliopit, syksy 2016

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

DMP / Kevät 2016 / Mallit Harjoitus 6 / viikko 13 / alkuviikko

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

Luku 8. Aluekyselyt. 8.1 Summataulukko

Tehtävä 2. Osoita, että seuraavat luvut ovat algebrallisia etsimällä jokin kokonaislukukertoiminen yhtälö jonka ne toteuttavat.

58131 Tietorakenteet (kevät 2009) Harjoitus 9, ratkaisuja (Antti Laaksonen)

Algoritmit 1. Luento 6 Ke Timo Männikkö

Ohjelmoinnin peruskurssi Y1

Binäärihaun vertailujärjestys

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

3. Hakupuut. B-puu on hakupuun laji, joka sopii mm. tietokantasovelluksiin, joissa rakenne on talletettu kiintolevylle eikä keskusmuistiin.

6.4. Järjestyssuhteet

Ohjelmoinnin perusteet Y Python

Transkriptio:

Algoritmit 2 Luento 10 To 19.4.2018 Timo Männikkö

Luento 10 Peruutusmenetelmä Osajoukon summa Verkon 3-väritys Pelipuut Pelipuun läpikäynti Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 2/34

Algoritmien suunnittelu Raa an voiman käyttö: Tutkitaan kaikki mahdolliset ratkaisuvaihtoehdot Nopeuttaminen: Rajataan pois vaihtoehdot, joiden joukosta ei voi enää löytyä parempaa ratkaisua Peruutus: Täydennetään ratkaisua tekemällä valintoja Perutaan huonoiksi osoittautuneita valintoja Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 3/34

Peruutusmenetelmä Aloitetaan tyhjästä osittaisvastauksesta Yritetään täydentää osittaisvastausta vaiheittain komponentti kerrallaan Jos täydentäminen voidaan tehdä rikkomatta tehtävän rajoituksia, se suoritetaan Jos saadaan täydellinen vastaus, voidaan lopettaa Jos täydentämistä ei voida tehdä, perutaan viimeksi tehty täydennys ja yritetään toista komponenttia Jos komponentteja ei ole jäljellä, peruutetaan edelleen Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 4/34

Peruutusmenetelmä vastaus peruuttava(tapaus x) { if (x on täydellinen vastaus) return x; else { for (kaikilla täydennyksillä e[i]) { y = peruuttava(x + täydennys e[i]); if (y on täydellinen vastaus) return y; } return x ilman täydennystä; } } Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 5/34

Osajoukon summa Joukko A = {a 1, a 2,..., a n }, missä a i :t positiivisia kokonaislukuja Annettu positiivinen kokonaisluku d Tehtävä: Etsi sellainen joukon A osajoukko S, jonka alkioiden summa on täsmälleen d (jos olemassa) Joukossa n alkiota Osajoukkoja 2 n kpl (mukaan lukien tyhjä joukko ja joukko A itse) Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 6/34

Osajoukon summa Ratkaiseminen peruutusmenetelmällä: Järjestetään alkiot kasvavaan suuruusjärjestykseen: a 1 a 2 a n Valitaan alkioita ratkaisuun tässä järjestyksessä Pidetään yllä valittujen alkioiden summaa Vaiheessa i seuraava alkio a i joko valitaan mukaan (summa kasvaa vastaavasti) tai ei valita mukaan (summa ei muutu) (Jatkuu) Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 7/34

Osajoukon summa (Jatkuu) Ennen kuin jatketaan vaiheeseen i + 1, peruutetaan: Jos on edetty jo vaiheeseen i > n Jos summa jäisi alle d:n, vaikka kaikki jäljellä olevat alkiot valittaisiin mukaan Jos alkion a i valitseminen veisi summan yli d:n Jos alkion a i valitseminen antaisi summaksi tasan d: Ratkaisu on löytynyt Otetaan a i mukaan ratkaisuun ja palataan edelliseen vaiheeseen Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 8/34

Osajoukon summa osasumma(a, d, i, summa, n) { if (i > n) return false; if (summa + a[i] +... + a[n] < d) return false; if (summa + a[i] > d) return false; if (summa + a[i] == d) { lisätään alkio a[i] ratkaisuun; return true; } if (osasumma(a, d, i+1, summa+a[i], n)) { lisätään alkio a[i] ratkaisuun; return true; } else return osasumma(a, d, i+1, summa, n); } Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 9/34

Osajoukon summa Algoritmin ensimmäinen kutsu: osasumma(a, d, 1, 0, n) Algoritmi löytää halutunlaisen osajoukon, jos sellainen on olemassa Pahimmassa tapauksessa käydään läpi kaikki mahdolliset osajoukot Θ(2 n ) Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 10/34

Verkon 3-väritys Suuntaamaton verkko G = (N, E), solmujen joukko N, teiden joukko E Jokainen solmu väritetään Solmuilla i ja j oltava eri väri, jos on tie (i, j) Tehtävä: Selvitä, onko annetulle verkolle olemassa sallittu väritys, jossa on käytetty vain kolmea eri väriä Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 11/34

Verkon 3-väritys Verkon solmut 1, 2,..., n Solmun i väri c i (= 1, 2 tai 3) Verkon väritys {c 1, c 2,..., c n } Erilaisia värityksiä on 3 n kappaletta (sekä sallitut että ei-sallitut väritykset) Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 12/34

Verkon 3-väritys Ratkaisupuu: Juurisolmu vastaa osittaista väritystä, jossa verkon solmuille ei ole vielä asetettu mitään väriä Juurisolmulla on kolme lapsisolmua, jotka vastaavat osittaisia värityksiä, joissa verkon solmu 1 on väritetty Näillä on kullakin kolme lapsisolmua, jotka vastaavat osittaisia värityksiä, joissa myös verkon solmu 2 on väritetty Jne. Täydellisen ratkaisupuun alimmalla tasolla n on 3 n lehtisolmua, jotka kuvaavat koko verkon kaikkia mahdollisia värityksiä Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 13/34

Verkon 3-väritys Muodostetaan ratkaisupuuta solmu kerrallaan alkaen juurisolmusta Kun on lisätty uusi solmu puuhun, tarkastetaan vastaava verkon osittainen väritys Jos tämänhetkistä ratkaisupuun solmua vastaava väritys on sallittu ja on edetty johonkin lehtisolmuun saakka: Kaikki verkon solmut on väritetty ja koko verkon väritys sallittu Ratkaisu on löytynyt ja voidaan lopettaa (Jatkuu) Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 14/34

Verkon 3-väritys (Jatkuu) Jos tämänhetkistä ratkaisupuun solmua vastaava osittainen väritys on sallittu, mutta kaikkia verkon solmuja ei ole vielä väritetty: Generoidaan tämänhetkiselle solmulle puuhun uusi lapsisolmu ja siirrytään sinne = Väritetään numerojärjestyksessä seuraava verkon solmu ja jatketaan siitä eteenpäin (Jatkuu) Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 15/34

Verkon 3-väritys (Jatkuu) Jos tämänhetkistä ratkaisupuun solmua vastaava osittainen väritys ei ole sallittu, peruutetaan: Perutaan viimeksi tehty väritys ja väritetään sama verkon solmu uudestaan seuraavana vuorossa olevalla värillä = Ratkaisupuussa palataan edelliselle tasolle ja generoidaan uusi lapsisolmu, josta jatketaan Jos kaikkia värejä on jo yritetty, palataan puussa edelliselle tasolle ja perutaan myös siellä viimeksi tehty väritys Tarvittaessa peruutetaan uudestaan Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 16/34

Verkon 3-väritys väritys(k) { for each (v = 1, 2, 3) { c[k] = v; if (taulukon c väritys sallittu) { if (kaikki solmut väritetty) { löytyi = true; lopetetaan; } else väritys(k+1); } } return; } Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 17/34

Verkon 3-väritys // Algoritmin aloitus for each (k = 1, 2,..., n) c[k] = 0; // mikään solmu ei väritetty löytyi = false; väritys(1); // solmut väritetään // numerojärjestyksessä // Löytyikö ratkaisu? if (löytyi on true) // Löydetty väritys on taulukossa c else // Ei sallittua väritystä Pahimmassa tapauksessa muodostetaan koko ratkaisupuu Θ(3 n ) Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 18/34

Esimerkki A C B E D 1 1 1 1 2 2 Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 19/34

Esimerkki jatkuu 1 1 1 1 1 1 2 3 2 3 2 1 3 1 3 1 3 2 2 1 3 1 2 Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 20/34

Esimerkki: Ratkaisupuu A: B: ei 2 C: 1 D: ei ei 3 E: ei ei ei 1 A: 1 B: ei 2 C: ei ei 3 D: 1 E: ei ei 3 Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 21/34

Pelipuut Kaksi pelaajaa, x ja y Pelaajat tekevät vuorotellen siirtoja (valintoja) Pelipuu: Kukin solmu kuvaa yhtä pelitilannetta Siirto tarkoittaa siirtymistä solmusta johonkin sen lapsisolmuun Juurisolmu kuvaa pelin alkutilannetta Lehtisolmut kuvaavat pelin mahdollisia lopputilanteita Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 22/34

Esimerkki X X O X X O O X X O O X X O O X X O O X X O X O X X O X X O O O X O X X O O O X X O X X O O X O X X X O X X O X X O O O O X O X O X X O X O 3 X O X X O X O X X O O X X O X O X O X O X X O X O O O X X O X O X X O O X X O X O Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 23/34

Pelipuut Voittoarvo (payoff-arvo): Arvo, joka kuvaa solmun hyvyyttä pelaajan x kannalta Esimerkiksi payoff(t) +1, jos x:llä voittostrategia t:ssä 1, jos y:llä voittostrategia t:ssä = 0, jos kummallakaan ei ole voittostrategiaa t:ssä Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 24/34

Pelipuut Lopputilanteille voittoarvot on helppo asettaa Muiden solmujen voittoarvot voidaan määrittää lapsisolmujen avulla (minimax-proseduuri): Jos vuorossa on x, on voittoarvo lapsisolmujen voittoarvojen maksimi Jos vuorossa on y, on voittoarvo lapsisolmujen voittoarvojen minimi Kaikkien solmujen voittoarvot voidaan määrittää käymällä läpi koko puu lehtisolmuista juurisolmuun eli käymällä solmut läpi jälkijärjestyksessä Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 25/34

Esimerkki +1 1 0 1 0 +1 +1 0 0 +1 0 1 1 0 Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 26/34

Pelipuut Vähänkin mutkikkaammassa pelissä pelipuu on liian suuri, jotta kaikki voittoarvot voitaisiin määrittää lopputilanteista alkaen Käytännössä sovelletaan minimax-proseduuria k siirtoa eteenpäin ja arvioidaan pelitilanteiden hyvyyttä jollain heuristisella evaluointifunktiolla eval(t) Suuri arvo on hyvä pelaajan x kannalta, pieni arvo on hyvä pelaajan y kannalta Merkitään: x on MAX-pelaaja y on MIN-pelaaja Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 27/34

Esimerkki 2 1 3 4 3 4 2 2 3 MAX MIN 3 1 3 2 2 1 3 4 3 4 2 2 3 MAX MIN Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 28/34

Pelipuun läpikäynti payoff(pelitilanne, siirrot, pelaaja) { if (siirrot == 0 tai pelitilanne lopputilanne) return eval(pelitilanne); if (pelaaja == MAX) { arvo = -ääretön; for (kaikilla pelitilanteen seuraajilla s) arvo = max(arvo, payoff(s, siirrot-1, MIN)); return arvo; } else { // pelaaja == MIN arvo = +ääretön; for (kaikilla pelitilanteen seuraajilla s) arvo = min(arvo, payoff(s, siirrot-1, MAX)); return arvo; } } Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 29/34

Läpikäynnin tehostaminen α-β-karsinta: Kaikissa solmuissa ylläpidetään väliaikaista voittoarvoa MAX-pelaajalle väliaikainen voittoarvo on todellisen arvon alaraja (alkutilanteessa ) MIN-pelaajalle väliaikainen voittoarvo on todellisen arvon yläraja (alkutilanteessa + ) Vertaamalla solmun väliaikaista voittoarvoa sen vanhemman väliaikaiseen voittoarvoon tiedetään, kannattaako lapsisolmujen läpikäyntiä jatkaa Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 30/34

Läpikäynnin tehostaminen MAX-pelaajalle α = suurin tähän mennessä laskettu voittoarvo MIN-pelaajalle β = pienin tähän mennessä laskettu voittoarvo Solmu on MAX-solmu: Jos α kasvaa suuremmaksi kuin sen vanhemman β, ei lapsisolmujen läpikäyntiä kannata jatkaa Solmu on MIN-solmu: Jos β menee pienemmäksi kuin sen vanhemman α, ei lapsisolmujen läpikäyntiä kannata jatkaa Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 31/34

Pelipuun läpikäynti: α-β-karsinta payoff_ab(pelitilanne, siirrot, pelaaja, a, b) { if (siirrot == 0 tai pelitilanne lopputilanne) return eval(pelitilanne); if (pelaaja == MAX) { arvo = -ääretön; for (kaikilla pelitilanteen seuraajilla s) { arvo = max(arvo, payoff_ab(s,siirrot-1,min,a,b)); a = max(a, arvo); if (a >= b) break; } return arvo; } else { // pelaaja == MIN arvo = +ääretön; for (kaikilla pelitilanteen seuraajilla s) { arvo = min(arvo, payoff_ab(s,siirrot-1,max,a,b)); b = min(b, arvo); if (b <= a) break; } return arvo; } } Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 32/34

Esimerkki α 3 β 1 β 3 β 2 2 1 3 4 3 4 2 2 3 MAX MIN 2 1 1 2 1 3 1 MAX MIN Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 33/34

Esimerkki jatkuu 4 1 1 3 3 2 1 3 1 3 4 3 4 MAX MIN 1 1 3 3 2 2 1 3 3 3 4 3 4 2 MAX MIN Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 34/34