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

Samankaltaiset tiedostot
Algoritmit 1. Luento 13 Ti Timo Männikkö

Olkoon S(n) kutsun merge-sort(a, p, q) tilavaativuus kun p q + 1 = n. Oletetaan merge toteutetuksi vakiotyötilassa (ei-triviaalia mutta mahdollista).

Algoritmit 1. Luento 13 Ma Timo Männikkö

Algoritmi on periaatteellisella tasolla seuraava:

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

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

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

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

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

Algoritmien suunnittelu ja analyysi (kevät 2004) 1. välikoe, ratkaisuja

(p j b (i, j) + p i b (j, i)) (p j b (i, j) + p i (1 b (i, j)) p i. tähän. Palaamme sanakirjaongelmaan vielä tasoitetun analyysin yhteydessä.

Harjoitus 1 ( )

Malliratkaisut Demot

58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 2, , vastauksia

7.4 Sormenjälkitekniikka

10. Painotetut graafit

Luku 8. Aluekyselyt. 8.1 Summataulukko

Algoritmit 1. Luento 14 Ke Timo Männikkö

Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö

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

Tietorakenteet, laskuharjoitus 7, ratkaisuja

58131 Tietorakenteet ja algoritmit (syksy 2015) Toinen välikoe, malliratkaisut

ImageRecognition toteutus

Harjoitus 1 ( )

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

13 Lyhimmät painotetut polut

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

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

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Algoritmit 2. Luento 14 Ke Timo Männikkö

Matriisit. Määritelmä 1 Reaaliluvuista a ij, missä i = 1,..., k ja j = 1,..., n, muodostettua kaaviota a 11 a 12 a 1n a 21 a 22 a 2n A =

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

Nopea kertolasku, Karatsuban algoritmi

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

Johdatus graafiteoriaan

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

811312A Tietorakenteet ja algoritmit, VI Algoritmien suunnitteluparadigmoja

Algoritmit 2. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 11 Ti Timo Männikkö

Konsensusongelma hajautetuissa järjestelmissä. Niko Välimäki Hajautetut algoritmit -seminaari

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

Oikeasta tosi-epätosi -väittämästä saa pisteen, ja hyvästä perustelusta toisen.

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

1 + b t (i, j). Olkoon b t (i, j) todennäköisyys, että B t (i, j) = 1. Siis operaation access(j) odotusarvoinen kustannus ajanhetkellä t olisi.

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

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

ja λ 2 = 2x 1r 0 x 2 + 2x 1r 0 x 2

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö

1 Kannat ja kannanvaihto

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

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

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Kokonaislukuoptimointi

Eräs keskeinen algoritmien suunnittelutekniikka on. Palauta ongelma johonkin tunnettuun verkko-ongelmaan.

1. Esitä rekursiivinen määritelmä lukujonolle

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))

Algoritmit 2. Luento 13 Ti Timo Männikkö

Dynaaminen ohjelmointi ja vaikutuskaaviot

Johdatus verkkoteoriaan 4. luento

58131 Tietorakenteet ja algoritmit (syksy 2015)

Similaarisuus. Määritelmä. Huom.

9 Matriisit. 9.1 Matriisien laskutoimituksia

3 Lineaariset yhtälöryhmät ja Gaussin eliminointimenetelmä

3 Lineaariset yhtälöryhmät ja Gaussin eliminointimenetelmä

Kannan vektorit siis virittävät aliavaruuden, ja lisäksi kanta on vapaa. Lauseesta 7.6 saadaan seuraava hyvin käyttökelpoinen tulos:

Ominaisarvoon 4 liittyvät ominaisvektorit ovat yhtälön Ax = 4x eli yhtälöryhmän x 1 + 2x 2 + x 3 = 4x 1 3x 2 + x 3 = 4x 2 5x 2 x 3 = 4x 3.

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

AVL-puut. eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta

Pienin virittävä puu (minimum spanning tree)

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

Laskennan mallit (syksy 2010) Harjoitus 8, ratkaisuja

Algoritmit 2. Luento 9 Ti Timo Männikkö

Ominaisarvo ja ominaisvektori

Johdatus tekoälyn taustalla olevaan matematiikkaan

Algoritmit 2. Luento 2 To Timo Männikkö

Lyhin kahden solmun välinen polku

1 Rajoittamaton optimointi

Algoritmit 1. Luento 2 Ke Timo Männikkö

v 8 v 9 v 5 C v 3 v 4

isomeerejä yhteensä yhdeksän kappaletta.

MS-A0003/A0005 Matriisilaskenta Malliratkaisut 4 / vko 47

. Kun p = 1, jono suppenee raja-arvoon 1. Jos p = 2, jono hajaantuu. Jono suppenee siis lineaarisesti. Vastaavasti jonolle r k+1 = r k, suhde on r k+1

Matematiikassa ja muuallakin joudutaan usein tekemisiin sellaisten relaatioiden kanssa, joiden lakina on tietyn ominaisuuden samuus.

(1) refleksiivinen, (2) symmetrinen ja (3) transitiivinen.

Malliratkaisut Demot

Algoritmit 2. Luento 13 Ti Timo Männikkö

Martingaalit ja informaatioprosessit

Jaetun muistin muuntaminen viestin välitykseksi. 15. lokakuuta 2007

Numeeriset menetelmät

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Vapaus. Määritelmä. jos c 1 v 1 + c 2 v c k v k = 0 joillakin c 1,..., c k R, niin c 1 = 0, c 2 = 0,..., c k = 0.

Ei-yhteydettömät kielet [Sipser luku 2.3]

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9

Lineaarialgebra ja matriisilaskenta II Syksy 2009 Laskuharjoitus 1 ( ) Ratkaisuehdotuksia Vesa Ala-Mattila

MS-A0003/A0005 Matriisilaskenta Malliratkaisut 5 / vko 48

Algoritmit 1. Luento 12 Ti Timo Männikkö

Transkriptio:

Esimerkki otteluvoiton todennäköisyys A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Yksittäisessä pelissä A voittaa todennäköisyydellä p ja B todennäköisyydellä q = 1 p. Ottelutulokset ovat toisistaan riippumattomia. Millä todennäköisyydellä A voittaa sarjan? Olkoon P (i, j) todennäköisyys että A voittaa sarjan, kun lähdetään liikkeelle tilanteesta jossa A on jo voittanut n i peliä ja B voittanut n j peliä. (Toisin sanoen A tarvitsee vielä i voittoa ja B j voittoa.) Halutaan laskea P (n, n). Ilmeisesti pätee palautuskaava P (, j) = 1 j > P (i, ) = i > P (i, j) = pp (i 1, j) + qp (i, j 1) i >, j > Siis arvot P (i, j), missä i + j = k, voidaan laskea kun tunnetaan arvot P (i, j ), missä i + j = k 1. Taulukko P täytetään diagonaaleittain alkaen vasemmasta yläkulmasta. 137

. P (i, j) 1 2 3 4 5 6 7 j 1 1 1 1 1 1 1 1 2 3 4 5 6 7 i P (i 1, j) P (i, j 1) P (i, j) Algoritmin ensimmäinen versio: for k := 1 to n do P [, k] := 1 P [k, ] := for j := 1 to n do P [k j, j] := pp [k j 1, j] + qp [k j, j 1] for k := n + 1 to 2n do for j := k n to n do P [k j, j] := pp [k j 1, j] + qp [k j, j 1] return P [n, n]. Tässä siis tarkastellaan diagonaalia k = i + j, k = 1, 2, 3,.... Kun k > n, ei enää tarvita koko diagonaalia (ainoastaan arvot i, j n). 138

Muistinkäytön järkeistämiseksi merkitään ensin tilapäisesti diagonaalia k symbolilla D k ; siis Päivityssääntö D k [j] = P [k j, j]. P [k j, j] = pp [k j 1, j] + qp [k j, j 1] tulee muotoon D k j [j] = pd k 1 [j] + qd k 1 [j 1]. Asiaa sen kummemmin ajattelematta voidaan todeta että riittää pitää kerrallaan muistissa vektorit D k 1 ja D k, siis suunnilleen 2n eikä n 2 lukua. Lähemmin tarkastelemalla havaitaan, että yksi vektori D riittää: kun vektoriin D lasketaan arvot D k (j) lähtien suurista j, uudet arvot voidaan kirjoittaa vanhojen päälle, koska arvon D k (j) laskemiseen ei tarvita arvoja D k 1 (j ) missä j > j. Saadaan viimeistelty algoritmi for k := 1 to n do P [, k] := 1 P [k, ] := for j := n downto 1 do D[j] := pd[j] + qd[j 1] for k := n + 1 to 2n do for j := n downto k n do D[j] := pd[j] + qd[j 1] return D[n]. 139

Edellisissä esimerkeissä taulukointia käytettiin suoraviivaisesti rekursiivisen funktion laskemiseen. Mielenkiintoisempia ovat erilaiset optimointisovellukset, joihin nimi dynaaminen ohjelmointi viittaa. Esimerkki matriisitulon laskujärjestys. On laskettavana matriisitulo A 1... A n missä A i on p i q i -reaalilukumatriisi. Siis vaaditaan q i = p i+1, mutta muuten dimensiot voivat olla mielivaltaisia. Kun kerrotaan (naiivilla menetelmällä) r s-matriisi s t-matriisilla, suoritetaan rst kertolaskua ja tulos on r t-matriisi. Tarkastellaan esimerkkinä tulon ABC laskemista kun A on 1 1-matriisi, B on 1 5-matriisi ja C on 5 5-matriisi, Matriisitulo on liitännäinen, joten laskun tulos ei riipu siitä lasketaanko (AB)C vai A(BC). Laskenta-aika sen sijaan riippuu: (AB)C : 1 1 5 + 1 5 5 = 75 A(BC) : 1 5 5 + 1 1 5 = 75 Seuraavassa esitetään taulukointiin perustuva menetelmä optimaaliset laskujärjestyksen löytämiseksi. 14

Olkoon optimaalisessa järjestyksessä koko tulon viimeisenä laskettavaksi tuleva kertolasku (A 1... A k ) (A k+1... A n ). Siis kaikkiaan tarvittavien kertolaskujen lukumäärä on x + y + p 1 q k q n missä x ja y ovat tulojen A 1... A k ja A k+1... A n laskemiseen tarvittavien kertolaskujen määrät. Ongelmana on, että mikään ilmeinen tapa valita viimeisen operaation indeksi k jollain heuristiikalla suoraan lukuja (p i, q i ) tarkastelemalla ei tunnu toimivan. (Kokeile!) Toisaalta kaikkia mahdollisia laskujärjestyksiä ei voi yksitellen tutkia, koska niitä on yhtä ( monta kuin n-lehtisiä täydellisiä binaaripuita eli 1 2n 2 ) n n 1 (Catalanin luvut; HT). Olkoon m(i, j) pienin määrä kertolaskuja matriisitulon A i A i+1... A j laskemiseksi. Halutaan siis tietää m(1, n). Hieman yllättäen ratkaisuna ongelmaan on laskea m(i, j) kaikille 1 i, j n. 141

Edellä esitetyn perusteella pätee m(i, j) = jos j i m(i, j) = min 1 k j 1 (m(i, k) + m(k + 1, j) + p iq k q j ) Olkoon vielä s(i, j) se indeksi k joka minimoi arvon m(i, k) + m(k + 1, j) + p i q k q j. Siis optimaalisessa laskujärjestyksessä lasketaan muuten. A i... A j = (A 1... A s(i,j) ) (A s(i,j)+1... A j ). Jos s on annettu taulukossa, niin seuraava rekursiivinen funktio laskee tulon A 1... A n suorittamalla optimaaliset m(1, n) kertolaskua: LaskeTulo(i,j): if i = j then return A i else X := LaskeTulo(i, s[i, j]) Y := LaskeTulo(s[i, j] + 1, j) return XY 142

Taulukot m ja s lasketaan siis seuraavasti: for j := 1 to n do m[j, j] := for t := 1 to n 1 do % tarkastellaan tuloja A i... A i+t for i := 1 to n t do j := i + t m[i, j] := + for k := i to j 1 do r := m[i, k] + m[k + 1, j]+ p[i]p[k + 1]p[j + 1] if r < m[i, j] then m[i, j] := r s[i, j] := k end if end for end for end for Aikavaativuus on ilmeisesti Θ(n 3 ). 143

Floydin-Warshallin algoritmi: esimerkkinä verkko-ongelmasta tarkastelemme kaikkien lyhimpien polkujen löytämistä. On annettu suunnattu painotettu verkko G = (V, E, l) missä l: E R +. Merkintöjen yksinkertaistamiseksi oletetaan V = { 1,..., n } ja laajennetaan l siten, että l(i, i) = kaikilla i ja muuten l(i, j) = + jos (i, j) E. Tehtävänä on määrittää n n-taulukko D missä D[i, j] on lyhimmän polun pituus solmusta i solmuun j. (Polun pituus on tässä kaarten painojen summa.) Ongelma ratkeaa taulukoimalla välivaiheita D k, k =,..., n, missä D k [i, j] on lyhimmän sellaisen polun pituus, joka päätepisteitä lukuunottamatta ei käy missään solmuista k + 1,..., n. Siis D [i, j] = l(i, j) ja D n = D. 3 1 1 5 15 3 3 D[1, 4] = 5 + 3 + 7 = 15 2 7 4 D [1, 4] = 3 D 1 [1, 4] = 3 D 2 [1, 4] = 17 D 3 [1, 4] = 15 144

Jos ei päde D k [i, j] = D k 1 [i, j], niin lyhin polku solmusta i solmuun j vain solmuja 1,..., k käyttäen tosiaan käy solmussa k. Tällöin tämä lyhin polku tietysti muodostuu kahdesta osasta: 1. lyhin polku solmusta i solmuun k vain solmuja 1,..., k 1 käyttäen ja 2. lyhin polku solmusta k solmuun j vain solmuja 1,..., k 1 käyttäen. Saadaan siis palautuskaava D [i, j] = l(i, j) D k [i, j] = min { D k 1 [i, j], D k 1 [i, k] + D k 1 [k, j] }. (Toinen tärkeä sovellus samasta ideasta on verkon transitiivisen sulkeuman laskeminen. Tällöin halutaan D[i, j] = 1 jos solmusta i ylipäänsä on polku solmuun j, ja D[i, j] = muuten. Tällöin kaavaksi tulee D [i, j] = 1 jos (i, j) E D [i, j] = muuten D k [i, j] = max { D k 1 [i, j], D k 1 [i, k] D k 1 [k, j] }. Tästä saatavaa algoritmia nimitetään Warshallin algoritmiksi.) 145

Lopulta algoritmi saadaan seuraavaan muotoon: D := l for k := 1 to n do for i := 1 to n do for j := 1 to n do D[i, j] := min { D[i, j], D[i, k] + D[k, j] } Tässä on otettu huomioon, että D k [i, k] = D k 1 [i, k] ja D k [k, j] = D k 1 [k, j], joten selvitään yhdellä taulukolla D. Aikavaativuus on Θ(n 3 ) ja tilavaativuus Θ(n 2 ). Jos halutaan myös itse lyhimmät polut eikä pelkkiä niiden pituuksia, voidaan algoritmiin esim. liittää taulukko S[i, j] joka kertoo, mihin solmusta i pitää mennä, että päästään solmuun j. 146

Ahneet algoritmit (greedy algorithms) Idea: Muodostetaan jono osaratkaisuja S, S 1,..., S m missä S m on koko ongelman ratkaisu, S on jokin triviaali lähtöaskel, ja S i saadaan osaratkaisusta S i 1 tekemällä siihen jokin hyvältä näyttävä ( lokaalisti optimaalinen ) lisäys. Ongelman rakenteesta riippuu, johtavatko lokaalisti optimaaliset askelet aina koko ongelman optimaaliseen ratkaisuun. Esimerkki rahanvaihto: annettu euromäärä esitettävä pienimmällä määrällä seteleitä ja kolikoita. Esim. 83 euroa = (5 + 2 + 1 + 2 + 1) euroa. Olkoon x < 1 rahamäärä ja A = { 5, 2, 1, 5, 2, 1 }. Ahne ratkaisu: 1. S := (monijoukko) 2. Toista kunnes a S a = x: aseta S := S { z } missä z A on suurin jolla a S a + z x. Jos käytössä olevien rahojen arvot on valittu sopivasti (niinkuin ne yleensä ovat), algoritmi antaa optimaalisen vastauksen. Tämä ei kuitenkaan ole itsestään selvää. Esim. jos puuttuisi 1 ja 5 euron rahat, saataisiin 6 = 5 + 2 + 2 + 2 + 2 + 2 eikä 6 = 2 + 2 + 2. 147

Dijkstran algoritmi: esimerkki ahneesta polunetsimisestä verkossa On annettu suunnattu painotettu verkko G = (V, E, l) kuten Floydin-Warshallin algoritmissa, mutta nyt on lisäksi annettu lähde v V ja halutaan tietää ainoastaan ne lyhimmät polut joiden alkusolmu on v. Olkoon siis δ(v) lyhimmän polun pituus solmusta v solmuun v. Ratkaisun perusajatus on pitää yllä sellaista joukkoa S V, että oikea arvo δ(v) tiedetään kaikille v S. Aluksi S = { v }, ja kun on saavutettu S = V ratkaisu on valmis. Joukkoa S laajennetaan ahneesti lisäämällä siihen aina sellainen alkio joka näyttäisi olevan mahdollisimman lähellä lähdettä v. Laskennan aikana pidetään yllä taulukkoa D, jonka tulkinta on seuraava: jos v S niin D[v] = δ(v) muuten D[v] on lyhimmän sellaisen polun pituus solmusta v solmuun v, joka päätepisteitään lukuunottamatta sisältää vain joukon S solmuja. Siis kun lopulta S = V, taulukko D sisältää halutun tuloksen. 148