Algoritmi on periaatteellisella tasolla seuraava:

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

Algoritmit 1. Luento 13 Ti Timo Männikkö

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

Pienin virittävä puu (minimum spanning tree)

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

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

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

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

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

4. Joukkojen käsittely

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

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

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

10. Painotetut graafit

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

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

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

Tarkennamme geneeristä painamiskorotusalgoritmia

Fibonacci-kasoilla voidaan toteuttaa samat operaatiot kuin binomikasoilla.

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

isomeerejä yhteensä yhdeksän kappaletta.

b) Olkoon G vähintään kaksi solmua sisältävä puu. Sallitaan verkon G olevan

Algoritmit 2. Luento 11 Ti Timo Männikkö

Tehtävä 8 : 1. Tehtävä 8 : 2

13 Lyhimmät painotetut polut

Näytetään nyt relaatioon liittyvien ekvivalenssiluokkien olevan verkon G lohkojen särmäjoukkoja. Olkoon siis f verkon G jokin särmä.

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

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

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

Verkon virittävät puut

Näin ollen saadaan tulos rad(g) diam(g). Toisaalta huomataan, että verkon G kaikilla solmuilla x ja y pätee kolmioepäyhtälön nojalla havainto

Johdatus graafiteoriaan

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

Algoritmit 1. Luento 8 Ke Timo Männikkö

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

Algoritmit 1. Luento 14 Ke Timo Männikkö

6. Approksimointialgoritmit

10. Painotetut graafit

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

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö

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

Algoritmit 2. Luento 14 Ke Timo Männikkö

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

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.

4.3. Matemaattinen induktio

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

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Algoritmit 2. Luento 12 Ke Timo Männikkö

Suunnatun verkon syklittömyyden testaaminen

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Ensimmäinen induktioperiaate

Algoritmit 2. Luento 2 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

lähtokohta: kahden O(h) korkuisen keon yhdistäminen uudella juurella vie O(h) operaatiota vrt. RemoveMinElem() keossa

Ensimmäinen induktioperiaate

Johdatus graafiteoriaan

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

Algoritmit 1. Luento 9 Ti Timo Männikkö

Tietorakenteet, laskuharjoitus 7, ratkaisuja

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

Puiden karakterisointi

Luku 8. Aluekyselyt. 8.1 Summataulukko

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

v 8 v 9 v 5 C v 3 v 4

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

Algoritmit 1. Luento 1 Ti Timo Männikkö

58131 Tietorakenteet (kevät 2008) 1. kurssikoe, ratkaisuja

1.4 Funktioiden kertaluokat

A TIETORAKENTEET JA ALGORITMIT

6 Verkkoalgoritmeja. 6.1 Verkkojen esitystapoja

Alaraja vertailuihin perustuvalle järjestämiselle

5 Verkkoalgoritmeja. 5.1 Verkkojen esitystapoja

(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ä.

Tietorakenteet, esimerkkivastauksia viikon 12 laskareihin

3.4 Peruutus (backtracking)

Miten osoitetaan joukot samoiksi?

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

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

Datatähti 2019 loppu

Algoritmit 2. Luento 13 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.

Algoritmit 1. Luento 2 Ke Timo Männikkö

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

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

7.4 Sormenjälkitekniikka

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

Tietorakenteet ja algoritmit - syksy

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

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

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 2. Luento 9 Ti Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

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

Binäärihaun vertailujärjestys

Tietorakenteet, laskuharjoitus 1,

Transkriptio:

Algoritmi on periaatteellisella tasolla seuraava: Dijkstra(V, E, l, v 0 ): S := { v 0 } D[v 0 ] := 0 for v V S do D[v] := l(v 0, v) end for while S V do valitse v V S jolle D[v] on minimaalinen S := S { v } for w V S do D[w] := min { D[w], D[v] + l(v, w) } end for end while return D Tehokkuuden kannalta on merkittävää, millaisella tietorakenteella operaatio valitse v toteutetaan. Palataan tähän myöhemmin. Osoitetaan ensin algoritmin oikeellisuus. Lause Dijkstran algoritmin palautamalle taulukolla D pätee D[v] = δ(v) kaikilla v V. 149

Todistus Ilmeisesti algoritmin suoritus aina päättyy, ja tällöin S = V. Lause seuraa osoittamalla induktiolla joukon S koon suhteen seuraava väite: 1. jos w S niin D[w] = δ(w) 2. muuten D[w] on lyhimmän sellaisen polun pituus, joka alkaa solmusta v 0, päättyy solmuun w eikä käy muissa joukon V S solmuissa. Perustapaus: Kun S = 1, niin S = { v 0 }. Koska D[v 0 ] = 0 = δ(v 0 ) ja kaikilla v v 0 pätee D[v] = l(v 0, v), väite on tosi. Induktioaskel: Oletetaan, että väite pätee tietyllä joukolla S. Osoitetaan, että se pätee myös joukolla S { v }, kun v on valittu ja D päivitetty kuten algoritmissa. Kohta 1: Pitää osoittaa, että päivityksen jälkeen D[v] = δ(v). Induktio-oletuksen mukaan D[v] on ennen päivitystä erään polun pituus solmusta v 0 solmuun v. Päivitys ei ainakaan kasvata arvoa D[v], joten sen jälkeenkin erityisesti pätee δ(v) D[v]. 150

Pitää vielä osoittaa D[v] δ(v). Tehdään vastaoletus δ(v) < D[v]. Olkoon π (jokin) lyhin polku solmusta v 0 solmuun v. Induktio-oletuksen mukaan D[v] on ennen päivitystä lyhin polun pituus solmuun v kun käytetään vain joukon S { v } solmuja, eikä D[v] muutu päivityksessä. Siis polulla π on ainakin yksi solmu joukon S { v } ulkopuolelta. Olkoon x ensimmäinen joukkoon S { v } kuulumaton solmu polulla π, ja olkoon π polun π alkuosa joka päättyy solmuun x. Selvästi π on lyhin polku solmuun x ja sisältää vain joukon S { x } solmuja, joten induktio-oletuksen nojalla D[x] on polun π pituus. Koska π on polun π alkuosa, D[x] on korkeintaan polun π pituus. Oletuksen mukaan polun π pituus on δ(v) < D[v], joten D[x] < D[v]. Tämä on kuitenkin ristiriidassa alkion v valinnan kanssa. Kohta 1 on todistettu. 151

S π x v 0 π v Kohta 1. 152

Kohta 2: Olkoon w S { v }, ja π lyhin polku solmuun w käyttäen vain joukon S { v, w } solmuja. Pitää osoittaa, että polun π pituus on min { D[w], D[v] + l(v, w) } missä D viittaa taulukon arvoon ennen päivitystä. On kolme mahdollisuutta: 1. Polku π ei kulje solmun v kautta. Nyt induktio-oletuksen nojalla polun π pituus on D[w], ja D[w] D[v] + l(v, w). 2. Polku π kulkee joukossa S, kunnes tulee solmuun v ja siitä suoraan solmuun w. Taas induktio-oletuksesta seuraa, että polun π pituus on D[v] + l(v, w) ja D[w] D[v] + l(v, w). 3. Polku π kulkee solmun v kautta, mutta palaa joukkoon S ennen päätymistä solmuun w. Olkoon x solmua v seuraava solmu polulla π. Nyt x S, joten oletuksen mukaan lyhin polku solmuun x kulkee joukon S sisällä. Ottamalla tämä lyhin polku korvaamaan polun π alkuosan solmuun x saakka saadaan polku π, joka ei ole pitempi kuin π eikä kulje solmun v kautta. Tämä tapaus palautuu siis tapaukseen 1. Kohta 2 ja siis lause on todistettu. 153

S π x v 0 π v Kohta 2, tapaus 3. 154

Aikavaativuus Suoraviivainen vierusmatriisiin perustuva toteutus antaa helposti aikavaativuuden O( V 2 ). Vieruslistaesityksellä ja sopivilla aputietorakenteilla saadaan aikavaativuus O( V log V + E ), joka on parempi harvoille verkoille ( E V 2 ). Palautetaan mieliin (käännetty) prioriteettijono. On kiinnitetty järjestetty joukko K ( avaimet ) ja mielivaltainen joukko D ( data ). Prioriteettijono ylläpitää joukkoja Q K D seuraavilla operaatioilla: Empty(Q): Q := Insert(Q, x, d): Q := Q { (x, d) } Minimum(Q): palauttaa sellaisen parin (x, d) Q että x on suurin mahdollinen Extract-Min(S): palauttaa sellaisen parin (x, d) Q, että x on suurin mahdollinen, ja poistaa sen joukosta Decrease-Key(Q, x, y, d): korvaa alkio (x, d) Q alkiolla (y, d); operaatio on sallittu vain jos oletetaan y x ( Alkuperäisessä prioriteettijonossa on vastaavasti operaatiot Maximum, Extract-Max ja Increase-Key.) 155

Esitetään Dijkstran algoritmi käyttäen prioriteettijonoa, jonka avaimia ovat polunpituudet ja dataa solmujen nimet. Oletetaan, että A[v] on solmun v vieruslista verkossa (V, E). Dijkstra(V, E, l, v 0 ): S := { v 0 } D[v 0 ] := 0 Empty(Q) for v V S do D[v] := l(v 0, v) Insert(Q, D[v], v) end for while S < n do 1. (x, v) := Extract-Min(S) 2. S := S { v } 3. for w A[v] do 4. x := D[v] + l(v, w) 5. if x < D[w] then 6. Decrease-Key(Q, w, D[w], x) end if end for end while return D 156

Aikavaatimus selvästi määräytyy while-silmukan sisällä olevista prioriteettijono-operaatioista. Rivin 1. Extract-Min suoritetaan V 1 kertaa. Rivin 6. Decrease-Key-operaation suorituskertojen lukumäärä on korkeintaan vieruslistojen yhteispituus eli E. Kurssilla Tietorakenteet on opittu, miten n alkion prioriteettijono voidaan toteuttaa kekoa käyttäen ajassa O(log n) per operaatio. Aikavaatimukseksi tulee ( V + E ) log V. Jatkossa esiteltävillä Fibonacci-keoilla aikavaatimusta saadaan parannetuksi sikäli, että operaation Decrease-Key tasoitetuksi aikavaatimukseksi tuleekin vain O(1). Dijkstran algoritmin aikavaatimukseksi tulee tällöin V log V + E. (Fibonacci-keot ovat suhteellisen monimutkainen tietorakenne eikä välttämättä kovin käytännöllinen.) 157

Pienin virittävä puu (minimum spanning tree) Olkoon G = (V, E) suuntaamaton verkko ja G = (V, E ) sen osaverkko (V V ja E E (V V )). Jos V = V, sanomme että G virittää verkon G. Jos lisäksi G on syklitön, se on virittävä metsä. Jos lisäksi G on yhtenäinen, se on virittävä puu. (Huom. virittävä metsä on virittävä puu joss E = V 1.) Oletetaan vielä, että kuhunkin verkon kaareen e E liittyy paino l(e) 0. Aliverkon G kustannus on l(g ) = e E l(e). Yhtenäisen verkon pienin virittävä puu on kustannukseltaan minimaalinen virittävä puu. Tällainen on olemassa joss verkko on yhtenäinen; se ei välttämättä ole yksikäsitteinen. Sovelluksia: tietoliikenneverkot, piirisuunnittelu, osana muita verkkoalgoritmeja. Virittäviä puita esim. täydellisellä verkolla on eksponentiaalinen määrä, joten kaikkien mahdollisuuksien kokeileminen on tehotonta. 158

6 5 1 5 3 6 5 4 2 Verkko G 6. Eräs virittävä puu G l(g ) = 1 + 5 + 4 + 6 + 5 = 21. Pienin virittävä puu G l(g ) = 3 + 5 + 1 + 4 + 2 = 15. 159

Esitetään ahne Kruskalin algoritmi pienimmän virittävän puun löytämiseksi yhtenäiselle verkolle. Algoritmi pitää yllä kaarijoukkoa T E, jolla (V, T ) on metsä. Joukkoa T kasvatetaan yksi kaari kerrallaan, kunnes saadaan yhtenäinen osaverkko. Kruskal(V, E, l): T := L := E while T < V 1 do valitse e = (v, w) Q jolla l(e) on minimaalinen L := L { e } if v ja w kuuluvat eri puihin metsässä (V, T ) then T := T { e } end while return (V, T ) Aikavaativuusanalyysissä keskeinen kysymys on, miten testataan solmujen kuuluminen eri puihin. Tämä on esimerkki erillisten joukkojen yhdisteistä (Union-Find), johon sopiva tehokas tietorakenne esitetään myöhemmin. Lopputulos on, että algoritmi toimii ajassa O( E log E ) = O( E log V ) eli joukon E järjestäminen painojen suhteen dominoi aikavaativuutta. (Huom. V 1 E V 2 ). 160

Kruskalin algoritmin oikeellisuustodistus perustuu invarianttiin, että (V, T ) on aina jonkin pienimmän virittävän puun osaverkko: Lemma Oletetaan että (V, E) on yhtenäinen ja T E. Oletetaan että Nyt on olemassa pienin virittävä puu (V, S) jolla T S ja e E on painoltaan minimaalinen kaari, jonka päätepisteet kuuluvat metsän (V, T ) eri puihin. on olemassa pienin virittävä puu (V, S ) jolla T { e } S. Lemmasta seuraa suoraan induktiolla joukon T koon suhteen, että Kruskalin algoritmi palauttaa jonkin pienimmän virittävän puun. 161

Lemman todistus Jos e S, voidaan valita S = S. Olkoon e S. Koska (V, S) on yhtenäinen ja syklitön, verkossa (V, S { e }) on tasan yksi sykli. Olkoon e jokin tämän syklin kaari, joka ei kuulu joukkoon T { e }. Tällainen kaari on olemassa, koska (V, T { e }) on syklitön. Valitaan S = S { e } { e }. Koska (V, S ) on syklitön ja S = S = V 1, niin (V, S ) on virittävä puu. Koska e T ja (V, T e ) on syklitön, kaaren e päätepisteet ovat metsän (V, T ) eri puissa. Kaaren e valinnasta seuraa, että l(e) l(e ). Siis l((v, S )) = l((v, S)) l(e ) + l(e) l((v, S)) joten myös (V, S ) on pienin virittävä puu. 162

Ahneiden algoritmien teoriaa Kruskalin algoritmi on esimerkki laajasta joukosta ahneita optimointialgoritmeja, joiden toimivuus voidaan perustella matroidien teorian avulla. Olkoon S äärellinen, ja olkoon I kokoelma joukon S osajoukkoja. Pari (S, I) on matroidi, jos seuraavat ehdot ovat voimassa: Perinnöllisyys: jos B I ja A B niin A S Vaihto-ominaisuus: jos A I, B I ja A < B, niin on olemassa x B A jolla A { x } I Kokoelman I joukkoja sanotaan riippumattomiksi. Esimerkki Olkoon S äärellinen ja I = { A S A k } jollain k. Selvästi I on perinnöllinen. Olkoon A I, B I ja A < B. Siis A k 1, joten A { x } I millä tahansa x. Koska A < B, on olemassa x B A. Siis vaihto-ominaisuus pätee, ja (S, I) on matroidi. 163

Esimerkki Olkoon G = (V, E) ja I = { T E (V, T ) on syklitön }. Merkitään M G = (E, I). Propositio M G on matroidi. Todistus Perinnöllisyys on ilmeistä. Olkoon A I, B I ja A < B. Siis (V, A) ja (V, B) ovat metsiä. Koska metsässä (V, A) on vähemmän kaaria, siinä on enemmän yhtenäisiä komponentteja (eli puita). Siis ainakin yksi metsän (V, B) puu sisältää solmuja ainakin kahdesta metsän (V, A) puusta. Voidaan siis valita kaari e B, jonka päätepisteet ovat metsän (V, A) eri puissa. Tällöin A { e } I. 164