Tietorakenteet, esimerkkivastauksia viikon 12 laskareihin

Samankaltaiset tiedostot
Tietorakenteet, esimerkkivastauksia viikon 12 laskareihin

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Algoritmit 1. Luento 9 Ti Timo Männikkö

Luku 8. Aluekyselyt. 8.1 Summataulukko

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

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

Algoritmi on periaatteellisella tasolla seuraava:

13 Lyhimmät painotetut polut

T Kevät 2003 Logiikka tietotekniikassa: erityiskysymyksiä I Laskuharjoitus 11 Ratkaisut

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

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

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

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

Algoritmit 1. Luento 8 Ke Timo Männikkö

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

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

Algoritmit 2. Luento 11 Ti Timo Männikkö

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

Datatähti 2019 loppu

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

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

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

Algoritmit 1. Luento 13 Ti Timo Männikkö

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

Algoritmit 1. Luento 13 Ma Timo Männikkö

Johdatus verkkoteoriaan 4. luento

Malliratkaisut Demot

Johdatus graafiteoriaan

Pienin virittävä puu (minimum spanning tree)

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

2. M : T kevät 2007 Laskennallisen logiikan jatkokurssi Laskuharjoitus 11 Ratkaisut 1. M :

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

Algoritmit 2. Luento 14 Ke Timo Männikkö

Harjoitus 6 ( )

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

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

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

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

Diskreetit rakenteet

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

Harjoitus 3 ( )

Tarkennamme geneeristä painamiskorotusalgoritmia

v 8 v 9 v 5 C v 3 v 4

Silmukkaoptimoinnista

Algoritmit 2. Luento 13 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Harjoitus 6 ( )

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

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, , Harjoitus 7, ratkaisu

TIE Tietorakenteet ja algoritmit 261

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Yhteenlaskun ja skalaarilla kertomisen ominaisuuksia

Harjoitus 3 ( )

s = 11 7 t = = 2 7 Sijoittamalla keskimmäiseen yhtälöön saadaan: k ( 2) = 0 2k = 8 k = 4

isomeerejä yhteensä yhdeksän kappaletta.

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

Lyhin kahden solmun välinen polku

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

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

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

Vektoreiden virittämä aliavaruus

10. Painotetut graafit

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

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Äärellisten mallien teoria

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

10. Painotetut graafit

Johdatus graafiteoriaan

Mat Lineaarinen ohjelmointi

Verkon virittävät puut

Mat Lineaarinen ohjelmointi

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

0 v i v j / E, M ij = 1 v i v j E.

Dynaaminen ohjelmointi ja vaikutuskaaviot

Mapu I Laskuharjoitus 2, tehtävä 1. Derivoidaan molemmat puolet, aloitetaan vasemmasta puolesta. Muistetaan että:

Mat Lineaarinen ohjelmointi

Algoritmit 1. Luento 10 Ke Timo Männikkö

Malliratkaisut Demot

Algoritmit 2. Luento 13 Ti Timo Männikkö

Lineaariset yhtälöryhmät ja matriisit

Ohjelmoinnin perusteet Y Python

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

Malliratkaisut Demot

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

10 Matriisit ja yhtälöryhmät

Algoritmit 2. Luento 10 To Timo Männikkö

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

Algoritmit 2. Luento 6 To Timo Männikkö

Matriisilaskenta Luento 8: LU-hajotelma

Harjoitus 4 ( )

Kombinatorinen optimointi

Derivointiesimerkkejä 2

Itsestabilointi: perusmääritelmiä ja klassisia tuloksia

Numeeriset menetelmät

Kytkentäkentät, luento 2 - Kolmiportaiset kentät

Johdatus verkkoteoriaan luento Netspace

Transkriptio:

Tietorakenteet, esimerkkivastauksia viikon laskareiin (a) Oletetaan seuraavan kuvan mukainen verkko ja etsitään lyyimpiä polkuja solmusta Ensimmäiseksi käsitellään solmu B, jonka etäisyys on kolme Seuraavaksi solmu, jonka on etäisyyeksi tulee B:n kautta Viimiseksi käsiteltävä solmu on, joka saa etäisyyekseen :n käsittelyn yteyessä muutetaan etäisyyttä solmuun, jonka etäisyyeksi saaaan neatiivisen kaaren ansiosta loritmin suoritus on päättynyt, mutta solmuun B jotaisikin :n ja :n kautta polku, jonka kustannukseksi tulee 99+ = B B B B () Jos kaikkien kaarien painoa lisätään saalla, ei neatiivisa kaari enää ole Nyt kuitenkin lyin polku solmusta solmuun B ei kulje enää alkuperäisen verkon tapaan solmujen ja kautta, sillä polun pituueksi tulee ++ = kun suran kaaren a paino on vain Floy-Warsall-aloritmi laskee jokaiselle verkon solmulle i ja j, kuinka pitkä on lyin polku, joka alkaa i:stä ja päättyy j:in loritmin toimintaa eivät äiritse maolliset verkossa olevat neatiiviset polut Kuitenkaan verkossa ei saa olla neatiivisia syklejä: silloin syklin sisältävää polkua voisi lyentää loputtomasti kulkemalla sykliä uuestaan ja uuestaan Floy-Warsall-aloritmi pitää kirjaa lyimmistä poluista matriiseissa k Oletetaan seuraavaksi, että verkossa on n solmua, jotka on numeroitu,, n Nyt kussakin matriisissa koassa k [i,j], eli rivillä i sarakkeessa j, lukee, kuinka pitkä on lyin verkossa oleva polku, joka alkaa solmusta i, päättyy solmuun j ja joka voi kulkea solmujen,,, k kautta käyttäen niitä välisolmuina Tutkitaan seuraavaksi Floy-Warsall-aloritmin toimintaa tetävässä annetulla verkolla Verkossa solmujen tunnukset ovat a,, ja korvataan ne nyt vastaavasti numeroilla,, ja

9 Matriisiin merkitään lyimmät polut, joissa ei ole välisolmuja Jos alkusolmu ja loppusolmu ovat samat, polun pituueksi merkitään, koska solmujen välillä on tyjä polku Jos alkusolmusta on kaari loppusolmuun, polun pituueksi merkitään tämän kaaren pituus Muuten alkusolmusta ei pääse loppusolmuun kulkematta välisolmujen kautta, joten polun pituueksi merkitään ääretön (ei polkua) = 9 Matriisiin merkitään lyimmät polut, jotka saavat kulkea solmunkautta Tässä verkossa kuitenkaan solmu ei ole yöyllinen välisolmu, koska mistään solmusta ei pääse solmuun eikä se voi lyentää mitään polkua Tämän vuoksi matriisi vastaa matriisia = 9 Matriisiin merkitään lyimmät polut, jotka saavat kulkea solmujen ja kautta Kun solmun sallitaan olevan välisolmuna, verkkoon ilmestyy yksi uusi polku: solmusta pääsee solmuun kulkemalla ensin solmusta solmuun ja sitten solmusta solmuun = 9

Matriisiin merkitään lyimmät polut, jotka saavat kulkea solmujen, ja kautta Uusi välisolmu tuo verkkoon kaksi uutta polkua: solmuista ja pääsee solmuun kulkemalla solmun kautta = 9 Matriisiin merkitään lyimmät polut, jotka saavat kulkea solmujen,, ja kautta eli kaikkien verkon solmujen kautta Ensinnäkin polku solmusta solmuun lyentyy kulkemalla suoran kaaren sijasta solmujen ja kautta Lisäksi solmusta pääsee nyt solmuun solmun kautta = 9 Nyt aloritmin suoritus on valmis ja matriisi sisältää lyimmän polun pituuen mistä taansa verkon solmusta miin taansa verkon solmuun Solmuun ei pääse mistään verkon solmusta, kun taas solmuiin, ja pääsee kaikista verkon solmuista Vastaavasti solmuun ei tule kaaria ja solmut, ja muoostavat syklin Otetaan käyttöön kaksiulotteinen taulukko polku Taulukon alkio polku[i, j] kertoo jonkin solmun, jonka kautta toistaiseksi tunnettu lyin i:n ja j:n välinen polku kulkee tai jos lyin tunnettu etäisyys solmujen välillä on niien välinen suora kaari (niinkuin tilanne on alussa), on polku[i, j] = j loritmin laskennan aikana polku[i, j] päivitetään arvoon k jos solmun k kautta kulkeminen aieuttaa [i,j]:n päivityksen: Floy-Warsall-v() for i = to n for j = to n if i == j [i,j] = else [i,j] = [i,j] if [i,j] = polku[i,j] = else polku[i, j] = j 9 for k = to n for i = to n for j = to n if [i,k]+[k,j] < [i,j] [i,j] = [i,k]+[k,j] polku[i,j] = k Kun alutaan eneroia lyin polku solmusta i solmuun j, kertoo polku[i, j] siis jonkin solmun jonka kautta lyin polku kulkee Jos polku[i,j] =, ei solmusta i ole polkua solmuun j Jos polku[i,j] = j, on solmujen välinen lyin polku niien välinen suora kaari ja lyintä polkua

ei tarvitse sen kummemmin selvittää Jos polku[i,j] = k, missä k j, on lyin polku siis i k j Väleillä i k ja k j voi olla useita solmuja polku[i,k] kertoo taas jonkun solmun joka on lyimmällä polulla i k Näin löytyy jälleen yksi solmu joka on lyimmän polun i j varrella Vastaavasti polku[k,i] kertoo jonkun solmun joka on lyimmällä polulla k i Lyin polku solmujen alku ja loppu välillä voiaan tulostaa alla olevan rekursiivisesti toimivan metoin avulla kutsumalla sitä lyinpolku(alku,loppu): lyinpolku(i,j) if polku[i,j] = j // i:n ja j:n lyin polku on suora kaari print(j) else k = polku[i,j] lyinpolku(i,k) lyinpolku(k,j) (a) loitetaan virittävän puun tekeminen solmusta a Jokaisessa vaieessa siis virittävään puuun liittyy sitä läimpänä oleva solmu ja kaari joka yistää läimpänä olevan solmun puuun, otetaan mukaan virittävään puuun Huom: aakkosjärjestyksen nouattaminen unotui Tilanteissa, joissa on kaksi tasaveroista valintaa, on valittu sattumanvarainen solmu a a a a a a

a a a () Kruskalin aloritmin ensimmäisessä vaieessa järjestetään kaaret painon mukaan kasvavasti (ja tetävän oletuksen mukaisesti saman painoiset aakkosjärjestyksessä): (a, ), (,), (,f), (f,), (,e), (,), (,), (,), (,), (e,f), (a,e), (,f), (,) Sitten käyään läpi kaaret eellä saaussa järjestyksessä ja otetaan kaari mukaan, jos se yistää kaksi erillistä virittävän metsän komponenttia Lopputuloksena saaaan seuraava pienin virittävä puu: a e f Jos samanpainoisia kaaria ei käyäkään läpi aakkosjärjestyksessä, saatetaan päätyä myös toisenlaiseen pienimpään virittävään puuun: Jos kaari (f,) käsitellään ennen kaarta (,f) ja muuten kuten eellä, niin saaaan puu a Jos taas kaari (e,f) käsitellään ennen kaarta (,) ja muuten kuten ensimmäisellä kerralla, saaaan puu

a e f Jos kaari (f,) käsitellään ennen kaarta (,f) ja kaari (e,f) ennen kaarta (,), saaaan puu a Kaarten (, e) ja (, ) käsittelyjärjestys ei vaikuta pienimmän virittävän puun rakenteeseen, koska molemmat kaaret tulevat mukaan joka tapauksessa Rautatieverkosto on esitetty verkkona G = (V, E), jonka solmuina on kaikki rautatieliikennepaikat ja kaarina niien väliset ratayteyet Kutakin ratayteyttä (u,v) meneville kuljetuksille on asetettu maksimipaino w(u, v) Tetävänä on määrittää suurin paino, jolle voiaantaata rautatiekuljetus minkä taansa kaen liikennepaikan välillä Ratkaisu Jos junan paino p tieetään, on elppoa tarkastaa, voiko junalla ajaa miltä taansa asemalta toiselle Tämä tapatuu valitsemalla jokin verkon solmu ja aloittamalla siitä verkon syvyyssuuntainen läpikäynti niin, että vain kaaret, joien paino on ainakin p, otetaan mukaan Jos lopuksi kaikissa verkon solmuissa on vierailtu, juna pystyy siirtymään kaikkien asemien välillä eikä paino p ei ole liian suuri Eellisen perusteella onelman voi ratkaista käymällä kaikki junan maolliset painot läpi ja valitsemalla niistä suurin kelvollinen Junan suurin sallittu paino on varmasti jokin liikennepaikkojen välisistä painoista, koska muuten junan painoa voisi vielä nostaa pilaamatta ytään reittiä Junan maollisia painoja on E ja yksi verkon läpikäynti vie aikaa O( E ), joten kokonaisaikavaativuus on O( E ) Ratkaisua voi vielä teostaa järjestämällä ensin junan maolliset painot ja etsimällä niistä suurin kelvollinen inääriaulla Nyt järjestämiseen kuluu aikaa O(lo( E ) E ) ja oikean painon löytämiseen kuluu aikaa O(lo( E ) E ), joten kokonaisaikavaativuus on O(lo( E ) E ) Ratkaisu Toinen tapa ratkaista onelma on muoostaa verkon suurin virittävä puu ja ilmoittaa junan painoksi puun keveimmän kaaren paino Verkon suurin virittävä puu on verkon virittävä puu, jonka kaarten yteispaino on maollisimman suuri Verkon suurimman virittävän puun voi löytää muuttamalla verkon kaikkien kaarten painot neatiivisiksi ja etsimällä näin saaun verkon pienin virittävä puu Tetävän Kruskalin ja Primin aloritmit toimivat myös silloin, kun verkossa on neatiivisia kaaria

Verkon suurin virittävä puu, kuten jokainen muukin virittävä puu, kytkee varmasti kaikki verkon solmut toisiinsa Puun kaarten painojen summa on suurin maollinen, mutta tämä ei vielä takaa, että myös keveimmän kaaren paino on suurin maollinen Seuraava tarkastelu osoittaa kuitenkin, että suurin virittävä puu ei voi sisältää kaarta, jota raskaampia kaikki jonkin toisen virittävän puun kaaret olisivat Oletetaan, että verkon suurimman virittävän puun kevein kaari k on solmujen a ja välillä Jos tämä kaari poistetaan, verkko jakaantuu kateen erilliseen osaan ja B Missä taansa virittävässä puussa täytyy olla jokin polku a:sta :en, jonka täytyy jossain vaieessa siirtyä :sta B:en Jos olisi saatavilla kaari k, joka siirtyy :sta B:en ja on raskaampi kuin kaari k, virittävän puun voisi kenties muoostaa niin, että sen kevein kaari on raskaampi kuin k Mutta myös alkuperäisessä puussa :n ja B:n välille voisi valita kaaren k, jolloin kaarten yteispaino kasvaisi eikä alkuperäinen puu olisikaan suurin virittävä puu Tässä ratkaisussa pääosan ajasta vie suurimman virittävän puun muoostus Kruskalin ja Primin aloritmien perustoteutusten aikavaativuuet ovat luokkaa O(lo( E ) E ), joten ratkaisun ja ratkaisun teokkuusero ei vaikuta suurelta