811312A Tietorakenteet ja algoritmit, , Harjoitus 6, Ratkaisu

Samankaltaiset tiedostot
811312A Tietorakenteet ja algoritmit, , Harjoitus 6, Ratkaisu

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

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

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

5 Verkkoalgoritmeja. 5.1 Verkkojen esitystapoja

6 Verkkoalgoritmeja. 6.1 Verkkojen esitystapoja

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 (kevät 2009) Harjoitus 11, ratkaisuja (Topi Musto)

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

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

Datatähti 2019 loppu

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

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

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

Ohjelmoinnin perusteet Y Python

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

Algoritmit 2. Luento 10 To Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

13 Lyhimmät painotetut polut

Ohjelmoinnin peruskurssi Y1

Verkon värittämistä hajautetuilla algoritmeilla

Algoritmit 2. Demot Timo Männikkö

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

Algoritmit 1. Luento 13 Ma Timo Männikkö

DMP / Kevät 2016 / Mallit Harjoitus 6 / viikko 13 / alkuviikko

keskenään isomorfiset? (Perustele!) Ratkaisu. Ovat. Tämän näkee indeksoimalla kärjet kuvan osoittamalla tavalla: a 1 b 3 a 5

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

Lyhin kahden solmun välinen polku

TIE Tietorakenteet ja algoritmit 261

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

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta Toteuta Pythonilla seuraava ohjelma:

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 1. Luento 13 Ti Timo Männikkö

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

Algoritmit 2. Luento 9 Ti Timo Männikkö

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

JOHDATUS TEKOÄLYYN TEEMU ROOS

Ohjelmoinnin perusteet Y Python

Luento 5. Timo Savola. 28. huhtikuuta 2006

Ohjelmoinnin perusteet Y Python

Johdatus verkkoteoriaan 4. luento

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

Itsestabilointi: perusmääritelmiä ja klassisia tuloksia

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Algoritmi on periaatteellisella tasolla seuraava:

Tietotekniikan valintakoe

Java-kielen perusteita

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Stabilointi. Marja Hassinen. p.1/48

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

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

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

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

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

Luku 8. Aluekyselyt. 8.1 Summataulukko

T Syksy 2002 Tietojenkäsittelyteorian perusteet Harjoitus 8 Demonstraatiotehtävien ratkaisut

Pienin virittävä puu (minimum spanning tree)

Toinen harjoitustyö. ASCII-grafiikkaa

ja λ 2 = 2x 1r 0 x 2 + 2x 1r 0 x 2

JOHDATUS TEKOÄLYYN TEEMU ROOS

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

JOHDATUS TEKOÄLYYN TEEMU ROOS

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

Ohjelmoinnin perusteet Y Python

Algoritmit 2. Luento 11 Ti Timo Männikkö

Ohjelmoinnin peruskurssien laaja oppimäärä

M =(K, Σ, Γ,, s, F ) Σ ={a, b} Γ ={c, d} = {( (s, a, e), (s, cd) ), ( (s, e, e), (f, e) ), (f, e, d), (f, e)

Ohjelmoinnin perusteet Y Python

Python-ohjelmointi Harjoitus 2

Algoritmit 2. Luento 2 Ke Timo Männikkö

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

v 8 v 9 v 5 C v 3 v 4

Määrittelydokumentti

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Algoritmit 2. Luento 2 To Timo Männikkö

Ohjelmoinnin peruskurssi Y1

JOHDATUS TEKOÄLYYN TEEMU ROOS

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Algoritmit 2. Demot Timo Männikkö

POWERPOINT HARJOITUKSET OMAN ESITYSPOHJAN RAKENTAMINEN

.. X JOHDATUS TEKOÄLYYN TEEMU ROOS

Testaus käsite. Sekalaista testausasiaa. Testauksen käsitteestä. Kattavuusmitat. Jos ajatellaan, että testaus = V&V, voidaan erottaa:


Algoritmit 2. Luento 13 Ti Timo Männikkö

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

Tutoriaaliläsnäoloista

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

Stabiloivat synkronoijat ja nimeäminen

811120P Diskreetit rakenteet

S BAB ABA A aas bba B bbs c

Transkriptio:

811312A Tietorakenteet ja algoritmit, 2018-2019, Harjoitus 6, Ratkaisu Harjoituksen aiheet ovat verkkojen leveys- ja syvyyshakualgoritmit Tehtävä 6.1 Hae leveyshakualgoritmia käyttäen lyhin polku seuraavan sokkelon läpi, kun sokkeloon mennään vasemmasta yläkulmasta ja poistutaan oikeasta alakulmasta. Muodosta verkko (solmu jokaiseen sokkelon risteyskohtaan, jotka on alla merkitty kirjaimilla) ja suorita algoritmi yksityiskohtaisesti. a b e c h i d k j f g Ratkaisu. Saadaan verkko, jonka vieruslistaesitys on a b h b a c c b d e d c e c f f e g g f h a i i h j j i k k j Suoritetaan nyt leveyshaku lähtien solmusta a. Seuraavassa näkyy, miten taulukot color, d ja p täytetään. Taulukossa color tyhjä paikka tarkoittaa valkoista väriä, kirjain G harmaata ja kirjain B mustaa. color G d 0 p IL

Solmun a naapurit ovat b ja h joten ne väritetään harmaaksi, päivitetään taulukot d sekä p ja laitetaan solmut jonoon, minkä jälkeen solmu a väritetään mustaksi. Jono: b,h. color B G G d 0 1 1 p IL a a yt solmu b otetaan jonosta ja käsitellään sen naapurit a ja c. äistä a ei enää ole valkoinen, joten sille ei tehdä mitään. Jono: h,c color B B G G d 0 1 2 1 p IL a b a Solmu h otetaan jonosta ja käsitellään sen naapurit a ja i. Jono: c,i. color B B G B G d 0 1 2 1 2 p IL a b a h Solmu c otetaan jonosta ja käsitellään sen naapurit b,d ja e. Jono: i,d,e. color B B B G G B G d 0 1 2 3 3 1 2 p IL a b c c a h Solmu i otetaan jonosta ja käsitellään sen naapurit h ja j. Jono: d,e,j. color B B B G G B B G d 0 1 2 3 3 1 2 3 p IL a b c c a h i Solmu d otetaan jonosta ja käsitellään sen naapuri c (ei valkoinen). Sitten otetaan jonosta e ja käsitellään sen naapurit. c ja f. Jono: j,f. color B B B B B G B B G d 0 1 2 3 3 4 1 2 3 p IL a b c c e a h i

Solmu j otetaan jonosta ja käsitellään sen naapuri i ja k. Jono: f,k. color B B B B B G B B B G d 0 1 2 3 3 4 1 2 3 4 p IL a b c c e a h i j Solmu f otetaan jonosta ja käsitellään sen naapuri e ja g. Jono: k,g. color B B B B B B G B B B G d 0 1 2 3 3 4 5 1 2 3 4 p IL a b c c e f a h i j Lopulta solmut k ja g otetaan jonosta ja väritetään mustiksi, jolloin algoritmi päättyy jonon tyhjetessä. color B B B B B B B B B B B d 0 1 2 3 3 4 5 1 2 3 4 p IL a b c c e f a h i j yt voidaan edeltäjätaulukosta p lukea polku solmusta a solmuun g. Lopusta alkuun luettuna polku on g,p[g]=f,p[f]=e,p[e]=c,p[c]=b,p[b]=a. Siis polku alusta loppuun on a,b,c,e,f,g.

Tehtävä 6.2 Kuten luennoista muistetaan, syvyyshakualgoritmi on seuraavan lainen: DFS(G) 1.for each u in V 2. color[u] = WHITE 3. p[u] = IL 4. time = 0 5.for each u in V 6. if color[u]==white 7. DFS_VISIT(u) 8.return DFS_VISIT(u) 1. color[u] = GRAY 2. time = time+1 3. d[u] = time 4. for each v in Adj[u] 5. if color[v]==white 6. p[v] = u 7. DFS_VISIT(v) 8. color[u] = BLACK 9. time = time+1 10.f[u] = time 11.return Suorita syvyyshaku seuraavalle suunnatulle verkolle lähtien solmusta a ja luokittele verkon välit puuväleihin, eteneviin väleihin, takautuviin väleihin ja poikittaisväleihin. Tarkista myös, voiko algoritmin suorituksen aikana havaita verkossa sykliä. a b c d e f h g Ratkaisu. Verkon G vieruslistaesitys on a d e h b c g c g d f e g f h g h d

Aloitetaan syvyyshaku solmusta a, jonka naapuri d käsitellään ensin, jolloin pinossa ovat solmut d ja a. Taulukkojen sisältö color G G p IL a d 1 2 f Sitten käsitellään solmun d naapuri f, ja sen naapuri h. Pinossa on nyt h,f,d,a ja taulukoissa color G G G G p IL a d f d 1 2 3 4 f Solmulla h ei enää ole valkeita naapureita, sen sijaan huomataan, että sillä on harmaa naapuri d, joten verkossa havaitaan sykli. Solmun h käsittely lopetetaan ja palataan solmuun f. Tälläkään ei enää ole valkeita naapureita, joten palataan solmuun d, jonka naapurit myös ovat jo käsittelyssä. Pinossa on enää solmu a: color G B B B p IL a d f d 1 2 3 4 f 7 6 5 Ollaan solmussa a, jolla on vielä valkea naapuri e, jota siirrytään käsittelemään; pinossa a ja e. color G B G B B p IL a a d f d 1 2 8 3 4 f 7 6 5 Solmulla e on valkea naapuri g, joka menee pinoon: color G B G B G B p IL a a d e f d 1 2 8 3 9 4 f 7 6 5

Solmuilla g,e ja a ei ole valkeita naapureita, joten pino tyhjenee ja taulukkoihin päivitetään arvot color B B B B B B p IL a a d e f d 1 2 8 3 9 4 f 12 7 11 6 10 5 Seuraavaksi siirrytään vielä valkeaan solmuun b, jolla on ainoana valkeana naapurina c. ämä käsitellään ja algoritmi päättyy: color B B B B B B B B p IL IL b a a d e f d 1 13 14 2 8 3 9 4 f 12 16 15 7 11 6 10 5 Syvyyssuuntaisen virittävän metsän muodostavat puut a b d e c f g h Luokitellaan nyt verkon välit. Välit (a,d),(d,f),(f,h),(a,e),(e,g) ja (b,c) ovat puuvälejä, koska niitä tutkimalla löydetään uudet solmut. ämä välit näkyvät myös ylläolevissa puissa. Väli (a,h) on etenevä väli, koska solmu a on solmun h edeltäjä ja väli ei ole puuväli. Väli (h,d) on takautuva väli, koska h on solmun d jälkeläinen. Välit (b,g) ja (c,g) ovat sivuttaisvälejä, koska ne eivät ole puuvälejä eivätkä eteneviä tai takautuvia välejä.

Tehtävä 6.3 Ohjelmoi (joko C- tai Python-kielellä) muokattu leveyshakualgoritmi niin, että algoritmi havaitsee, onko verkko kaksijakoinen (bipartite). Kaksijakoiseksi sanotaan suuntaamatonta verkkoa, jonka solmut halutaan värittää punaisella ja sinisellä värillä niin, että verkon jokaisen välin toinen solmu on punainen ja toinen sininen. Algoritmin tulisi myös tehdä väritys, mikäli se on mahdollinen. Sovella ohjelmaasi seuraaviin verkkoihin 1 7 8 2 5 3 6 4 1 7 8 2 5 3 6 4 Ratkaisu. Kun sovelletaan leveyshakua verkkoon lähtien solmusta s, voidaan solmu s värittää punaiseksi. yt solmun s naapurit, jotka algoritmi löytää ensin, on väritettävä sinisiksi. äiden naapurit, joita ei vielä ole havaittu, ovat etäisyydellä 2 lähtösolmusta; nämä on taas väritettävä punaisiksi. äin solmut, joiden etäisyys on parillinen, väritetään punaisiksi ja solmut joiden etäisyys on pariton, väritetään sinisiksi. Luonnollisesti voi tapahtua niin, että kaksi parillisen tai parittoman etäisyyden solmua ovat naapureita, jolloin värittäminen ei ole mahdollista. Muokataan leveyshaun algoritmia niin, että kun solmu otetaan jonosta ja tutkitaan sen naapureita, tarkistetaan, onko niiden joukossa samanvärisiä (siis akselilla

punainen/sininen). Mikäli naapureissa on tällainen, ei värittäminen ole mahdollista; muuten väritetään naapurit. Lisätään algoritmiin taulukko redblue, johon tallennetaan solmun väri (R/B). Lisäksi on käytävä verkon kaikki solmut läpi, jotta kaikki komponentit käsiteltäisiin. Seuraavassa on leveyshakualgoritmi muokattuna havaitsemaan kaksijakoisuus. Syöte: Verkko G=(V,E). Verkolle oletetaan käytettävän vieruslistaesitystä. Tulostus: Muuten kuten leveyshakualgoritmissa, paitsi että nyt käydään kaikki solmut läpi. Taulukkoon redblue tehdään väritys, jos se on mahdollinen. Palauttaa arvon TRUE jos väritys onnistuu ja FALSE muuten. BIPARTITE(G) 1. for each u in V 2. color[u] = WHITE 3. d[u] = IF 4. p[u] = IL 5. redblue[u]=x // Epämääräinen väri aluksi taulukossa 6. bipart = TRUE 7. for each s in V 8. if color[s]==white 9. d[s] = 0 10. color[s] = GRAY 11. redblue[s] = RED 12. JOO Q = EMPTY // Aluksi tyhjä jono 13. EQUEUE(Q,s) 14. while Q!= EMPTY() // Toistetaan kunnes jono tyhjenee 15. u = DEQUEUE(Q) 16. for each v in Adj[u] 17. if color[v] == WHITE 18. color[v] = GRAY 19. d[v] = d[u]+1 20. if d[v] mod 2 == 0 21. reblue[v] = RED 22. else 23. reblue[v] = BLUE 24. p[v] = u 25. EQUEUE(Q,v) 26. else 27. if redblue[v] == redblue[u] 28. bipart = FALSE 29. color[u] = BLACK 30. return bipart Leveyshakualgoritmiin on lisätty ainoastaan yhden taulukon käsittelyä ja takuu siitä, että kaikki solmut käsitellään. äin ollen kompleksisuusluokka on ( M ). Toteutus on alla olevassa linkissä. Algoritmin toteuttava funktio on nimeltään bicoloring. C-ohjelmassa värityksen sisältävä taulukko redblue annetaan funktiolle parametrina. Funktion paluuarvo on nolla, mikäli väritys ei ole mahdollinen. Python-toteutuksessa taulukko saadaan funktion paluuarvona; paluuarvo on one, jos väritystä ei voi tehdä. Kun ohjelmaa sovelletaan esimerkkiverkkoihin, huomataan, että ensimmäinen verkko voidaan värittää mutta toinen ei.