811312A Tietorakenteet ja algoritmit 2015-2016. V Verkkojen algoritmeja Osa 2 : Kruskalin ja Dijkstran algoritmit



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

Algoritmi on periaatteellisella tasolla seuraava:

10. Painotetut graafit

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

Algoritmit 1. Luento 13 Ma Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

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

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

13 Lyhimmät painotetut polut

6 Verkkoalgoritmeja. 6.1 Verkkojen esitystapoja

5 Verkkoalgoritmeja. 5.1 Verkkojen esitystapoja

Johdatus graafiteoriaan

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

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

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Pienin virittävä puu (minimum spanning tree)

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

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

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

10. Painotetut graafit

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

Algoritmit 2. Luento 7 Ti Timo Männikkö

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

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

811312A Tietorakenteet ja algoritmit, , Harjoitus 6, Ratkaisu

Algoritmit 2. Luento 11 Ti Timo Männikkö

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

Verkon virittävät puut

Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 12 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit, , Harjoitus 6, Ratkaisu

811312A Tietorakenteet ja algoritmit, VI Algoritmien suunnitteluparadigmoja

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

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Kurssikoe on maanantaina Muista ilmoittautua kokeeseen viimeistään 10 päivää ennen koetta! Ilmoittautumisohjeet löytyvät kurssin kotisivuilla.

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

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

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Algoritmit 1. Luento 14 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

Johdatus graafiteoriaan

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.

Algoritmit 1. Luento 8 Ke Timo Männikkö

Tietorakenteet ja algoritmit. Verkot. Ari Korhonen

A TIETORAKENTEET JA ALGORITMIT

Diskreetit rakenteet

A TIETORAKENTEET JA ALGORITMIT

Graafin virittävä puu 1 / 20

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

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

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

v 8 v 9 v 5 C v 3 v 4

TIE Tietorakenteet ja algoritmit 261

Algoritmit 2. Luento 8 Ke Timo Männikkö

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

Algoritmit 1. Luento 1 Ti Timo Männikkö

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

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

Algoritmit 2. Luento 9 Ti Timo Männikkö

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

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

Algoritmit 2. Luento 2 To Timo Männikkö

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

6.4. Järjestyssuhteet

Algoritmit 2. Luento 14 Ke Timo Männikkö

Tehtävä 4 : 2. b a+1 (mod 3)

6. Approksimointialgoritmit

(a) L on listan tunnussolmu, joten se ei voi olla null. Algoritmi lisäämiselle loppuun:

Tietorakenteet ja algoritmit - syksy

4. Joukkojen käsittely

Liite 2: Verkot ja todennäköisyyslaskenta

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Algoritmit 2. Luento 2 Ke Timo Männikkö

Silmukkaoptimoinnista

Luku 8. Aluekyselyt. 8.1 Summataulukko

Lyhin kahden solmun välinen polku

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

Tietorakenteet, esimerkkivastauksia viikon 12 laskareihin

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

4.3. Matemaattinen induktio

811312A Tietorakenteet ja algoritmit V Hash-taulukot ja binääriset etsintäpuut

FUNKTIONAALIANALYYSIN PERUSKURSSI Johdanto

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

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Tarkennamme geneeristä painamiskorotusalgoritmia

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

Malliratkaisut Demot

PARITUS KAKSIJAKOISESSA

A TIETORAKENTEET JA ALGORITMIT

Ohjelmoinnin perusteet Y Python

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

Itsestabilointi: perusmääritelmiä ja klassisia tuloksia

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Harjoitus 1 ( )

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

T : Max-flow / min-cut -ongelmat

8. Lajittelu, joukot ja valinta

Transkriptio:

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

Sisältö 1. Johdanto 2. Leveyshaku 3. Syvyyshaku 4. Kruskalin algoritmi 5. Dijkstran algoritmi 811312A TRA, Verkot 2

V.4 Kruskalin algoritmi V.4.1 Minimivirittävät puut Puu on yhtenäinen suuntaamaton verkko, jolla ei ole syklejä Puussa kahden solmun välillä yksikäsitteinen polku Olkoon G = (V, E) yhtenäinen suuntaamaton verkko: Sen virittävä puu on mikä tahansa puu (V,T) missä aliverkko T E Verkon G = (V, E) virittävä puu saadaan valitsemalla joukosta E mahdollisimman vähän välejä niin että verkko säilyy yhtenäisenä Jos yhtenäisessä suuntaamattomassa verkossa on n solmua, niin sen virittävässä puussa on n-1 väliä 811312A TRA, Verkot 3

V.4.1 Minimivirittävät puut (2) Tässä osassa tarkastellaan yhtenäisiä suuntaamattomia painotettuja verkkoja Välin (u, v) painoarvoa merkitään w (u, v) painofunktio w E R (reaalilukujen joukko) Minimivirittävä puu eli pienin virittävä puu on sellainen virittävä puu, jossa painoarvojen summa on pienin mahdollinen virittäville puille 811312A TRA, Verkot 4

V.4.1 Minimivirittävät puut : Esimerkki Painotettu verkko: 3 2 3 1 2 2 5 a b c d e f 5 6 g Minimivirittävä puu: 2 a b c d 3 1 2 2 e f g 3 Yllä minimivirittävän puun paino on 13 811312A TRA, Verkot 5

V.4.2 Minimivirittävien puiden konstruointi Seuraavassa esitettävät algoritmit käyttävät ahnetta lähestymistapaa, kun ne määrittävät minimivirittävää puuta. Väliä (u, v) sanotaan turvalliseksi väliksi (safe edge), jos sen valinta joukkoon A säilyttää voimassa invariantin Ennen jokaisen uuden välin valintaa A on jonkun minimivirittävän puun välien joukon osajoukko. Algoritmi GENERIC-MST(G, w) on yleinen malli ahneille algoritmeille määrätä minimivirittävä puu 811312A TRA, Verkot 6

V.4.2 Minimivirittävien puiden konstruointi (2) Input: Yhtenäinen suuntaamaton verkko G, jolla on painofunktio w. Output: Verkon G minimivirittävä puu. GENERIC-MST(G, w) 1. A = 2. while A does not form a spanning tree 3. find an edge (u, v) that is safe for A 4. A = A {(u, v)} 5. return A 811312A TRA, Verkot 7

V.4.3 Kruskalin algoritmi Ahne ratkaisu, käyttää geneerisen algoritmin ideaa Apualgoritmit MAKE_SET(v) Muodostaa joukon, jonka ainoa alkio on verkon solmu v FIND_SET(u) Etsii muodostettujen joukkojen parista joukon, joka sisältää alkion u UNION(u, v) Muodostaa unionin alkion u sisältävästä joukosta ja alkion v sisältävästä joukosta 811312A TRA, Verkot 8

V.4.3 Kruskalin algoritmi (2) Input: Yhtenäinen suuntaamaton verkko G, jolla on painofunktio w. Solmujen joukko G.V ja välien G.E Output: Verkon G minimivirittävä puu. MST_KRUSKAL(G, w) 1. A = 2. for each vertex v G.V 3. MAKE_SET(v) 4. sort the edges of G.E into nondecreasing order by weight 5. for each edge (u, v) G.E taken in nondecreasing order by weight 6. if FIND_SET(u) FIND_SET(v) 7. A = A {(u, v)} 8. UNION(u, v) 9. return A 811312A TRA, Verkot 9

V.4.3 Kruskalin algoritmi : Esimerkki G: 3 2 3 1 2 2 5 a b c d e f 5 6 g A = Joukot {a},{b},{c},{d},{e}, {f},{g} Välit järjestyksessä (a,e),(a,b),(b,f),(c,g),(c,f),(c,d), (d,g),(e,f),(f,g) 1. A = {(a,e)}, Joukot {a,e},{b},{c},{d},{f},{g} 2. A = {(a,e),(a,b)} Joukot {a,b,e},{c},{d},{f},{g} 3. A = {(a,e),(a,b),(b,f)} Joukot {a,b,e,f},{c},{d}, {g} 4. A = {(a,e),(a,b),(b,f),(c,g)} Joukot {a,b,e,f},{c,g},{d} 5. A = {(a,e),(a,b),(b,f),(c,g),(c,f)} Joukot {a,b,c,e,f,g},{d} 6. A= {(a,e),(a,b),(b,f),(c,g),(c,f),(c,d)} Joukot {a,b,c,d,e,f,g} T: 1 a b c d e 2 2 f 3 g 2 3 811312A TRA, Verkot 10

V.4.4 Kruskalin algoritmin oikeellisuus Algoritmin päättyminen on selvää, koska se käy läpi äärellisen välijoukon Kun algoritmissa FIND_SET(u) FIND_SET(v), niin (u,v) on väli joka yhdistää kahta erillistä puuta, jotka ovat muodostuneet siihen asti algoritmissa Voidaan osoittaa, että väli (u,v) on tällöin turvallinen Tästä puolestaan seuraa, että lopulta muodostuu minimivirittävä puu 811312A TRA, Verkot 11

V.4.5 Kruskalin algoritmin aikakompleksisuus Oletetaan, että verkossa solmuja N ja välejä M HUOM! M N-1, koska verkko on yhtenäinen Rivin 2 joukkojen muodostaminen vie ajan O(N) Välien lajittelu vie ajan O(Mlg(M)) Loppu riippuu apualgoritmien toteutuksesta, silmukassa suoritetaan FIND_SET korkeintaan 2*M kertaa ja UNION korkeintaan N kertaa Tehokkaasti toteutettuna luokkaa O((N+M)α(N)) missä α on logaritmia hitaammin kasvava funktio Kaikkiaan saadaan kompleksisuusluokaksi O(Mlg(M)) tai O(Mlg(N)) Koska lg(m) lg(n 2 ) = 2*lg(N) 811312A TRA, Verkot 12

V.5 Dijkstran algoritmi V.5.1 Lyhimmistä poluista verkossa Leveyshakualgoritmi määrittää verkon lyhimmät polut, jos verkon väleillä ei ole painoarvoja Tällöin muodostuvaa edeltäjätaulukkoa hyväksi käyttäen voidaan muodostaa verkko G = (V, E ), ns. edeltäjäaliverkko (predecessor subgraph) siten, että sen solmujen joukko V = {v V [v] NIL} {s} ja välien joukko E = { ( [v], v) E v V {s} }. Tämä verkko on puu, jossa on yksikäsitteinen polku solmusta s jokaiseen muuhun saavutettavaan solmuun. Polut ovat lyhimmät polut verkossa G 811312A TRA, Verkot 13

V.5.2 Dijkstran algoritmi: Johdanto Keksijä: Edsger Dijkstra 1956 Julkaistu 1959 Tuottaa painotetussa verkossa lyhimmät (pienipainoisimmat, pienimmän kustannuksen) polut yhdestä solmusta Sukua leveyshaulle Toimii suunnatulle verkolle, jossa ei ole negatiivisia painoarvoja Sovelletaan laajasti karttapalveluissa, reitittämisongelmissa jne. 811312A TRA, Verkot 14

V.5.3 Dijkstran algoritmi Merkintöjä: V verkon solmut, S valittujen solmujen joukko, Q minimiprioriteettijono, jossa aluksi verkon kaikki solmut Joukon S solmuille lyhimmän polun etäisyys on laskettu valmiiksi Silmukassa Q = V S, järjestetty toistaiseksi lähtösolmusta saatujen lyhimpien etäisyyksien mukaan EXTRACT_MIN poistaa joukosta pienimmän alkion ja palauttaa sen 811312A TRA, Verkot 15

V.5.3 Dijkstran algoritmi (2) Input: Suunnattu verkko G, ei-negatiivisia arvoja saava painoarvofunktio w ja solmu s. Output: Taulukossa d vaaditut lyhimpien polkujen pituudet solmusta s ja taulukossa solmujen edeltäjäsolmut. DIJKSTRA(G, w, s) 1. for each v in G.V 2. d[v] = 3. [v] = NIL 4. d[s] = 0 5. S = 6. Q = G.V 7. while Q 8. u = EXTRACT_MIN(Q) 9. S = S {u} 10. for each v in G.Adj[u] 11. if d[v] > d[u]+w(u,v) 12. d[v] = d[u]+w(u,v) 13. [v] = u 811312A TRA, Verkot 16

V.5.3 Dijkstran algoritmi : Esimerkki Lähde: Cormen et. al: Introduction to Algorithms. MIT Press (2001). Figure 24.6 811312A TRA, Verkot 17

V.5.4 Dijkstran algoritmin oikeellisuus On selvää, että algoritmi päättyy, koska joukko Q pienenee jokaisella silmukan suorituskerralla Merkitään (s, u) = solmun u lyhin etäisyys solmusta s Riittää osoittaa, että jokaiselle saavutetulle solmulle u pätee d[u] = (s, u), kun se liitetään joukkoon S. Jos solmulle u päivitetty d[u] = (s, u), d[u] ei voi enää muuttua 811312A TRA, Verkot 18

V.5.4 Dijkstran algoritmin oikeellisuus (2) Todistuksen idea: Olkoon u ensimmäinen joukkoon S lisättävä solmu, jolle d[u] (s, u) Tarkastellaan lyhintä polkua solmusta s solmuun u: s x y u, missä solmu y on polulla ensimmäinen solmu joka ei kuulu joukkoon S, kun u valitaan joukkoon S Siis d[x] = (s, x) Kun x lisätään S:ään d[y] = (s,x)+w(x,y) = (s, y) Kun u valitaan joukkoon s, on d[u] <= d[y], siis d[y] = (s, y) = (s, u) = d[u], ristiriidassa alkuperäisen oletuksen kanssa 811312A TRA, Verkot 19

V.5.5 Dijkstran algoritmin kompleksisuus Olkoon verkossa N solmua ja M väliä Rivien 1-6 kompleksisuus luokkaa Ɵ(N) while-silmukkaa suoritetaan N kertaa Rivit 10-13 suoritetaan kerran jokaiselle välille Kompleksisuus riippuu jonon Q toteutuksesta Jos järjestämätön jono, josta haetaan minimi jokaisella kierroksella, operaatioita N+(N-1)+ +1 luokkaa Ɵ(N 2 ) Algoritmi luokkaa Ɵ(N 2 ) Jos käytetään minimikekoa, luokkaa O((M+N)lg(N)) Algoritmi luokkaa O((M+N)lg(N)) 811312A TRA, Verkot 20