Algoritmit 1. Luento 8 Ke Timo Männikkö

Samankaltaiset tiedostot
Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 4 To Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 4 Ke Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 2. Luento 6 Ke Timo Männikkö

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

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

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 5 Ti Timo Männikkö

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

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Algoritmit 1. Luento 14 Ke Timo Männikkö

Algoritmit 1. Luento 6 Ke Timo Männikkö

Algoritmit 2. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 11 Ti Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö

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.

A TIETORAKENTEET JA ALGORITMIT

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.

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

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

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 1. Luento 12 Ke Timo Männikkö

Algoritmit 1. Luento 4 Ke Timo Männikkö

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

Algoritmit 1. Luento 12 Ti Timo Männikkö

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

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

Algoritmit 2. Luento 12 Ke Timo Männikkö

Algoritmit 2. Luento 14 Ke Timo Männikkö

Binäärihaun vertailujärjestys

Johdatus graafiteoriaan

Algoritmit 1. Luento 13 Ma Timo Männikkö

13 Lyhimmät painotetut polut

Algoritmit 1. Luento 13 Ti Timo Männikkö

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

Kysymyksiä koko kurssista?

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmi on periaatteellisella tasolla seuraava:

Tietorakenteet, laskuharjoitus 7, ratkaisuja

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

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Algoritmit 1. Luento 1 Ti Timo Männikkö

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

Johdatus graafiteoriaan

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

Datatähti 2019 loppu

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

Algoritmit 2. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 10 To Timo Männikkö

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

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

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

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

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

Diskreetit rakenteet

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

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Muita linkattuja rakenteita

Algoritmit 1. Luento 10 Ke Timo Männikkö

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

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

Tietorakenteet ja algoritmit

Algoritmit 1. Luento 2 Ke Timo Männikkö

Koe ma 1.3 klo salissa A111, koeaika kuten tavallista 2h 30min

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

TIE Tietorakenteet ja algoritmit 261

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

Algoritmit 2. Luento 10 To Timo Männikkö

Algoritmit 1. Luento 11 Ti Timo Männikkö

A TIETORAKENTEET JA ALGORITMIT

Lyhin kahden solmun välinen polku

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

Algoritmit 2. Luento 13 Ti Timo Männikkö

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

Mat Lineaarinen ohjelmointi

Johdatus verkkoteoriaan 4. luento

Algoritmit 2. Luento 11 Ti Timo Männikkö

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

PARITUS KAKSIJAKOISESSA

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

Algoritmit 2. Luento 13 Ti Timo Männikkö

CS-A1140 Tietorakenteet ja algoritmit

Pienin virittävä puu (minimum spanning tree)

Kierros 4: Binäärihakupuut

T : Max-flow / min-cut -ongelmat

Algoritmit 2. Luento 13 Ti Timo Männikkö

Tietorakenteet, laskuharjoitus 6,

Algoritmit 2. Luento 8 To Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

Suunnatut, etumerkilliset ja arvotetut graafit Sosiaalisten verkostojen analysoinnin näkökulmalla

Kierros 3: Puut. Tommi Junttila. Aalto University School of Science Department of Computer Science

Transkriptio:

Algoritmit 1 Luento 8 Ke 1.2.2017 Timo Männikkö

Luento 8 Järjestetty binääripuu Solmujen läpikäynti Binääripuun korkeus Binääripuun tasapainottaminen Graafit ja verkot Verkon lyhimmät polut Fordin ja Fulkersonin menetelmä Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 2/30

Järjestetty binääripuu f b g 7 7 a d c e i h Binääripuu järjestetty, jos kaikilla a ja b on a b a b Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 3/30

Binääripuun solmujen läpikäynti Esijärjestys (preorder): 1. Käsitellään tarkasteltava solmu 2. Jos tarkasteltavan solmun vasen alipuu ei ole tyhjä, käsitellään tämä vasen alipuu esijärjestyksessä 3. Jos tarkasteltavan solmun oikea alipuu ei ole tyhjä, käsitellään tämä oikea alipuu esijärjestyksessä Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 4/30

Binääripuun solmujen läpikäynti Sisäjärjestys (inorder): 1. Jos tarkasteltavan solmun vasen alipuu ei ole tyhjä, käsitellään tämä vasen alipuu sisäjärjestyksessä 2. Käsitellään tarkasteltava solmu 3. Jos tarkasteltavan solmun oikea alipuu ei ole tyhjä, käsitellään tämä oikea alipuu sisäjärjestyksessä Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 5/30

Binääripuun solmujen läpikäynti Jälkijärjestys (postorder): 1. Jos tarkasteltavan solmun vasen alipuu ei ole tyhjä, käsitellään tämä vasen alipuu jälkijärjestyksessä 2. Jos tarkasteltavan solmun oikea alipuu ei ole tyhjä, käsitellään tämä oikea alipuu jälkijärjestyksessä 3. Käsitellään tarkasteltava solmu Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 6/30

Esimerkki: Binääripuun korkeus Solmun korkeus on pisimmän siitä lehtisolmuun vievän polun pituus Lehtisolmun korkeus on 0 Määritellään: Tyhjän puun korkeus on 1 Juuren korkeus = suurempi alipuiden korkeuksista + 1 Käydään puu läpi rekursiivisesti jälkijärjestyksessä Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 7/30

Esimerkki: Binääripuun korkeus binpuunkorkeus(solmu) 1. Jos solmu = null, palautetaan 1 2. Jos solmu.left = null, asetetaan vasen = 1, muuten asetetaan vasen = binpuunkorkeus(solmu.left) 3. Jos solmu.right = null, asetetaan oikea = 1, muuten asetetaan oikea = binpuunkorkeus(solmu.right) 4. Jos vasen > oikea, palautetaan vasen+1, muuten palautetaan oikea+1 Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 8/30

Esimerkki: Aritmeettinen lauseke Lauseke (a + b) c + d binääripuuna Esijärjestyksessä prefix-merkintätavan mukainen järjestys: + + a b c d + + c a b d Jälkijärjestyksessä postfix-merkintätavan mukainen järjestys: a b + c d + Sisäjärjestyksessä saadaan järjestys: a + b c + d Täytyy lisätä sulut Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 9/30

Puun läpikäynti ilman rekursiota Binääripuun läpikäynti sisäjärjestyksessä pinon avulla Aina kun mennään solmusta vasemmalle, tallennetaan solmun osoitin pinoon 1. Aloitus: Aloitetaan juurisolmusta Kuljetaan vasemmalle kunnes tullaan solmuun, jonka vasen alipuu on tyhjä Kaikki kuljetut solmut tallennetaan pinoon (Algoritmi jatkuu) Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 10/30

Puun läpikäynti ilman rekursiota 2. Vuorossa olevan solmun saanti: Jos pino tyhjä, lopetetaan Muuten poistetaan pinosta sen päällimmäinen solmu p Olkoon q = p.right Jos q null: Tallennetaan solmu q pinoon Kuljetaan solmusta q vasemmalle kunnes tullaan solmuun, jonka vasen alipuu tyhjä Kaikki kuljetut solmut tallennetaan pinoon Solmu p on nyt seuraava vuorossa oleva solmu Toistetaan kohdasta 2 Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 11/30

Binääripuun korkeus Tasapainoinen binääripuu: Jokaisella solmulla (paitsi lehtisolmuilla) kaksi lasta 7 7 Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 12/30

Binääripuun korkeus Tasapainoinen binääripuu: Korkeus h Tasot 0, 1, 2,..., h Solmuja tasoilla 1, 2, 4,..., 2 h Solmuja yhteensä n = 1 + 2 + 4 + + 2 h h = 2 i = 2 h+1 1 i=0 h = log 2 (n + 1) 1 Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 13/30

Binääripuun korkeus Degeneroitunut binääripuu: Muodostuu esimerkiksi, jos solmut lisätään kasvavassa järjestyksessä Tällöin puussa pelkästään oikeita lapsisolmuja h = n 1 Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 14/30

Operaatioiden aikavaativuus Puun läpikäynti (jossain järjestyksessä): Kaikki solmut käsitellään Vaativuus O(n) Perusoperaatiot (haku, lisäys, poisto): Askelten lukumäärä Puun korkeus Tasapainoiselle puulle vaativuus O(log n) Degeneroituneelle puulle vaativuus O(n) Voidaan osoittaa: Satunnaisesti muodostetussa binääripuussa hakupolun keskipituus 1.39 log 2 n Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 15/30

Binääripuu hakemistona Hakemisto (sanakirja, dictionary): Tietorakenne, jonka perusoperaatioita ovat alkion haku, alkion lisäys ja alkion poisto Järjestetty lineaarinen lista: Perusoperaatiot O(n) Järjestetty binääripuu: Perusoperaatiot O(log n), kun puu on tasapainoinen Esimerkiksi haku, kun n = 1000: Linneaarinen lista: Vertailuja keskimäärin 500 Binääripuu: Vertailuja keskimäärin 14 Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 16/30

Binääripuun tasapainottaminen Hakujen yhteydessä tarkkaillaan hakupolkujen pituuksia Jos pituudet ovat paljon suurempia kuin teoreettinen keskipituus, on puu epätasapainoinen Voidaan yrittää tasapainottaa puu Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 17/30

Binääripuun tasapainottaminen Puun tasapainottaminen rekursiivisesti: Käydään puu läpi sisäjärjestyksessä ja tallennetaan puun solmut (osoittimet niihin) taulukkoon Tällöin solmut ovat taulukossa kasvavassa järjestyksessä Tehdään järjestyksessä keskimmäisestä solmusta uuden binääripuun juurisolmu Pienemmistä solmuista muodostetaan juurisolmun vasen alipuu (rekursiivisesti) Suuremmista solmuista muodostetaan juurisolmun oikea alipuu (rekursiivisesti) Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 18/30

Verkot Verkot ja graafit: Muodostuvat solmuista ja niitä yhdistävistä kaarista Tyypillisiä sovelluskohteita: Lyhimmän reitin etsiminen tieverkossa Raaka-aineiden virtausten mallintaminen tuotantoprosessissa Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 19/30

Suunnattu graafi Solmujen joukko N Kaarien joukko A Jokaisella kaarella a tarkalleen yksi alkusolmu t(a) ja yksi loppusolmu h(a) Jokaiseen kaareen täytyy kuulua alku- ja loppusolmu Solmuun ei tarvitse liittyä yhtään kaarta Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 20/30

Suunnattu graafi, naapurit Kuhunkin solmuun j liittyy kaksi kaarien joukkoa: Lähtevät kaaret A(j) Tulevat kaaret B(j) Näiden kaarien toisessa päässä olevat solmut ovat solmun j naapurisolmuja Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 21/30

Suunnattu graafi, polut Olkoon graafissa kaaret a 1, a 2,..., a k siten, että h(a i ) = t(a i+1 ) kaikilla i = 1,..., k 1 Silloin nämä kaaret muodostavat polun (reitin) Polku on yksinkertainen, jos mikään solmu ei toistu Polku on silmukka, jos alkusolmu t(a 1 ) on sama kuin loppusolmu h(a k ) Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 22/30

Suuntaamaton graafi Kaarilla ei ole suuntaa Molemmat suunnat tasa-arvoisia Suuntaamatonta kaarta sanotaan usein tieksi Suuntaamattomien graafien käsittely: Tielle annetaan nimellinen suunta Tie voidaan esittää kahtena suunnattuna kaarena Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 23/30

Yhtenäinen graafi, puu Graafi on yhtenäinen (yhdistetty), jos jokaisen solmuparin välillä on polku Jos graafi ei ole yhtenäinen, se muodostuu useammasta kuin yhdestä yhtenäisestä komponentista Puu tarkoittaa suuntaamatonta graafia, joka on yhtenäinen ja jossa ei ole yhtään silmukkaa Huom: Tässä yhteydessä hieman eri asia kuin edellä binääripuiden yhteydessä Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 24/30

Graafit ja verkot Graafi: Pelkästään solmuja ja kaaria Verkko: Solmuihin tai kaariin liittyy muitakin kuvauksia Esimerkiksi kaaren pituus: Polun pituus kaarien pituuksien summa Esimerkiksi kaaren kapasiteetti: Virtaus tapahtuu kaaren suuntaisesti Virtaus ei voi ylittää kapasiteettia Solmuun tulevien virtausten summa yhtä kuin solmusta lähtevien virtausten summa (Kirchhoffin laki) Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 25/30

Kaaritaulukko Taulukko verkon kaarista (jossain järjestyksessä) Jokaisesta kaaresta tallennettu alkusolmu, loppusolmu ja muut tiedot, kuten esimerkiksi pituus Hyvin yksinkertainen tallennusrakenne Vaatii muistitilaa vakion verran jokaista kaarta kohden Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 26/30

Verkon lyhimmät polut Suunnattu verkko, jossa jokaisella kaarella k on pituus l(k) Pituus voi olla myös negatiivinen Mutta verkossa ei saa olla silmukkaa, jonka pituus on negatiivinen Tehtävänä etsiä lyhimmät polut jostain annetusta solmusta verkon muihin solmuihin Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 27/30

Verkon lyhimmät polut Fordin ja Fulkersonin menetelmä: Yleinen, yksinkertainen menetelmä Riittää yksinkertainen verkon tallennusrakenne, kuten kaaritaulukko Annettu lähtösolmu a d(i) = lyhimmän tähän mennessä tunnetun polun pituus lähtösolmusta solmuun i t(i) = vastaavan polun viimeisen kaaren alkusolmu (solmua i edeltävä solmu polulla) Periaate: Tutkitaan jokaisen kaaren kohdalla, lyhenisikö polun pituus, jos kaari otettaisiin mukaan polkuun Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 28/30

Fordin ja Fulkersonin menetelmä 1. Alustus: Asetetaan d(a) = 0 ja t(a) = a Asetetaan d(i) = (suuri luku) kaikilla muilla solmuilla 2. Käsitellään kaikki kaaret jossain järjestyksessä: Vuorossa oleva kaari k, jonka alkusolmu i, loppusolmu j ja pituus l(k) Jos d(i) + l(k) < d(j), asetetaan d(j) = d(i) + l(k) ja t(j) = i 3. Jos jokin d(j) muuttui, toistetaan kohdasta 2, muuten lopetetaan Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 29/30

Fordin ja Fulkersonin menetelmä Algoritmin päätyttyä: d(j) = lyhimmän polun pituus lähtösolmusta solmuun j t(j) = vastaavan polun viimeisen kaaren alkusolmu Koko lyhin polku voidaan konstruoida kulkemalla polkua takaperin solmusta j lähtösolmuun a Jos solmuun j ei johda reittiä alkusolmusta, niin d(j) = Algoritmit 1 Kevät 2017 Luento 8 Ke 1.2.2017 30/30