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

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

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

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

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

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

Algoritmi on periaatteellisella tasolla seuraava:

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

Algoritmit 1. Luento 13 Ti Timo Männikkö

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

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.

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

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

Pienin virittävä puu (minimum spanning tree)

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

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

Algoritmit 1. Luento 13 Ma Timo Männikkö

Tietorakenteet, laskuharjoitus 7, ratkaisuja

10. Painotetut graafit

Algoritmit 2. Luento 5 Ti Timo Männikkö

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

13 Lyhimmät painotetut polut

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

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

Johdatus graafiteoriaan

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

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

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

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

Algoritmit 2. Luento 11 Ti Timo Männikkö

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

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

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

Verkon virittävät puut

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

Algoritmit 1. Luento 7 Ti Timo Männikkö

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

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

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

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

Luku 8. Aluekyselyt. 8.1 Summataulukko

Algoritmit 2. Luento 3 Ti Timo Männikkö

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

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

Algoritmit 1. Luento 6 Ke Timo Männikkö

10. Painotetut graafit

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

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

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

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

isomeerejä yhteensä yhdeksän kappaletta.

Datatähti 2019 loppu

v 8 v 9 v 5 C v 3 v 4

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö

Miten osoitetaan joukot samoiksi?

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

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

Algoritmit 2. Luento 6 To Timo Männikkö

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

Algoritmit 2. Luento 6 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 2. Luento 3 Ti Timo Männikkö

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

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

4. Joukkojen käsittely

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

Algoritmit 2. Luento 9 Ti Timo Männikkö

Malliratkaisut Demot

Algoritmit 1. Luento 9 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

Tietorakenteet, laskuharjoitus 6,

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

Tietorakenteet, esimerkkivastauksia viikon 12 laskareihin

Tarkennamme geneeristä painamiskorotusalgoritmia

Algoritmit 2. Luento 14 To Timo Männikkö

Algoritmit 2. Luento 12 Ke Timo Männikkö

1 Puu, Keko ja Prioriteettijono

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 14 Ke Timo Männikkö

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

Algoritmit 1. Luento 10 Ke Timo Männikkö

A TIETORAKENTEET JA ALGORITMIT KORVAAVAT HARJOITUSTEHTÄVÄT 3, DEADLINE KLO 12:00

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

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

Binäärihaun vertailujärjestys

Liite 2: Verkot ja todennäköisyyslaskenta

Sekalaiset tehtävät, 11. syyskuuta 2005, sivu 1 / 13. Tehtäviä

Tiraka, yhteenveto tenttiinlukua varten

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Todistusmenetelmiä Miksi pitää todistaa?

Puiden karakterisointi

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

Anna Kuikka Pyöräkatu 9 B Kuopio GSM: Opiskelijanro: 60219K. Prioriteettijonot

Malliratkaisut Demot

Transkriptio:

Tietorakenteet ja algoritmit (syksy 0) Toinen välikoe, malliratkaisut. (a) Alussa puu näyttää tältä: Lisätään 4: 4 Tasapaino rikkoutuu solmussa. Tehdään kaksoiskierto ensin oikealle solmusta ja sitten vasemmalle solmusta. (RightLeftRotate) 4 Lisätään 0: 4 0 Tasapaino rikkoutuu solmussa. Tämä voidaan ratkaista kiertamällä vasem-

malle (LeftRotate): 4 0 (b) Alussa puu näyttää tältä: Poistetaan : Tasapaino rikkoutuu solmussa. Tässä tapauksessa kaksoiskierto ei toimi, vaikka tälle puulle se tuottaisi tasapainoisen lopputuloksen. Kierretään vasemmalle (LeftRotate): Poistetaan. Tilalle tulee seuraaja eli :

Tasapaino rikkoutuu solmussa. Kierretään ensin vasemmalle solmusta, ja sitten oikealle solmusta (LeftRightRotate):. (a) Keko on binääripuu jossa on löyhä järjestys, jotta voidaan pitää tehokkaasti yllä tietoa siitä mikä on kulloinkin pienin alkio jos keko on minimikeko, tai suurin alkio, jos se on maksimikeko. Yleensä keko toteutetaan taulukon avulla siten että solmun i lapset ovat solmut i ja i +. Keko on hyödyllinen tilanteissa jossa halutaan joukosta pienin tai suurin sillä hetkellä, esimerkiksi Dijkstran algoritmissa kun halutaan lähin solmu kullakin hetkellä. Minimikeon kekoehdot ovat: (K) Kaikki lehdet ovat kahdella vierekkäisella tasolla k ja k+ siten että tason k+ lehdet ovat niin vasemmalla kuin mahdollista ja kaikilla k:ta ylempien tasojen solmuilla on kaksi lasta. (K) Jokaisen solmun arvo on pienempi tai yhtä pieni kuin kumpikaan sen lasten arvoista. (b) Oletetaan että taulukko on -indeksoitu eli ensimmäisen alkion indeksi on, eikä 0. Aluksi taulukko näyttää tältä: Aluksi kutsutaan metodia build-heap, joka muuttaa taulukon keoksi. Aluksi taulukko näyttää puumuodossa tältä: Seuraavaksi kutsutaan operaatiota heapify indekseille,, (eli indeksistä taul.length/ alaspäin, jotka ovat sisäsolmuja): Heapify(taul, ) heapify(taul, )

heapify(taul, ) Nyt meillä on maksimikeko, ja voimme alkaa siirtämään siitä lukuja taulukon loppuun yksi kerrallaan. Poistetaan suurin, eli. Tilalle tulee taulukon viimeinen, eli. Tämän jälkeen keon kokoa pienennetään yhdellä, ja kutsutaan heapify(taul, ) jonka jälkeen keko näyttää tältä: Taulukko, jossa on yhä suurin luku, nyt viimeisenä, näyttää tältä: Siirretään taulukon loppuun (nyt toiseksi viimeiselle paikalle) ja kutsutaan heapify juurelle: Taulukko näyttää nyt tältä: 4

Taulukko näyttää nyt tältä: Taulukko näyttää nyt tältä: Siirretään vielä paikalleen, ja pienennetään kekoa yhdellä. Nyt keossa on jäljellä enää pienin luku, joka on oikealla paikallaan eli taulukon ensimmäisenä. Taulukko on järjestyksessä ja olemme valmiita. Järjestetty taulukko:. Ratkaisun ideana on muuttaa verkkoa jotta päästään käyttämään Dijkstran algoritmia. Ideana on se, että jos tietyllä tiellä on tietyö, kasvatetaan sen kaaren painoa jollain hyvin suurella luvulla. Kunhan luku on tarpeeksi suuri, mikä tahansa reitti jolla on tietyö on huonompi kuin reitti jolla ei ole tietyötä, ja samoin jos reitillä A on vähemmän tietöitä kuin reitillä B, reitti on aina parempi. Koska kaikkien tietyökaarien painoa on kasvatettu yhtä paljon, reitit joilla on sama määrä tietöitä ovat yhä samassa järjestyksessä. Esimerkiksi jos reiteillä A ja B on vaikka tietyötä, ja kasvatamme tietyökaarien paino tuhannella, molempien reittien pituus kasvaa 000:lla ja niiden järjestys säilyy. Tietyön painolisäykseksi voimme valita esimerkiksi kaikkien kaarten painojen summan. Oletetaan etteivät kaarien painot ole niin suuria että niistä olisi vaikutusta aikavaativuuteen. Käytämme tavallista Dijkstraa, jonka aikavaativuus on O(( V + E )log V ). Verkon muuttamisessa käymme kaikki kaaret läpi kerran, ja mahdollisesti muutamme kaaren painoa, eli tähän kuluu aikaa O( E ). Tämä on kuitenkin pienempää kuin Dijkstran aikavaativuus, eli algoritmimme aikavaativuus on sama, siis O(( V + E )log V ). Samoin tilavaativuus on sama kuin Dijkstralla, O( V ). 4. Todistetaan väite vastaoletuksella. Olkoon meillä kaksi erilaista pienintä virittävää puuta T ja T, sekä e painavin kaari joukossa (T T )\(T T ). Vaihtamalla T ja T tarvittaessa keskenään voidaan olettaa, että e T \T. Kun e poistetaan puusta T, jakautuu se kahteen komponenttiin. Nämä komponentit voidaan yhdistää jollain kaarella e T \T, joka on kaaren e valinnan perusteella välttämättä kevyempi. Täten puun T = (T {e })\{e} paino on aidosti pienempi kuin puun T, joten T ei voi olla pienin virittävä puu. Tämä on ristiriita.

Joitakin todistusyritelmiä ja mikä niissä menee pieleen: Seuraavanlainen outo vastaoletus oli melko yleinen: oletetaan, että verkossa on monta kaarta samalla painolla ja sitten näytetään vastaesimerkillä, että pienin virittävä puu ei ole välttämättä yksikäsitteinen. Tästä todettiin sitten seuraavan pienimmän virittävän puun yksikäsitteisyys tapauksessa, jossa kaarien painot ovat erilliset, missä ei tietenkään ole mitään järkeä. Toinen yleinen moka oli tarkastella vain tapausta missä pienimmät virittävät puut T ja T eroavat vain yhdellä kaarella. Tässä tapauksessa on toki selvää, että toinen puista on painoltaan aidosti pienempi, mutta tämä ratkaisutapa ei ota ollenkaan huomioon sitä, että pienimmät virittävät puut voisivat erota useammallakin kuin vain yhdellä kaarella. Kolmas kohtuullisen yleinen tapa oli väittää, että jokaisen solmuparin välinen lyhin polku sisältyy aina pienimpään virittävään puuhun, ja käyttää tätä todistaessa pienimmän virittävän puun yksikäsitteisyyttä. Tämä väite ei pidä paikkaansa, esimerkiksi verkon 4 a b d c pienin virittävä puu on a b d c eikä solmujen a ja b välinen lyhin polku näin sisälly siihen. ARVOSTELUPERUSTEET Koska tehtävänannossa oli erikseen huomautus, ettei riitä ainoastaan tarkastella, miten Kruskalin (tai Primin) algoritmi rakentaa pienimmän virittävän puun, sai tällaisesta ratkaisusta yleensä 0 pistettä. Pisteitä saattoi saada, jos todistuksessa oli muutakin tämän lisäksi. Tehtävästä sai yhden pisteen pienestä ideasta, vähän suuremmasta ideasta sai jo kaksi pistettä. Kolmeen pisteeseen vaadittiin lähes oikeaa todistusta ja neljä pistettä saadakseen piti todistuksen olla oikein.