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

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

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

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

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

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

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

Algoritmi on periaatteellisella tasolla seuraava:

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

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

13 Lyhimmät painotetut polut

Algoritmit 1. Luento 13 Ti Timo Männikkö

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

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

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

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

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

Johdatus graafiteoriaan

Pienin virittävä puu (minimum spanning tree)

b) Määritä myös seuraavat joukot ja anna kussakin tapauksessa lyhyt sanallinen perustelu.

Algoritmit 1. Luento 13 Ma Timo Männikkö

Lyhin kahden solmun välinen polku

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

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

Algoritmit 1. Luento 8 Ke Timo Männikkö

10. Painotetut graafit

isomeerejä yhteensä yhdeksän kappaletta.

Algoritmit 2. Luento 2 To Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Algoritmit 2. Luento 14 Ke Timo Männikkö

Alaraja vertailuihin perustuvalle järjestämiselle

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

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

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

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

Algoritmit 1. Luento 14 Ke Timo Männikkö

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

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

Kokeessa saa olla mukana A4:n kokoinen kaksipuoleinen kynällä tehty, itse kirjoitettu lunttilappu

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

Verkon virittävät puut

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

Tietorakenteet, esimerkkivastauksia viikon 12 laskareihin

Algoritmit 2. Luento 11 Ti Timo Männikkö

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

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

10. Painotetut graafit

Malliratkaisut Demot

Johdatus lukuteoriaan Harjoitus 2 syksy 2008 Eemeli Blåsten. Ratkaisuehdotelma

Johdatus graafiteoriaan

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

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

v 8 v 9 v 5 C v 3 v 4

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

Mukautuvat järjestämisalgoritmit

Todistusmenetelmiä Miksi pitää todistaa?

2017 = = = = = = 26 1

PARITUS KAKSIJAKOISESSA

Algoritmit 1. Luento 9 Ti Timo Männikkö

Tiraka, yhteenveto tenttiinlukua varten

v 1 v 2 v 3 v 4 d lapsisolmua d 1 avainta lapsen v i alipuun avaimet k i 1 ja k i k 0 =, k d = Sisäsolmuissa vähint. yksi avain vähint.

Miten osoitetaan joukot samoiksi?

Algoritmit 2. Luento 6 Ke Timo Männikkö

Luku 8. Aluekyselyt. 8.1 Summataulukko

TIE Tietorakenteet ja algoritmit 261

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.

Tietorakenteet, laskuharjoitus 7, ratkaisuja

4.3. Matemaattinen induktio

4. Joukkojen käsittely

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9

Tietorakenteet, esimerkkivastauksia viikon 12 laskareihin

Algoritmit 2. Luento 6 To Timo Männikkö

missä on myös käytetty monisteen kaavaa 12. Pistä perustelut kohdilleen!

Algoritmit 2. Luento 5 Ti Timo Männikkö

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

6. Approksimointialgoritmit

Puiden karakterisointi

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

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

3SAT-ongelman NP-täydellisyys [HMU ]

Harjoitus 1 ( )

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

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

3.4 Peruutus (backtracking)

Algoritmit 1. Luento 10 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

T Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 7 (opetusmoniste, kappaleet )

Tietorakenteet ja algoritmit - syksy

Algoritmit 2. Luento 7 Ti Timo Männikkö

On annettu jono lukuja tai muita alkioita, joiden välille on määritelty suuruusjärjestys. Tehtävänä on saattaa alkiot suuruusjärjestykseen.

1 Puu, Keko ja Prioriteettijono

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

Diskreetin matematiikan perusteet Esimerkkiratkaisut 3 / vko 10

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

Ratkaisu: Käytetään induktiota propositiolauseen A rakenteen suhteen. Alkuaskel. A = p i jollain i N. Koska v(p i ) = 1 kaikilla i N, saadaan

MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä ym., osa I

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

MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä ym., osa I

Transkriptio:

58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 2, 652013, vastauksia 1 [6 pistettä] Vastaa jokaisesta alla olevasta väittämästä onko se tosi vai epätosi ja anna lyhyt perustelu Jokaisesta kohdasta saa maksimissaan 1 pisteen (a) Lomitusjärjestäminen on hyvä esimerkki dynaamisesta ohjelmoinnista Epätosi - Lomitusjärjestämisessä ongelma jaetaan pienempiin ongelmiin Lomistusjärjestäminen on esimerkki hajoita ja hallitse ratkaisutavasta Dynaamisessa ohjelmoinnissa on ideana jakaa ongelman ratkaisu pienempiin osaongelmiin, jotka voidaan ratkaista toisistaan riippumattomasti Jokaisen osaongelman ratkaisu tallennetaan muistiin, minkä ansiosta samaa osaongelmaa ei tarvitse ratkaista moneen kertaan (b) Pikajärjestäminen on vakaa järjestämisalgoritmi Epätosi - Pikajärjestäminen ei ole vakaa järjestämisalgoritmi, sillä kahden samanarvoisen alkion järjestys voi järjestettäessä vaihtua (c) Järjestämistä ei voi missään tilanteessa suorittaa nopeammin kuin ajassa Ω(n log n), missä n on järjestettävien alkioiden lukumäärä Epätosi - Jäejestyksen voi sorittaa nopeammin kuin Ω(n log n) mikäli järjestäminen perustuu johonkin muuhun kuin alkioiden keskinäiseen vertailuun Laskemisjärjestäminen (Counting sort) on hyvä esimerkki tästä (d) Syvyyssuuntaisella läpikäynnillä voi selvittää, onko suuntaamattomassa verkossa sykli Tosi - Hieman muunnellulla syvyyssuuntaisella haulla voidaan tarkistaa verkon syklittömyys (e) Dijkstran algoritmi on ahne algoritmi Tosi - Algoritmi pyrkii joka hetkellä juuri silloin "parhaalta"vaikuttavaan ratkaisuun (f) Kruskalin algoritmi union-find-tietorakenteella toimii ajassa O(n 2 ), kun kaarien lukumäärä on neliöllinen solmujen lukumäärän n suhteen Epätosi - Union-find-tietorakenteella algoritmi saadaan toiminaan ajassa O( E log V ) = O(n 2 log n) 2 [4 pistettä] Simuloi kekojärjestäminen alla olevalle taulukolle, jossa siis on alkiot 6, 1, 8, 5, 3 tässä järjestyksessä Esitä kukin välivaihe (piirrä esimerkiksi miten keko muuttuu kussakin heapify-operaatiossa) 1 2 3 4 5 6 1 8 5 3

Simuloidaan ensin build-heap Tämä aloitetaan alkiosta 2, sillä 5 2 = 2 6 1 8 [6, 1, 8, 5, 3] 5 3 heapify(2) 6 5 8 [6, 5, 8, 1, 3] 1 3 heapify(1) 8 5 6 [8, 5, 6, 1, 3] 1 3 Nyt muodostuneelle keolle simuloidaan loput järjestämisestä ensin vaihtaen viimeisen ja ensimmäisen alkion paikkaa sekä vähentäen keon kokoa yhdellä, sekä sitten korjaamalla kekoehdon kutsumalla heapify:ta ensimmäiselle alkiolle 8 5 6 [8, 5, 6, 1, 3] 1 3 vaihda ensimmäinen ja viimeinen alkio, heap-size-- 3 5 6 [3, 5, 6, 1 8] 1 (8)

heapify(1) 6 5 3 [6, 5, 3, 1 8] 1 (8) vaihda ensimmäinen ja viimeinen alkio, heap-size-- 1 5 3 [1, 5, 3 6, 8] heapify(1) 5 1 3 [5, 1, 3 6, 8] vaihda ensimmäinen ja viimeinen alkio, heap-size-- 3 1 (5) [3, 1 5, 6, 8] heapify(1) 3 1 (5) [3, 1 5, 6, 8]

vaihda ensimmäinen ja viimeinen alkio, heap-size-- 1 (3) (5) [1 3, 5, 6, 8] heapify(1) 1 (3) (5) [1 3, 5, 6, 8] Järjestys on valmis Lopputilanne: (1) (3) (5) [1, 3, 5, 6, 8] =============== Tehtävässä build-heap oli kahden pisteen arvoinen, ja loput järjestyksestä oli kahden pisteen arvoinen Virheistä tai puuttuvista välivaiheista jommassa kummassa vaiheessa sakotettiin Jos simuloitu järjestäminen ei ollut varsinaisesti kekojärjestäminen, mutta siinä käytettiin samaa logiikkaa kuin kekojärjestämisessä keon operaatioilla, sai ratkaisusta osan pisteistä 3 [6 pistettä] Olkoon G = (V, E) suuntaamaton (painottamaton) verkko, jonka solmut ovat kolmea eri muotoa: kolmioita, neliöitä ja ympyröitä Anna yksityiskohtainen algoritmi, joka tulostaa lyhimmän polun solmusta u solmuun v, niin että polun solmut ovat korkeintaan kahta muotoa (esimerkiksi vain kolmioita ja neliöitä) Analysoi algoritmisi aika- ja tilavaativuus Malliratkaisu Tehtävään oli kahdenlaisia oleellisesti erilaisia ratkaisutapoja Tapa 1 Erilaisia 2-joukkoja voidaan valita 3 alkion joukosta 3 erilaista: kolmiot ja neliöt, kolmiot ja ympyrät, ympyrät ja neliöt

Koska verkko on painottamaton, niin voimme suorittaa tavallisen leveyssuuntaisen läpikäynnin (BFS) Tarvitsemme muuntaa algoritmia vain niin, että kutsumme sitä kolme kertaa ja jokaisella kerralla emme käytä yhtä muodoista Esimerkkikoodi korkealla tasolla, algoritmit löytyvät suoraan luentomateriaalista: lyhyinreitti(g,u,v) reitti = BFS(G,u,v,kolmio) reitti = BFS(G,u,v,neliö) reitti = BFS(G,u,v,ympyrä) valitaan lyhin reiteistä ja tulostetaan se BFS(verkko,aloitussolmu,maalisolmu,kiellettyMuoto) muuten aivan sama kuin luentomateriaalin BFS kun tulemme solmuun ensimmäisen kerran, niin ehto on nyt muotoa: if distance[v] = ääretön and vmuoto!= kiellettymuoto Riittää siis käydä läpi kaikki mahdolliset muotojen kombinaatiot ja valita niistä lyhin Tämän voi toki tehdä myös Dijkstralla, mutta se on turhan raskas, sillä verkko ei ole painotettu Muiden kuin BFS käytöstä ei rankaistu, kunhan ne toimivat oikein Tapa 2 Suoritetaan BFS-haku niin, että jokainen solmu pitää kirjaa siitä, mistä muodosta siihen on tultu ja minkä muotoisia polkuja kyseisellä polulla on Huom Jokaisella solmulla tulee olla oma kirjanpito Globaali muuttuja, joka kertoo mitä muotoja polulla on tavattu ei riitä Silloin polulla käyvät muodot kiinnitetään jo heti kun on törmätty kahteen eri muotoiseen solmuun Haku ei etene solmuihin, jotka ovat eri muotoa kuin mistä polku jo koostuu Tämä solmu voi kuitenkin päätyä johonkin toiseen polkuun Ensimmäisenä maalin löytänyt polku on lyhin, sillä BFS etenee aina tason kerrallaan Tällä tavalla ratkaistuna algoritmi oli hieman erilainen jokaisessa vastauspaperissa, mutta idea oli sama; solmuilla on kenttä, joka pitää kirjaa siitä mitä muotoja reitillä on kohdattu BFS-algoritmin if-lause näyttää nyt tältä:

BFS2(G,alku,maali) sama kuin luentomateriaalin BFS u = dequeue(q) for jokaiselle u:n naapurille v if color(v) == white if!umuotolistasisältää(vmuoto) && umuotolistapituus == 1 umuotolistalisää(vmuoto) if umuotolistapituus < 3 && umuotolistasisältää(vmuoto) distance[v] = distance[u]+1 Yleisiä virheitä: Käytettiin DFS-hakua, joka ei löydä lyhyintä reittiä Myöskään Floyd-Warshallin käyttö ei toiminut ongelmaan Vaativuusanalyysit oli unohdettu Algoritmi palautti vain reitin pituuden, ei itse reittiä 2 tavassa käytettiin globaalia muuttujaa, joka kertoi mitä muotoja polussa on käytetty 4 [6 pistettä] Olkoon T suuntaamattoman painotetun verkon G = (V, E) jokin pienin virittävä puu Seuraavassa on kolme väitettä koskien tätä tilannetta Ilmoita kustakin, pitääkö se paikkansa Jos pitää, niin todista se Jos ei pidä, niin anna vastaesimerkki (a) Olkoon verkolla G yksikäsitteinen kevein kaari, joka on painoltaan p Jos muutetaan tämän keveimmän kaaren painoksi p k, jollekin k > 0, ja kaikki muut kaaret jäävät entiselleen, niin T on edelleen verkon pienin virittävä puu (b) Olkoon verkolla G yksikäsitteinen painavin kaari, joka on painoltaan p Jos muutetaan tämän painavimman kaaren painoksi p + k, jollekin k > 0, ja kaikki muut kaaret jäävät entiselleen, niin T on edelleen verkon pienin virittävä puu (c) Olkoon puulla T yksikäsitteinen painavin kaari, joka on painoltaan p Jos muutetaan tämän painavimman kaaren painoksi p + k, jollekin k > 0, ja kaikki muut kaaret jäävät entiselleen, niin T on edelleen verkon pienin virittävä puu Malliratkaisu (a) Pitää paikkaansa Olkoon kaari e = (u, v) verkon G yksikäsitteiesti kevein kaari Yksikäsitteisesti kevein kaari kuuluu aina verkon pienimpään virittävään puuhun Todistetaan tämä väite

Oletetaan, että T on verkon G pienin virittävä puu, ja e / T Nyt puussa T on polku solmusta u solmuun v Olkoon e jokin tämän polun kaari Nyt koska e on verkon yksikäsitteisesti kevein kaari, pätee w(e ) > w(e) Nyt T {e} \ {e } on virittävä puu, jonka paino on pienempi kuin pienimmän virittävän puun T Tämä on ristiriita Jos kaaren e paino pienennetään, se on vieläkin selvästi yksikäsitteisesti kevein kaari Edellisen väitteen mukaan muutoksesta huolimatta kaari e kuuluu puuhun T Nyt koska muut kaaret eivät muuttuneet, on T edelleen verkon G pienin virittävä puu (b) Pitää paikkaansa Olkoon e verkon G yksikäsitteisesti painavin kaari Meillä on kaksi tapausta: joko e T, tai e / T Todistetaan nämä kaksi tapausta yksitellen i e T : Pienimpään virittävään puuhun T kuuluu yksikäsitteisesti painavin kaari e jos ja vain jos se on ainoa reitti solmuun v G, kun e = (u, v) ja u G Todistetaan tämä väite Jos olisi toinen reitti u:sta v:hen, voisimme valita siltä reitiltä jokin toinen kaari e Koska e oli yksikäsitteisesti painavin, on w(e ) < w(e) Nyt T {e } \ {e} on verkon virittävä puu, jonka paino on pienempi kuin pienimmän virittävän puun T Tämä on ristiriita Jos kaaren e paino kasvatetaan, se on vieläkin selvästi yksikäsitteisesti painavin kaari Edellisen väitteen mukaan muutoksesta huolimatta kaari e kuuluu puuhun T Nyt koska muut kaaret eivät muuttuneet, on T edelleen verkon G pienin virittävä puu ii e / T : Jos nyt kasvatetaan kaaren e paino, se ei vaikuta puun T painoon, koska se ei ole siinä mukana Tämä yksikäsitteisesti painavin kaari e ei voisi tulla uudessa verkossa mukaan pienimpään virittävään puuhun, koska se tarkoittaisi että pitäisi ottaa pois jokin kevyempi kaari, jos e lisättäisiin Tämä johtaisi painavampaan virittävään puuhun kuin T Puu T on edelleen pienin virittävä puu

(c) Ei pidä paikkaansa Osoitamme tämän vastaesimerkin avulla Olkoon verkko G ensimmäisessä kuvassa esitetty verkko Tämän puun pienin virittävä puu on esitetty toisessa kuvassa Nyt tämän virittävän puun painavin kaari on e = (A, C) Nyt jos tämän kaaren painoksi muutetaan 2 + 2 = 4, niin verkon G pienin virittävä puu muuttuu kolmannen kuvan mukaiseksi Puutteellisista perusteluista sekä vääristä väittämistä vähennettiin pisteitä kohdissa (a) sekä (b), kuitenkin niin että esim Kruskalin algoritmia käyttävät perustelut hyväksyttiin On kuitenkin muistettava, että Kruskal tuottaa vain jonkin pienimmmän virittävän puun Kohdassa (c) pisteitä vähennettiin virheellisestä vastaesimerkistä