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

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

811312A Tietorakenteet ja algoritmit, , Harjoitus 6, Ratkaisu

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

811312A Tietorakenteet ja algoritmit, , Harjoitus 6, Ratkaisu

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

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

Algoritmit 2. Demot Timo Männikkö

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.

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

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

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

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

Lyhin kahden solmun välinen polku

Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmi on periaatteellisella tasolla seuraava:

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 1. Luento 13 Ti Timo Männikkö

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

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

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

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 2. Luento 14 Ke Timo Männikkö

TIE Tietorakenteet ja algoritmit 261

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

Algoritmit 1. Luento 13 Ma Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 11 Ti Timo Männikkö

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

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

Algoritmit 2. Luento 12 To Timo Männikkö

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

13 Lyhimmät painotetut polut

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Tietorakenteet ja algoritmit. Verkot. Ari Korhonen

10. Painotetut graafit

Verkon virittävät puut

Tarkennamme geneeristä painamiskorotusalgoritmia

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

Algoritmit 1. Demot Timo Männikkö

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

Algoritmit 2. Demot Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Algoritmit 2. Luento 2 To Timo Männikkö

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

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

Algoritmit 2. Luento 12 Ke Timo Männikkö

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

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

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

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

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

Algoritmit 1. Luento 12 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Algoritmit 1. Demot Timo Männikkö

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

.. X JOHDATUS TEKOÄLYYN TEEMU ROOS

Datatähti 2019 loppu

Algoritmit 1. Luento 5 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

JOHDATUS TEKOÄLYYN TEEMU ROOS

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

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

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

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Alaraja vertailuihin perustuvalle järjestämiselle

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

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

Algoritmit 2. Luento 3 Ti Timo Männikkö

Ohjelmoinnin peruskurssi Y1

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

10. Painotetut graafit

Algoritmit 1. Luento 10 Ke Timo Männikkö

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 2. Luento 6 To Timo Männikkö

isomeerejä yhteensä yhdeksän kappaletta.

Algoritmit 2. Luento 10 To Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö

JOHDATUS TEKOÄLYYN TEEMU ROOS

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

JOHDATUS TEKOÄLYYN TEEMU ROOS

Luku 8. Aluekyselyt. 8.1 Summataulukko

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

Algoritmit 1. Demot Timo Männikkö

JOHDATUS TEKOÄLYYN TEEMU ROOS

Pienin virittävä puu (minimum spanning tree)

Sisältö. 2. Taulukot. Yleistä. Yleistä

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 2. Luento 3 Ti Timo Männikkö

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Johdatus verkkoteoriaan 4. luento

5/20: Algoritmirakenteita III

5 Verkkoalgoritmeja. 5.1 Verkkojen esitystapoja

Transkriptio:

Tietorakenteet, kevät 2012 Kurssikoe 2, mallivastaukset 2. (a) Järjestämistä ei voi missään tilanteessa suorittaa nopeammin kuin ajassa Θ(n log n), missä n on järjestettävän taulukon pituus. Epätosi: Yleisessä tapauksessa, jos alkioista ei tiedetä mitään, väite pitää paikkansa, sillä alkioita joudutaan vertailemaan, mutta esim. rajoitetulle kokonaislukujoukolle laskemisjärjestäminen on lineaariaikainen. (b) Jos verkko on täydellinen, eli kaikkien solmuparien välillä on olemassa kaari, niin syvyyssuuntainen läpikäynti vie aikaa Θ(n 2 ), missä n on verkon solmujen lukumäärä. Tosi: Algoritmin aikavaativuus on O( V + E ). Koska täydellisessä verkossa on jokaista solmua kohden n kappaletta DFS-visitin for-loopissa tarkastettavia kaaria, aikavaativuus on toisin sanoen Θ(n 2 ). Useassa vastauksessa oli pidetty väittämää epätotena vedoten siihen, että aikavaativuus on O( V + E ). Tarkoituksena on kuitenkin osoittaa, että täydelliselle suunnatulle verkolle nimenomaan O( V + E ) = Θ(n + (n-1)*(n) / 2) = Θ(n 2 ), sillä täydellisessä suunnatussa verkossa kaarten lukumäärä on (n-1)*(n) kaarta (ja suuntaamattomassa tietysti (n-1)*(n) / 2). Tämä on selvää, jos ajatellaan, että ensimmäisestä solmusta vedetään kaaret n-1 solmuun, toisesta n-2, ja niin edelleen, kunnes toiseksi viimeisestä vedetään yksi solmu viimeiseen. Summakaavalla saadaan yllä oleva lauseke. Oikeasta tosi-epätosi -väittämästä saa pisteen, ja hyvästä perustelusta toisen.

4. Tehtävässä tulee löytää lyhin mahdollinen polku solmusta s solmuun t, joten leveyshaku on järkevin ratkaisu, sillä ensimmäinen löytyvä polku on myös lyhin (tai yksi lyhimmistä). Siniset ja punaiset kaaret tulee ottaa huomioon siten, että jokainen solmu muistaa, minkä väristä kaarta pitkin siihen on tultu, eikä jatka leveyshakua samanvärisiä kaaria pitkin. Käytetään apujonoa Q, apupinoa S, ja kummallekin värille aputauluja visited, distance ja tree (tai tallennetaan nämä tiedot solmuihin). Kumpikin väri tarvitsee oman aputaulukon, sillä tilanne, jossa samaan solmuun johtaa kaksi eripituista eriväriseen kaareen päättyvää solmua johtaa vaikeuksiin (ks. viimeinen sivu). Kun solmuun on kerran saavuttu (visited) sekä punaisesta, että sinisestä solmusta, sitä ei tarvitse enää käsitellä. RedBlue-BFS(G,s,t) for jokaiselle u ϵ V red-visited = false blue-visited = false red-distance[u] = blue-distance[u] = red-tree[u] = NIL blue-tree[u] = NIL red-distance[s] = 0 blue-distance[s] = 0 red-visited[s] = true blue-visited[s] = true enqueue(q,s) while(not empty(q)) u = dequeue(q) for jokaiselle v ϵ vierus[u] if red-visited[v] and blue-visited[v] continue if edgecolor(u,v) == blue and red-distance[u] < blue-distance[v] blue-distance[v] = red-distance[u] + 1 blue-tree[v] = u blue-visited[v] = true if edgecolor(u,v) == red and blue-distance[u] < red-distance[v] red-distance[v] = blue-distance[u] + 1 red-tree[v] = u red-visited[v] = true if v == t return min(red-distance[t], blue-distance[t]) return

u = blue-tree[t] nextcolor = red if red-distance[t] < blue-distance[t] u = red-tree[t] nextcolor = blue while u!= s push(s,u) if nextcolor == red u = red-tree[u] nextcolor = blue else u = blue-tree[u] nextcolor = red while (not empty(s)) u = pop(s) print(u) Toinen toimiva vaihtoehto on tehdä kaksi verkkoa G ja G', joissa on samat solmut, mutta siniset kaaret alkavat verkosta G ja saapuvat G':n solmuihin, ja punaiset kaaret alkavat verkosta G' ja päättyvät G:n solmuihin. Nyt suoritetaan leveyshaku siten, että aloitetaan kummankin verkon s- solmusta ja päädytään kumman tahansa verkon t-solmuun. Yksi ratkaisu on myös voi lähteä etenemään molemmista suunnista, sillä jompi kumpi reitti pääsee aina etenemään. Arvostelu: 8p Toimiva ratkaisu, jossa aikavaativuus oikein. 7p Ratkaisu ei ihan toimi, joitain loogisia virheitä tai puutteita. 6p Ratkaisu hyvä, mutta on myös virheitä. Maksimipistemäärä pelkällä seuraavalla sivulla kuvatulla leveyshaulla. 4-5p Oikean suuntaisia ideoita toteutettuna, mutta on myös oleellisia puutteita. Seuraavan sivun leveyshakuversio oikein vähäisillä puutteilla. 1-3p Ratkaisussa oikeita elementtejä, mutta siinä on myös merkittäviä puutteita, se on kesken, sekava, tai aikavaativuutta ei saavuteta. 0p Ei yritystä tai yritys on mitätön. -1p / -2p Tulostus on virheellinen tai puuttuu.

4. HIEMAN VIRHEELLINEN VERSIO Varsin moni vastasi seuraavan kaltaisella algoritmilla, joka ei kuitenkaan toimi yleisessä tapauksessa, jos solmuun tulee sekä sininen, että punainen kaari, ja vain pidempää reittiä pääsee maaliin. Leveyshaku on hyvä idea, mutta pitää olla tarkkana, ettei estä hakua ennen kuin sekä punainen, että sininen tulokaari on käsitelty. Muutamassa vastauksessa oli tarkasteltu erikseen punaisella ja sinisellä kaarella alkavat reitit. Tämä on yksi toimiva tapa pitää kirjaa siitä, että joka toinen kaari on punainen ja joka toinen sininen, mutta sekään ei auta yllä mainittuun ongelmaan jos haarautuva kohta on aloitussolmun naapureita kauempana verkossa (ks. viimeisen sivun kuva). Käytetään apujonoa Q, apupinoa S, ja aputauluja color, distance ja tree (tai tallennetaan nämä tiedot solmuihin). Solmun väri color on aluksi white, ja myöhemmin red tai blue tulokaaren värin mukaan. RedBlue-BFS(G,s,t) for jokaiselle u ϵ V color[u] = white distance[u] = tree[u] = NIL distance[s] = 0 color[s] = black enqueue(q,s) while(not empty(q)) u = dequeue(q) for jokaiselle v ϵ vierus[u] if edgecolor(u,v)!= color(u) and color[v] == white color[v] = edgecolor(u,v) distance[v] = distance[u] + 1 tree[v] = u if v == t u = tree[v] while u!= s push(s,u) u = tree[u] while (not empty(s)) u = pop(s) print(u)

Ei toimi esim. seuraavalla verkolla, koska s:n ja t:n välinen solmu ei ole enää valkoinen, kun siihen päästään: