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

Samankaltaiset tiedostot
13 Lyhimmät painotetut polut

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

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.

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

Algoritmit 2. Luento 11 Ti Timo Männikkö

Algoritmi on periaatteellisella tasolla seuraava:

Algoritmit 1. Luento 8 Ke Timo Männikkö

Tietorakenteet, esimerkkivastauksia viikon 12 laskareihin

Lyhin kahden solmun välinen polku

TIE Tietorakenteet ja algoritmit 261

Algoritmit 1. Luento 13 Ti Timo Männikkö

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

Algoritmit 1. Luento 9 Ti Timo Männikkö

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

Algoritmit 1. Luento 13 Ma Timo Männikkö

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

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

10. Painotetut graafit

T : Max-flow / min-cut -ongelmat

811312A Tietorakenteet ja algoritmit, , Harjoitus 6, Ratkaisu

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

Algoritmit 2. Luento 12 Ke Timo Männikkö

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

10. Painotetut graafit

811312A Tietorakenteet ja algoritmit, , Harjoitus 6, Ratkaisu

811312A Tietorakenteet ja algoritmit V Verkkojen algoritmeja Osa1 : Leveys- ja syvyyshaku

Algoritmit 2. Luento 13 Ti Timo Männikkö

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

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

Malliratkaisut Demot

Suunnatun verkon syklittömyyden testaaminen

Johdatus verkkoteoriaan 4. luento

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

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

Verkon värittämistä hajautetuilla algoritmeilla

Alaraja vertailuihin perustuvalle järjestämiselle

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Harjoitus 3 ( )

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

Algoritmit 2. Luento 13 Ti Timo Männikkö

Tietorakenteet, laskuharjoitus 7, ratkaisuja

v 8 v 9 v 5 C v 3 v 4

Harjoitus 1 ( )

Harjoitus 1 ( )

Harjoitus 3 ( )

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

Mat Lineaarinen ohjelmointi

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Algoritmit 2. Luento 10 To Timo Männikkö

Pienin virittävä puu (minimum spanning tree)

Algoritmit 2. Luento 7 Ti Timo Männikkö

14. Luennon sisältö. Kuljetustehtävä. Verkkoteoria ja optimointi. esimerkki. verkkoteorian optimointitehtäviä verkon virittävä puu lyhimmät polut

.. X JOHDATUS TEKOÄLYYN TEEMU ROOS

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

Verkon virittävät puut

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

Tietorakenteet, esimerkkivastauksia viikon 12 laskareihin

Algoritmit 1. Luento 1 Ti Timo Männikkö

Malliratkaisut Demot

1 Ratkaisuja 2. laskuharjoituksiin

Algoritmit 1. Luento 14 Ke Timo Männikkö

Datatähti 2019 loppu

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 12 To Timo Männikkö

Tarkennamme geneeristä painamiskorotusalgoritmia

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 2016) Ensimmäinen välikoe, malliratkaisut

Algoritmit 2. Luento 11 Ti Timo Männikkö

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

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

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Malliratkaisut Demot

Johdatus graafiteoriaan

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

isomeerejä yhteensä yhdeksän kappaletta.

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

Ohjelmoinnin perusteet Y Python

Luku 8. Aluekyselyt. 8.1 Summataulukko

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

Algoritmit 2. Luento 2 To Timo Männikkö

811120P Diskreetit rakenteet

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

Algoritmit 2. Luento 14 Ke Timo Männikkö

5 Verkkoalgoritmeja. 5.1 Verkkojen esitystapoja

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

Tietorakenteet ja algoritmit

Diskreettiaikainen dynaaminen optimointi

3.4 Peruutus (backtracking)

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

58131 Tietorakenteet ja algoritmit (syksy 2015)

Algoritmit 1. Demot Timo Männikkö

Algoritmit 2. Luento 9 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Äärellisten mallien teoria

A TIETORAKENTEET JA ALGORITMIT

7. Satunnaisalgoritmit (randomized algorithms)

Kombinatorinen optimointi

Algoritmit 1. Luento 7 Ti Timo Männikkö

Transkriptio:

811 Tietorakenteet (kevät 9) Harjoitus 11, ratkaisuja (Topi Musto) 1. Bellmanin-Fordin algoritmin alustusvaiheen jälkeen aloitussolmussa on arvo ja muissa solmuissa on arvo ääretön. Kunkin solmun arvo kuvaa tähän mennessä löydetyn lyhimmän reitin pituutta lähtösolmusta kyseiseen solmuun. Algoritmin suorituksen aikana toistetaan V kertaa kaikkien kaarien löysääminen (relaxation). Kaaren (u, v) löysäämisessä tarkistetaan pienenisikö solmun v arvo jos siihen tultaisiinkin solmusta u. Ne kaaret joiden löysäämisellä oli jotain vaikutusta on värjätty seuraavissa kuvissa punaisella. 8 8 9 1

9 Lopuksi täytyy käydä kaikki kaaret vielä kerran läpi. Mikäli verkossa olisi yhä jännitteitä, eli jonkin kaaren löysäämisellä olisi vieläkin jotain vaikutusta, niin verkossa olisi negatiivisen pituinen sykli. Tässä verkossa kaikki kaaret ovat lopussa löysättyjä, joten negatiivista sykliä ei esiinny. Lopullinen lyhin reitti alkusolmusta kohdesolmuun saadaan seuraamalla kohdesolmusta taaksepäin kaaria valiten aina se kaari, joka muokkasi läpikäynnin aikana viimeisenä kohdesolmun arvoa. Nämä kaaret on merkattu seuraavassa kuvassa punaisella.. Tarkastellaan verkkoa, jonka solmuina on lentokenttiä ja kaarina suorat lennot kultakin lentokentältä jollekin toiselle lentokentälle. Kunkin kaaren painona on todennäköisyys sille, että matkatavarat katoavat tällä lennolla. Merkataan P (x 1, x,..., x n ):llä todennäköisyyttä sille, että matkatavarat katoavat jollakin lennolla (x i, x i+1 ) kun lennetään lentoasemalta x 1 lentoasemalle x n lentoasemien x,..., x n 1 kautta. Todennäköisyydet P (x i, x j ), joissa on vain kaksi lentoasemaa i ja j, ovat siis annetut verkon kaarien painot.

Se, että matkatavarat katoavat jollain lennolla on vastatapahtuma sille, että matkatavarat eivät katoa millään lennolla, eli P (x 1, x,..., x n ) = 1 P (x 1, x ) P (x, x ) P (x n 1, x n ). Tämä saa pienimmän arvonsa kun tulo P (x 1, x ) P (x n 1, x n ) saa suurimman arvonsa. Logaritmin avulla tämä tulo saadaan muunnettua summaksi. Koska logaritmi on aidosti kasvava funktio, tämä tulo saa suurimman arvonsa kun ( ) log P (x 1, x ) P (x, x ) P (x n 1, x n ) = log P (x 1, x ) + log P (x, x ) + + log P (x n 1, x n ) saa suurimman arvonsa, joka edellyttää edelleen sitä, että log P (x 1, x ) log P (x, x ) log P (x n 1, x n ) saa pienimmän arvonsa. Siis korvaamalla verkon kunkin kaaren (i, j) painon painolla log(1 P (x i, x j )) (joka on aina positiivinen luku, koska 1 P (x i, x j ) on todennäköisyytenä aina korkeintaan 1) voidaan etsiä ne lentoreitit, joilla matkatavaroiden katoamisen todennäköisyys on pienin mahdollinen käyttämällä suoraan tavallista Dijkstran algoritmia. Vaihtoehtoinen tapa ratkaista tehtävä Matkatavarat ovat kadonneet lentokentälle x n tultaessa jos ja vain jos ne ovat kadonneet jo kentälle x n 1 tultaessa tai ne eivät olleet kadonneet kentälle x n 1 tultaessa mutta ne katosivat lennolla x n 1 :stä x n :ään. Siis P (x 1, x,..., x n ) = P (x 1, x,..., x n 1 ) + P (x 1, x,..., x n 1 )P (x n 1, x n ) = P (x 1, x,..., x n 1 ) + (1 P (x 1, x,..., x n 1 ))P (x n 1, x n ). Dijsktran algoritmia voidaan käyttää löytämään jostain lentokentästä lähtevät reitit matkatavaroita epätodennäköisimmin kadottavat reitit siten, että kuhunkin solmuun x n tallennetaan kullakin hetkellä sen reitin (x 1, x,..., x n ) todennäköisyys d[v] = P (x 1, x,..., x n 1, x n ), joka on tähän mennessä löydetyistä solmuun x n päättyvistä reiteistä paras, eli jolla matkatavaroiden hukkumistodennäköisyys on pienin. Tätä päivitetään löysentämisessä aiemman kaavan mukaan seuraavasti:

RELAX(u, v) 1 if d[v] > d[u] + (1 d[u])p (u, v) then d[v] d[u] + (1 d[u])p (u, v) p[v] u Algoritmi laskee selvästi lähtösolmusta s lähtevien polkujen matkatavaroiden hukkumistodennäköisyyksiä. Algoritmi löytää ne polut, joilla on pienimmät todennäköisyydet, koska Dijkstran algoritmissa kukin kaari (u, v) löysennetään vasta siinä vaiheessa kun tiedetään, että kaaren lähtösolmun arvo d[u] on sama kuin solmun arvo olisi optimaalisella reitillä, eli d[u] = δ(s, u). Algoritmi toimii siis samoin kuin tavallinen Dijkstran algoritmi verkossa, jonka kaarien painot ovat (1 δ(s, u))p (u, v). Löysennyksen jälkeen kaaren (u, v) kohdesolmun v arvoksi d[v] tulee siis δ(s, u) + (1 δ(s, u))p (u, v) mikäli tämä on pienempi kuin solmun v entinen arvo. Mahdollinen uusi arvo on optimaalisen reitin tavaroiden katoamistodennäköisyys jos solmuun v kuljetaan solmun u kautta.. Lyhimmät reitit shakkilaudalla löytyvät helposti leveyssuuntaisella haulla. Verkon solmuina ovat koordinaattiparit (x, y), missä x, y {1,,..., 8}. Koordinaatti x kertoo laudan sarakkeen ja koordinaatti y laudan rivin. Verkon kaarina ovat ne ratsun siirrot, jotka pysyvät laudan sisällä, eli esimerkiksi Adj[(1, 1)] = {(, ), (, )}.

RATSUNREITTI(G, start, destination) 1 for i 1 to 8 do for j 1 to 8 do colour[(i, j)] WHITE distance[(i, j)] parent[(i, j)] NIL colour[start] BLACK 7 distance[start] 8 Q tyhjä jono 9 ENQUEUE(Q, start) 1 while not EMPTY(Q) 11 do u DEQUEUE(Q) 1 if u = destination Mikäli kohdesolmu löytyy voidaan lopettaa. 1 then TULOSTAREITTI(start, destination) 1 return Muuten käydään läpi kaikki ratsun siirrot. 1 for delta {(1, ), (, 1), ( 1, ), (, 1), (, 1), (1, ), ( 1, ), (, 1)} 1 do v u + delta Tarkistetaan, että siirto pysyy laudalla. 17 if x[v] 1 and x[v] 8 and y[v] 1 and y[v] 8 18 then if colour[v] = WHITE 19 then colour[v] BLACK distance[v] distance[u] + 1 1 parent[v] u ENQUEUE(Q, v) Tänne ei pitäisi koskaan päätyä. ERROR "Reittiä ei löytynyt" Muodostettuja parent kenttiä seuraamalla löydetään lyhin reitti, jolla kohdesolmuun on päästy. Reitti täytyy kuitenkin ensin käydä kokonaan kerran läpi, jotta se saataisiin tulostettua oikeassa järjestyksessä. Helpoiten tämä onnistuu rekursiolla seuraavasti. Ongelma voitaisiin myös kiertää etsimällä lyhin reitti kohdesolmusta lähtösolmuun. TULOSTAREITTI(G, start, destination) 1 if destination start then TULOSTAREITTI(start, parent[destination]) PRINT(destination)