13 Lyhimmät painotetut polut

Samankaltaiset tiedostot
TIE Tietorakenteet ja algoritmit 261

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

10. Painotetut graafit

10. Painotetut graafit

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Algoritmi on periaatteellisella tasolla seuraava:

Algoritmit 2. Luento 11 Ti Timo Männikkö

Lyhin kahden solmun välinen polku

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

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

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

Algoritmit 1. Luento 13 Ma Timo Männikkö

Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 1. Luento 13 Ti Timo Männikkö

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

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

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

Johdatus graafiteoriaan

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

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

Algoritmit 1. Luento 14 Ke Timo Männikkö

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

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Algoritmit 2. Luento 12 Ke Timo Männikkö

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

v 8 v 9 v 5 C v 3 v 4

Malliratkaisut Demot

Pienin virittävä puu (minimum spanning tree)

Harjoitus 1 ( )

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

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

T : Max-flow / min-cut -ongelmat

6 Verkkoalgoritmeja. 6.1 Verkkojen esitystapoja

Algoritmit 2. Luento 2 To Timo Männikkö

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

5 Verkkoalgoritmeja. 5.1 Verkkojen esitystapoja

Mat Lineaarinen ohjelmointi

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 14 Ke Timo Männikkö

Tietorakenteet, laskuharjoitus 7, ratkaisuja

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.

Harjoitus 1 ( )

Algoritmit 2. Luento 7 Ti Timo Männikkö

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

Malliratkaisut Demot

Johdatus graafiteoriaan

Kognitiivinen mallintaminen 1

Suunnatun verkon syklittömyyden testaaminen

Tietorakenteet, esimerkkivastauksia viikon 12 laskareihin

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

Ratkaisu. Tulkitaan de Bruijnin jonon etsimiseksi aakkostossa S := {0, 1} sanapituudelle n = 4. Neljän pituisia sanoja on N = 2 n = 16 kpl.

Algoritmit 1. Luento 1 Ti Timo Männikkö

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

Tiraka, yhteenveto tenttiinlukua varten

4. Joukkojen käsittely

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

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 2. Demot Timo Männikkö

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

Verkon virittävät puut

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

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Johdatus verkkoteoriaan 4. luento

Itsestabilointi: perusmääritelmiä ja klassisia tuloksia

811312A Tietorakenteet ja algoritmit, , Harjoitus 6, Ratkaisu

Algoritmit 2. Luento 9 Ti Timo Männikkö

Tietorakenteet, esimerkkivastauksia viikon 12 laskareihin

Tarkennamme geneeristä painamiskorotusalgoritmia

JOHDATUS TEKOÄLYYN TEEMU ROOS

Tietorakenteet ja algoritmit. Verkot. Ari Korhonen

Algoritmit 2. Luento 13 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit, , Harjoitus 6, Ratkaisu

Algoritmit 1. Luento 7 Ti Timo Männikkö

JOHDATUS TEKOÄLYYN TEEMU ROOS

.. X JOHDATUS TEKOÄLYYN TEEMU ROOS

JOHDATUS TEKOÄLYYN TEEMU ROOS

1 Puu, Keko ja Prioriteettijono

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

JOHDATUS TEKOÄLYYN TEEMU ROOS

Tietorakenteet ja algoritmit. Kertaus. Ari Korhonen

4 Tehokkuus ja algoritmien suunnittelu

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö

Tämä on helpompi ymmärtää, kun tulkitaan keko täydellisesti tasapainotetuksi binääripuuksi, jonka juuri on talletettu taulukon paikkaan

Algoritmit 2. Demot Timo Männikkö

Königsbergin sillat. Königsberg 1700-luvulla. Leonhard Euler ( )

Ongelma 1: Ovatko kaikki tehtävät/ongelmat deterministisiä?

9 Erilaisia tapoja järjestää

Ongelma 1: Ovatko kaikki tehtävät/ongelmat deterministisiä?

14 Tasapainotetut puurakenteet

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

Datatähti 2019 loppu

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

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

3.4 Peruutus (backtracking)

5. Keko. Tietorakenne keko eli kasa (heap) on tehokas toteutus abstraktille tietotyypille prioriteettijono, jonka operaatiot ovat seuraavat:

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

Transkriptio:

TIE-20100 Tietorakenteet ja algoritmit 297 13 Lyhimmät painotetut polut BFS löytää lyhimmän polun lähtösolmusta graafin saavutettaviin solmuihin. Se ei kuitenkaan enää suoriudu tehtävästä, jos kaarien läpi kulkeminen maksaa askelta enemmän. Tässä luvussa käsitellemme lyhimpien painotettujen polkujen etsintää graafista, jonka kaaripainot ovat positiivisia ja voivat poiketa ykkösestä. negatiivisten kaaripainojen hallitsemiseen tarvitaan monimutkaisempia algoritmeja, esimerkiksi Bellman-Ford algoritmi

TIE-20100 Tietorakenteet ja algoritmit 298 13.1 Lyhin polku Graafin kaarilla voi olla ominaisuus nimeltä paino(weight). paino voi edustaa vaikkapa reitin pituutta tai tilasiirtymän kustannusta Graafin G = (V, E) painofunktio w : E R kaarilta reaalilukupainoille Polun p = v 0, v 1,..., v k paino w(p) on sen muodostavien kaarten painojen summa w(p) = k i=1 w(v i 1, v i ). Määritelmä: lyhimmän polun paino δ(u, v): { min{w(p) : u p v} jos on polkuu:sta v:hen, δ(u, v) = muuten. ja siten lyhin polku u:sta v:hen mikä tahansa polku p, jolle w(p) = δ(u, v)

TIE-20100 Tietorakenteet ja algoritmit 299 Tämä mutkistaa lyhimmän reitin etsintää merkittävästi. lyhin reitti on se lähtösolmusta etsittyyn solmuun kulkeva polku, jonka kaarien painojen summa on mahdollisimman pieni jos jokaisen kaaren paino on 1, tehtävä voidaan ratkaista käymällä lähtösolmusta saavutettavissa oleva graafin osa läpi leveyteen ensin -järjestyksessä jos painot saattavat olla < 0, voi olla, että tehtävään ei ole ratkaisua, vaikka polkuja olisi olemassakin jos graafissa on silmukka, jonka kaaripainojen summa on negatiivinen saadaan mielivaltaisen pieni painojen summa kiertämällä silmukkaa tarpeeksi monta kertaa

TIE-20100 Tietorakenteet ja algoritmit 300 13.2 Dijkstran algoritmi Suunnatun, painotetun graafin G = (V, E), jossa kaaripainot ovat ei-negatiivisia, lyhimmät painotetut polut lähtösolmusta voi etsiä Dijkstran algoritmilla. etsii lyhimmät polut lähtösolmusta s kaikkiin saavutettaviin solmuihin, painottaen kaarien pituuksia w:n mukaan valitsee joka tilanteessa tutkittavakseen lyhimmän polun, jota se ei ole vielä tutkinut se on siis ahne algoritmi oletus: w(u, v) 0 (u, v) E

TIE-20100 Tietorakenteet ja algoritmit 301 DIJKSTRA(s, w) (algoritmi saa parametrinaan aloitussolmun s) 1 alussa kaikkien solmujen kentät ovat arvoiltaan colour = WHITE, d =, π = NIL 2 s colour := GRAY (merkitään alkutila löydetyksi) 3 s d := 0 (etäisyys alkutilasta alkutilaan on 0) 4 PUSH(Q, s) (työnnetään alkutila prioriteettijonoon) 5 while Q do (jatketaan niin kauan kun solmuja riittää) 6 u := EXTRACT-MIN(Q) (otetaan prioriteettijonosta seuraava tila) 7 for each v u Adj do (käydään u:n naapurit läpi) 8 if v colour = WHITE then (jos solmussa ei ole käyty... ) 9 v colour := GRAY (... merkitään se löydetyksi) 10 PUSH(Q, v) (työnnetään tila jonoon odottamaan käsittelyä) 11 RELAX(u, v, w) 12 u colour := BLACK (merkitään tila u käsitellyksi) RELAX(u, v, w) 1 if v d > u d + w(u, v) then (jos löydettiin uusi lyhyempi reitti tilaan v...) 2 v d := u d + w(u, v) (...pienennetään v:n etäisyyttä lähtösolmusta) 3 v π := u (merkitään, että v:n tultiin u:sta)

TIE-20100 Tietorakenteet ja algoritmit 302 Algoritmin käyttämä tietorakenne Q on prioriteettijono (luentomonisteen kohta 3.2). w sisältää kaikkien kaarien painot. Dijkstran algoritmi käyttää apufunktiota RELAX kaaren (u, v) relaksointi (relaxation) testaa, voiko lyhintä löydettyä v:hen vievää polkua parantaa reitittämällä sen loppupää u:n kautta, ja tarvittaessa tekee niin Muilta osin algoritmi muistuttaa huomattavasti leveyteen ensin -hakua. se löytää lyhimmät polut kasvavan pituuden mukaisessa järjestyksessä kun solmu u otetaan Q:sta, sen painotettu etäisyys s:stä varmistuu u d:ksi jos prioriteettijonosta otettu tila on maalitila, voidaan algoritmin suoritus lopettaa saman tien

TIE-20100 Tietorakenteet ja algoritmit 303 Alla olevassa kuvassa nähdään Dijkstran algoritmi tilanteessa, jossa mustalla ympyröidyt solmut on käsitelty. 1 2 2 7 Alkutila 1 3 i 0 3 i 5 4 4 3 8 i

TIE-20100 Tietorakenteet ja algoritmit 304 Suoritusaika: while-silmukka käy enintään O(V ) kierrosta ja for-silmukka yhteensä enintään O(E) kierrosta prioriteettijonon voi toteuttaa tehokkaasti keon avulla tai vähemmän tehokkaasti listan avulla kekototeutuksella: listatoteutuksella: rivi 4: Θ(1) Θ(1) (tyhjään tietorakenteeseen lisääminen) rivi 5: Θ(1) Θ(1) (onko prioriteettijono tyhjä) rivi 6: O(lg V ) O(V ) (Extract-Min) rivi 10: Θ(1) Θ(1) (valkoisen solmun prioriteetti on ääretön, joten sen oikea paikka on keon lopussa) rivi 11: O(lg V ) Θ(1) (relaksoinnissa solmun prioriteetti voi muuttua) käytettäessä kekototeutusta jokaisella while- ja for-silmukan kierroksella suoritetaan yksi O(lg V ) aikaa kuluttava operaatio algoritmin suoritusaika on O((V + E) lg V )

TIE-20100 Tietorakenteet ja algoritmit 305 13.3 A*-algoritmi Dijkstran algoritmi etsi lyhimmän painotetun reitin kartoittamalla solmuja lyhimmästä reitistä alkaen reitin pituusjärjestyksessä. Eli: Dijkstra käyttää hyväkseen vain jo kuljetuista kaarista saatavaa tietoa. A*-algoritmi tehostaa tätä lisäämällä heuristiikan (=oletuksen) lyhimmästä mahdollisesta etäisyydestä maaliin. (Esim. maantiereitin haussa etäisyys linnuntietä). etsii lyhimmän painotetun polun lähtösolmusta s annettuun maalisolmuun g. Ei kartoita lyhintä reittiä kaikkiin solmuihin (kuten Dijkstra), vain maalisolmuun. edellyttää, että painot ovat ei-negatiivisia (kuten Dijkstrakin) edellyttää, että jokaiselle solmulle voidaan laskea sen minimietäisyys maalista (ts. löytynyt lyhin reitti ei voi olla lyhempi). valitsee joka tilanteessa tutkittavakseen ei-tutkitun solmun, jossa (lyhin etäisyys lähdöstä solmuun + arvioitu minimietäisyys maaliin) on pienin.

TIE-20100 Tietorakenteet ja algoritmit 306 Ainoa ero A*:n ja Dijkstran välillä on relaksointi (ja se, että A* kannattaa lopettaa heti maalisolmun löydyttyä, koska se ei kartoita lyhimpiä etäisyyksiä kaikkiin solmuihin). RELAX-A*(u, v, w) 1 if v d > u d + w(u, v) then (jos löydettiin uusi lyhyempi reitti tilaan v...) 2 v d := u d + w(u, v) (...uusi pituus tähän saakka...) 3 v de := v d + min_est(v, g) (...ja minimiarvio koko reitistä) 4 v π := u (merkitään, että v:n tultiin u:sta) A*:n käyttämässä prioriteettijonossa käytetään prioriteettina koko reitin pituusarviota v de. (Dijkstran algoritmi on A*:n erikoistapaus, jossa min_est(a, b) on aina 0.)

TIE-20100 Tietorakenteet ja algoritmit 307 13.4 Kevyin virittävä puu Graafin G = (V, E) kevyin virittävä puu on sen asyklinen aligraafi, joka yhdistää kaikki graafin solmut niin, että aligraafin kaarien painojen summa on pienin mahdollinen. Puun löytämiseksi on kaksi algoritmia: Primin ja Kruskalin Prim muistuttaa Dijkstran algoritmin kun taas Kruskal lähestyy ongelmaa luomalla metsän, jossa on puu jokaiselle puulle ja sitten yhdistämällä näitä puuksi