Algoritmit 2. Luento 8 Ke 13.4.2016. Timo Männikkö



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

Algoritmit 2. Luento 9 Ti Timo Männikkö

Algoritmit 1. Luento 13 Ma Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

10. Painotetut graafit

Diskreetit rakenteet

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmit 2. Luento 9 Ti Timo Männikkö

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

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 2. Luento 11 Ti Timo Männikkö

Algoritmit 2. Luento 10 To Timo Männikkö

Algoritmi on periaatteellisella tasolla seuraava:

Algoritmit 2. Luento 12 Ke Timo Männikkö

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

Algoritmit 2. Demot Timo Männikkö

811312A Tietorakenteet ja algoritmit, VI Algoritmien suunnitteluparadigmoja

Algoritmit 2. Luento 6 To Timo Männikkö

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

Algoritmit 2. Luento 6 Ke Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 8 To Timo Männikkö

13 Lyhimmät painotetut polut

Lisää segmenttipuusta

Johdatus diskreettiin matematiikkaan Harjoitus 7,

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Algoritmit 1. Luento 12 Ke Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

v 8 v 9 v 5 C v 3 v 4

Algoritmit 2. Luento 10 To 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

10. Painotetut graafit

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 1. Luento 14 Ke Timo Männikkö

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 1. Luento 11 Ti Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö

2.7 Neliöjuuriyhtälö ja -epäyhtälö

Johdatus graafiteoriaan

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

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

( ) ( ) ( ) ( ( ) Pyramidi 4 Analyyttinen geometria tehtävien ratkaisut sivu 271 Päivitetty a) = keskipistemuoto.

Dynaaminen optimointi

Tietorakenteet, laskuharjoitus 7, ratkaisuja

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

A TIETORAKENTEET JA ALGORITMIT

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

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

Algoritmit 2. Luento 13 Ti Timo Männikkö

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

Luku 8. Aluekyselyt. 8.1 Summataulukko

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

4.3. Matemaattinen induktio

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 2013) Kurssikoe 2, , vastauksia

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

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

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

Algoritmit 1. Luento 2 Ke Timo Männikkö

Liite 2: Verkot ja todennäköisyyslaskenta

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

Algoritmit 2. Luento 13 Ti Timo Männikkö

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

Algoritmit 2. Luento 13 Ti Timo Männikkö

Pienin virittävä puu (minimum spanning tree)

Algoritmit 1. Luento 1 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Datatähti 2019 loppu

Algoritmit 2. Luento 14 To Timo Männikkö

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

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

Algoritmit 1. Demot Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö

Numeeriset menetelmät

1 Erilaisia tapoja järjestää

Oletetaan, että funktio f on määritelty jollakin välillä ]x 0 δ, x 0 + δ[. Sen derivaatta pisteessä x 0 on

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

Kenguru 2016 Mini-Ecolier (2. ja 3. luokka) Ratkaisut

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

Königsbergin sillat. Königsberg 1700-luvulla. Leonhard Euler ( )

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

6.4. Järjestyssuhteet

Algoritmit 1. Demot Timo Männikkö

Algoritmit 2. Luento 11 Ti 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

VALTIOTIETEELLINEN TIEDEKUNTA TILASTOTIETEEN VALINTAKOE Ratkaisut ja arvostelu

Induktio kaavan pituuden suhteen

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 3. joulukuuta 2015

Tiraka, yhteenveto tenttiinlukua varten

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

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

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 2. helmikuuta 2012

Aluksi Kahden muuttujan lineaarinen epäyhtälö

Transkriptio:

Algoritmit 2 Luento 8 Ke 13.4.2016 Timo Männikkö

Luento 8 Rekursioyhtälöt Master-lause Lähin pistepari Ahne menetelmä Lyhin virittävä puu Kruskalin menetelmä Primin menetelmä Merkkitiedon tiivistäminen Huffmanin koodi Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 2/31

Rekursiiviset algoritmit Algoritmin kutsu annetulla ongelmalla: Jos pieni yksinkertainen ongelma Ratkaistaan se ja palautetaan ratkaisu Muutoin jaetaan ongelma pienempiin vastaavanlaisiin ongelmiin Ratkaistaan ne rekursiivisilla kutsuilla Muodostetaan pienempien ongelmien ratkaisuista tämän kutsun ongelman ratkaisu Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 3/31

Rekursioyhtälöt Tehtävä, jonka koko on n, jaetaan a:han osatehtävään, joiden koko on n/b Osatehtävät ratkaistaan rekursiivisesti Lisäksi muu aika: Tehtävien muodostaminen, tulosten kokoaminen Rekursioyhtälö { c 1, kun n = 1 T (n) = at (n/b) + d(n), kun n = b k, k 1 Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 4/31

Master-lause Rekursioyhtälön { c 1, kun n = 1 T (n) = at (n/b) + cn α, kun n = b k, k 1 ratkaisun kertaluokka on Θ(n log b a ), jos a > b α tai c = 0 Θ(n α ), jos a < b α ja c 0 Θ(n α log b n), jos a = b α ja c 0 Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 5/31

Lähin pistepari Tason pisteet p i = (x i, y i ), i = 1, 2,..., n Pisteiden välinen etäisyys: d(p i, p j ) = (x i x j ) 2 + (y i y j ) 2 Tehtävä: Etsi kaksi toisiaan lähinnä olevaa pistettä Raa an voiman algoritmi: Käydään läpi kaikki pisteparit, lasketaan niiden välinen etäisyys ja pidetään yllä pienintä etäisyyttä Θ(n 2 ) Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 6/31

Lähin pistepari Ratkaisu osittamalla: Jos n pieni, käytetään raa an voiman algoritmia Muuten jaetaan pisteet kahteen suunnilleen yhtäsuureen osaan S 1 ja S 2 Selvitetään lähin pistepari joukossa S 1 Selvitetään lähin pistepari joukossa S 2 Selvitetään lähin pistepari, jossa toinen pisteistä on joukossa S 1 ja toinen joukossa S 2 Valitaan lähin pistepari kolmesta edellä esitetystä parista Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 7/31

Lähin pistepari Joukot S 1 ja S 2 käsitellään rekursiivisesti Kolmannen pisteparin selvittäminen riippuu siitä, miten jako joukkoihin on tehty Esimerkiksi: Jaetaan y-akselin suuntaisella viivalla, joka kulkee mediaanipisteen kautta, kun pisteet järjestetty x-koordinaatin mukaan kasvavaan järjestykseen Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 8/31

Lähin pistepari d 1 = pienin etäisyys S 1 :ssä d 2 = pienin etäisyys S 2 :ssä d = min{d 1, d 2 } S 1 = ne S 1:n pisteet, joiden etäisyys jakoviivasta d S 2 = ne S 2:n pisteet, joiden etäisyys jakoviivasta d Kolmannen pisteparin selvittämiseksi riittää tutkia joukot S 1 ja S 2 d 1 S 1 S 2 d d 2 d Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 9/31

Lähin pistepari Olkoon a S 1 ja b S 2 siten, että niiden välinen etäisyys d Myös a:n ja b:n välinen pystysuora etäisyys d Jokaista nauhassa olevaa pistettä kohti riittää tutkia laatikko, jonka korkeus on d Laatikossa voi olla korkeintaan 8 pistettä Etäisyysvertailuja Θ(n) a d b d d Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 10/31

Lähin pistepari T (n) = { c 1, kun n = 1 2T (n/2) + cn, kun n > 1 a = 2, b = 2, α = 1, c 0 Master-lauseen kolmas kohta T (n) = Θ(n log 2 n) Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 11/31

Algoritmien suunnittelu Ahne menetelmä: Tehdään vaiheittain valintoja Valitaan aina se vaihtoehto, joka sillä hetkellä näyttää parhaalta Tehtyjä valintoja ei pureta myöhemmin Joskus ahne algoritmi antaa optimaalisen ratkaisun Mutta usein saadaan vain likiarvoratkaisu Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 12/31

Ahne menetelmä vastaus ahne(tapaus x) { y = 0; // "Tyhjä osittaisvastaus" while (y ei ole täydellinen vastaus) { valitse mahdollisista täydennyksistä e[1],...,e[k] sellainen e[i], että osittaisvastaus y täydennettynä e[i]:llä antaa "suurimman arvon" if (y:n täydentäminen ei mahdollista) return fail; else täydennä osittaisvastausta y täydennyksellä e[i] } return y; } Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 13/31

Lyhin virittävä puu Yhtenäinen, suuntaamaton verkko G Solmujen joukko N, teiden joukko E Jokaiseen tiehen (i, j) liittyy pituus l(i, j) Verkon virittävä puu on aliverkko, joka yhdistää verkon kaikki solmut ja jossa ei ole yhtään silmukkaa Virittävän puun pituus on siihen kuuluvien teiden pituuksien summa Tehtävä: Selvitä verkon lyhin virittävä puu Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 14/31

Lyhin virittävä puu Monet ahneet algoritmit perustuvat tulokseen: Olkoon U jokin N:n aito osajoukko Olkoon (u, v) lyhyin teistä, joiden toinen päätesolmu on U:ssa ja toinen N \ U:ssa Silloin on olemassa lyhin virittävä puu, joka sisältää tien (u, v) Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 15/31

Lyhin virittävä puu Tuloksen todistus: Olkoon T verkon lyhin virittävä puu Jos (u, v) / T, sen lisääminen aiheuttaa silmukan On olemassa jokin toinen tie, jonka toinen päätesolmu on U:ssa ja toinen N \ U:ssa Poistetaan tämä tie T :stä ja lisätään (u, v) sen tilalle Saadaan virittävä puu, jonka pituus on alkuperäisen T :n pituus Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 16/31

Lyhin virittävä puu Kruskalin menetelmä: Aloitetaan triviaalilla virittävällä metsällä: Jokainen solmu muodostaa yhden puun Siis metsä (N, T ), missä T = Yhdistetään puita teillä ahneeseen tyyliin, kunnes tuloksena on yksi yhtenäinen puu Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 17/31

Kruskalin menetelmä joukko Kruskal(N,E) // Oletetaan, että verkko on yhtenäinen { S = E; // kaikki tiet T = tyhjä joukko; while (T ei muodosta virittävää puuta) { valitse lyhin tie (u,v) joukosta S; poista tie (u,v) joukosta S; if (tie (u,v) ei aiheuta silmukkaa T:ssä) lisää tie (u,v) joukkoon T; } return T; } Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 18/31

Kruskalin menetelmä: Esimerkki 3 15 7 8 10 12 4 X X Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 19/31

Lyhin virittävä puu Primin menetelmä: Aluksi joukossa U on yksi solmu Etsitään lyhin tie (u, v) siten, että u U ja v N \ U Lisätään tie (u, v) lyhimpään virittävään puuhun T Lisätään solmu v joukkoon U Jatketaan kunnes kaikki solmut ovat joukossa U Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 20/31

Primin menetelmä joukko Prim(N,E) // Oletetaan, että verkko on yhtenäinen { U = {aloitussolmu}; T = tyhjä joukko; while (U ei sisällä kaikkia solmuja) { valitse lyhin tie (u,v), jolla u on U:ssa ja v ei ole U:ssa; lisää tie (u,v) joukkoon T; lisää solmu v joukkoon U; } return T; } Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 21/31

Primin menetelmä: Esimerkki 3 15 7 8 10 12 4 Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 22/31

Primin menetelmä Solmuja n kpl, kierroksia n 1 kpl Joka kierroksella etsitään lyhin tie (u, v) Jos jokaiselle N \ U:n solmulle pidetään yllä lyhimmän tien pituutta U:hun, voidaan (u, v) löytää ajassa Θ(n) Θ(n 2 ) Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 23/31

Merkkitiedon tiivistäminen ASCII-koodi: Jokainen merkki esitetään 8 bitillä Esimerkiksi 100 merkkiä vie tilaa 800 bittiä riippumatta siitä, mitä merkkejä esiintyy Jos esiintyviä merkkejä on vähemmän, lyhyempikin koodi riittäisi Esimerkiksi neljä eri merkkiä voidaan esittää 2 bitillä (00, 01, 10, 11) Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 24/31

Merkkitiedon tiivistäminen Vaihtelevan pituinen koodi: Usein esiintyville merkeille lyhyempi koodi, harvoin esiintyville pidempi koodi Ongelma: Mistä tiedetään, miten monta bittiä kuhunkin koodiin kuuluu Yksi ratkaisu: Prefiksi- eli etuliitekoodit Mikään koodi ei ole sama kuin jonkin toisen koodin alkuosa Koodia tulkittaessa edetään niin pitkälle kuin jokin koodi saadaan valmiiksi Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 25/31

Huffmanin koodi Esitetään koodit binääripuun avulla Haarautuminen vasemmalle tarkoittaa 0-bittiä, haarautuminen oikealle 1-bittiä Lehtisolmut vastaavat merkkejä Polku juurisolmusta lehtisolmuun vastaa kyseisen merkin koodia Puu rakennetaan merkkien esiintymisfrekvenssien mukaan Lyhyimmät koodit liitetään merkkeihin, joiden frekvenssi suurin Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 26/31

Esimerkki Esiintymisfrekvenssit: Koodit: a i s t 20 75 3 2 a i s t 11 0 100 101 0 1 i 0 1 0 1 a Kaikkien 100 merkin tallennus vie 130 bittiä s t Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 27/31

Huffmanin koodi Aluksi jokainen merkki muodostaa oman yhden solmun kokoisen puun Jokaisella puulla on painoarvo Aluksi painoarvot ovat merkkien frekvenssit Yhdistetään kaksi painoarvoltaan pienintä puuta lisäämällä ne uuden juurisolmun alipuiksi Yhdistetyn puun painoarvoksi tulee alipuiden painoarvot Jatketaan kunnes jäljellä on vain yksi puu Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 28/31

Huffmanin koodi Esiintyvät merkit c 1, c 2,..., c n Esiintymisfrekvenssit f 1, f 2,..., f n 1. Jokaisesta c i yhden solmun puu, painot w i = f i 2. Toistetaan kunnes jäljellä yksi puu: Valitaan puut u ja v siten, että w u ja w v ovat pienimmät Uusi juurisolmu s Vasen lapsi u, oikea lapsi v Paino w s = w u + w v Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 29/31

Huffmanin koodi Painot voidaan tallentaa prioriteettijonoon Aluksi jonossa n alkiota Joka kierroksella jonosta poistetaan kaksi alkiota ja tilalle tulee yksi alkio Prioriteettijonon operaatiot Θ(log n) (jos toteutettu tasapainoisena binääripuuna tai kekona) Koodin muodostus Θ(n log n) Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 30/31

RLE-koodaus Run-Length Encoding Tutkitaan, sisältääkö merkkijono useita samoja merkkejä peräkkäin Jos sisältää, korvataan ne laskurilla, joka kertoo merkkien lukumäärän Esimerkki: aaaaabaaaaaaaaaaaabbbbbaabbbbbb 5a1b12a5b2a6b Algoritmit 2 Kevät 2016 Luento 8 Ke 13.4.2016 31/31