Algoritmit 1. Luento 13 Ti 23.2.2016. Timo Männikkö



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

Algoritmi on periaatteellisella tasolla seuraava:

Algoritmit 2. Luento 11 Ti Timo Männikkö

Algoritmit 1. Luento 14 Ke Timo Männikkö

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

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

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

Algoritmit 2. Luento 14 Ke Timo Männikkö

10. Painotetut graafit

Algoritmit 2. Luento 9 Ti Timo Männikkö

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

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

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

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

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

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

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

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö

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

13 Lyhimmät painotetut polut

Algoritmit 1. Luento 12 Ke Timo Männikkö

Algoritmit 1. Luento 12 Ti Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 11 Ti Timo Männikkö

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

Pienin virittävä puu (minimum spanning tree)

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

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

Algoritmit 2. Luento 12 To Timo Männikkö

Algoritmit 2. Luento 8 To Timo Männikkö

Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö

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

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

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

Algoritmit 2. Luento 13 Ti Timo Männikkö

Johdatus graafiteoriaan

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 9 Ti Timo Männikkö

4.3. Matemaattinen induktio

Algoritmit 2. Demot Timo Männikkö

Algoritmit 1. Luento 11 Ti Timo Männikkö

Luku 8. Aluekyselyt. 8.1 Summataulukko

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

Algoritmit 2. Luento 10 To Timo Männikkö

7.4 Sormenjälkitekniikka

Algoritmit 1. Luento 10 Ke Timo Männikkö

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Algoritmit 2. Luento 8 Ke Timo Männikkö

1 2 x2 + 1 dx. (2p) x + 2dx. Kummankin integraalin laskeminen oikein (vastaukset 12 ja 20 ) antaa erikseen (2p) (integraalifunktiot

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

Algoritmit 1. Luento 3 Ti Timo Männikkö

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

Nopea kertolasku, Karatsuban algoritmi

isomeerejä yhteensä yhdeksän kappaletta.

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

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

10. Painotetut graafit

Algoritmit 2. Luento 10 To Timo Männikkö

811312A Tietorakenteet ja algoritmit, VI Algoritmien suunnitteluparadigmoja

A TIETORAKENTEET JA ALGORITMIT

Algoritmit 2. Luento 14 To Timo Männikkö

6. Approksimointialgoritmit

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

T : Max-flow / min-cut -ongelmat

811120P Diskreetit rakenteet

Harjoitus 1 ( )

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

Johdatus graafiteoriaan

Tietorakenteet, laskuharjoitus 7, ratkaisuja

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

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

Algoritmit 1. Luento 2 Ke Timo Männikkö

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

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

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

4 Tehokkuus ja algoritmien suunnittelu

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

v 8 v 9 v 5 C v 3 v 4

Olkoon S(n) kutsun merge-sort(a, p, q) tilavaativuus kun p q + 1 = n. Oletetaan merge toteutetuksi vakiotyötilassa (ei-triviaalia mutta mahdollista).

Diskreetit rakenteet

3.4 Peruutus (backtracking)

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

2.1. Tehtävänä on osoittaa induktiolla, että kaikille n N pätee n = 1 n(n + 1). (1)

Malliratkaisut Demot

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

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

Tietorakenteet ja algoritmit

Yleinen paikallinen vakautuva synkronointialgoritmi

Algoritmit 2. Demot Timo Männikkö

Tekijä Pitkä Matematiikka 11 ratkaisut luku 2

Graafin virittävä puu 1 / 20

Transkriptio:

Algoritmit 1 Luento 13 Ti 23.2.2016 Timo Männikkö

Luento 13 Suunnittelumenetelmät Taulukointi Kapsäkkiongelma Ahne menetelmä Verkon lyhimmät polut Dijkstran menetelmä Verkon lyhin virittävä puu Kruskalin menetelmä Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 2/31

Algoritmien suunnittelu Suunnittelumenetelmiä: Raaka voima Osittaminen Taulukointi Ahne menetelmä Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 3/31

Taulukointi Taulukointi (dynaaminen optimointi): Tehtävä ratkaistaan vaiheittain, osatehtävä kerrallaan Osatehtävien ratkaisut taulukoidaan Jo laskettuja tuloksia ei lasketa enää uudestaan Taulukoinnilla muodostetaan alkuperäisen tehtävän ratkaisu Yleensä edetään alhaalta ylös Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 4/31

Binomikertoimien laskeminen Binomikertoimet määritellään ( ) n n! = k k!(n k)!, kun 0 k n Voidaan laskea palautuskaavalla ( ) { n 1, kun k = 0 tai k = n = ) ( k + n 1 ), kun 0 < k < n ( n 1 k 1 k Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 5/31

Binomikertoimien laskeminen Palautuskaava Rekursiivinen algoritmi: int bin(int n, int k) { if (k == 0 k == n) return 1; else return bin(n-1, k-1) + bin(n-1, k); } Laskee samoja arvoja moneen kertaan Aikavaativuus eksponentiaalinen Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 6/31

Binomikertoimien laskeminen Taulukoiva, iteratiivinen algoritmi: int bin(int n, int k) { // Taulukko c[0..n][0..k] // Huom: c[0..k] riittäisi for (m = 0; m <= n; m++) { c[m][0] = 1; if (m <= k) c[m][m] = 1; for (j = 1; j <= min(m-1, k); j++) c[m][j] = c[m-1][j-1] + c[m-1][j]; } return c[n][k]; } Aikavaativuus O(nk) Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 7/31

Kapsäkkiongelma Valittavana n kpl erilaisia tavaroita Tavaralle i tunnetaan paino w i ja hyötyarvo p i (positiivisia kokonaislukuja) Tavaraa otetaan mukaan joko 0 tai 1 kpl Annettu kokonaispainoraja W Tehtävänä valita reppuun R tavarat siten, että niiden hyötyarvo on mahdollisimman suuri, mutta painoraja ei ylity max i R p i kun i R w i W Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 8/31

Kapsäkkiongelma Numeroidaan tavarat 1, 2,..., n Osaongelmat: Repun hyötyarvo s(m, r), missä Tavarat valitaan osajoukosta 1, 2,..., m Kokonaispaino korkeintaan r Taulukoidaan s(m, r), kun m = 1, 2,..., n ja r = 0, 1,..., W Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 9/31

Kapsäkkiongelma jatkuu Kun mitään tavaraa ei oteta mukaan, on arvo 0 kaikilla sallituilla painorajoilla Lähtöarvot s(0, r) = 0 kun r = 0, 1,..., W Kokeillaan ottaa aina yksi uusi tavara mukaan Lasketaan arvot s(k, r), kun tunnetaan aikaisemmat arvot s(k 1, r) Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 10/31

Kapsäkkiongelma jatkuu Jos uusi tavara k ei mahdu kokoa r olevaan reppuun, sitä ei oteta mukaan s(k, r) = s(k 1, r) Jos uusi tavara mahtuu, tarkistetaan kannattaako sitä ottaa mukaan s(k, r) = max{s(k 1, r), p k + s(k 1, r w k )} Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 11/31

Kapsäkkiongelma jatkuu Yleisesti kaikilla k = 1, 2,..., n ja r = 0, 1,..., W s(k 1, r), jos w k > r s(k, r) = max{s(k 1, r), p k + s(k 1, r w k )}, jos w k r Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 12/31

Kapsäkkiongelma jatkuu 1. s[i,0] = 0, i = 0,...,n 2. s[0,j] = 0, j = 0,...,W 3. Suoritetaan kaikilla i = 1,..,n: Suoritetaan kaikilla j = 1,...,W: Jos (w[i] <= j) s[i,j] = max{s[i-1,j], p[i] + s[i-1,j-w[i]]} Muutoin s[i,j] = s[i-1,j] 4. Palautetaan arvo s[n,w] Aikavaativuus O(nW ) Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 13/31

Ahne menetelmä Ratkaisu rakennetaan peräkkäisistä, paikallisesti parhaan näköisistä (lokaalisti optimaalisista) valinnoista Joskus lokaalisti optimaaliset valinnat johtavat globaalisti optimaaliseen ratkaisuun Joskus lokaalisti optimaaliset valinnat johtavat huonoon lopputulokseen Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 14/31

Esimerkki Esitettävä 17 mahdollisimman vähillä kolikoilla Ahne menetelmä: Valitaan aina suurin kolikko, joka vielä sopii jäljellä olevaan summaan Käytettävissä 10, 5 ja 1 yksikön kolikoita 17=10+5+1+1 (4 kpl, optimaalinen) Käytettävissä 13, 10, 5 ja 1 yksikön kolikoita 17=13+1+1+1+1 (5 kpl, ei optimaalinen) Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 15/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 1 Kevät 2016 Luento 13 Ti 23.2.2016 16/31

Verkon lyhimmät polut Solmut V, kaaret E, etäisyysfunktio l Suunnattu, painotettu verkko G = (V, E, l) Pituudet l(e) 0 kaikilla kaarilla e E Lähdesolmu v 0 V kiinnitetty D[v] = Lyhimmän v 0 :sta v:hen johtavan polun pituus Tehtävä: Määritä D[v] kaikille solmuille v V Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 17/31

Verkon lyhimmät polut Dijkstran menetelmä (1959): Ylläpidetään joukkoa niistä solmuista, joiden lyhimmän polun pituus jo tunnetaan Laajennetaan joukkoa solmu kerrallaan ahneeseen tyyliin 1. Aluksi S = {v 0 } 2. Lisätään S:ään se joukon V \ S solmu, joka näyttää olevan seuraavaksi lähinnä v 0 :aa 3. Toistetaan kunnes S = V Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 18/31

Dijkstran menetelmä tulos Dijkstra(L[1..n][1..n],v0) // L verkon etäisyysmatriisi // L[u,v]=ääretön, jos ei kaarta (u,v) { S = {v0}, V = {muut solmut paitsi v0}; } D[v0] = 0; for (kaikilla v in V) // alustusaskel D[v] = L[v0,v]; while (V ei ole tyhjä joukko) { valitse jokin u in V, jolla D[u] on minimaalinen; lisää u joukkoon S ja poista se joukosta V; for (kaikilla v in V) D[v] = min(d[v], D[u] + L[u, v]); } return D; Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 19/31

Dijkstran menetelmä Kaksi sisäkkäistä silmukkaa, joiden suorituskertojen lukumäärä riippuu solmujen lukumäärästä Aikavaativuus O(n 2 ) Tehokkaita tietorakenteita käyttämällä aikavaativuutta voidaan parantaa Merkitään e = kaarien lukumäärä Tehokkain tunnettu toteutus O(n log n + e) Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 20/31

Dijkstran toiminta Algoritmin suorituksen aikana jokaisella u S on voimassa: D[u] on lyhimmän polun pituus solmusta v 0 solmuun u:hun Todistetaan induktiolla joukon S koon suhteen: Alkuaskel: Tapauksessa S = 1 on S = {v 0 }, D[v 0 ] = 0 ja väite tosi Induktio-oletus: Väite tosi jollain S = k Induktioaskel: Osoitetaan, että väite edelleen tosi, kun S:ään lisätään jokin solmu u Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 21/31

Dijkstran toiminta jatkuu Tunnetaan etäisyys D[u] jotain polkua pitkin Olkoon P jokin toinen polku v 0 x y u, missä x S ja sen välitön seuraaja y / S Induktio-oletus D[x] lyhin pituus x:ään D[x] + L[x, y] P:n pituus (sillä kaarien pituudet ei-negatiivisia) Kun x lisättiin S:ään, päivitettiin D[y] D[y] D[x] + L[x, y] Solmu u valitaan siten, että D[u] pienin D[u] D[y] Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 22/31

Dijkstran toiminta jatkuu D[x] + L[x, y] P:n pituus D[y] D[x] + L[x, y] D[u] D[y] D[u] P:n pituus Väite tosi Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 23/31

Verkkoihin liittyviä termejä Suuntaamaton verkko G = (V, E) Verkon G aliverkko G = (V, E ), missä V V ja E E Aliverkko G virittää G:n, jos V = V Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 24/31

Verkkoihin liittyviä termejä Jos virittävä G ei sisällä renkaita, se on G:n virittävä metsä Jos virittävä G on yhtenäinen, se on G:n virittävä puu Virittävän puun olemassaolo edellyttää, että G itse on yhtenäinen Virittävä metsä on myös kokoelma erillisiä virittäviä puita Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 25/31

Verkkoihin liittyviä termejä Etäisyysfunktio l Aliverkon G = (V, E ) pituus on l(g ) = e E l(e) Yhtenäisen verkon lyhin virittävä puu on se virittävä puu, jonka pituus on minimaalinen Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 26/31

Verkon lyhin virittävä puu Triviaaliratkaisu: Käydään läpi kaikki virittävät puut Aikavaativuus eksponentiaalinen Monet algoritmit perustuvat tulokseen: Ositetaan verkon solmut kahteen erilliseen epätyhjään joukkoon V 1 ja V 2 Olkoon e lyhyin kaikista teistä, joiden toinen päätesolmu on V 1 :ssä ja toinen V 2 :ssa Silloin on olemassa lyhin virittävä puu, jossa e on mukana yhtenä virittävän puun tienä Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 27/31

Verkon lyhin virittävä puu Tuloksen todistus: Olkoon T verkon lyhin virittävä puu Jos e / T, sen lisääminen aiheuttaa silmukan On olemassa tie f T, jonka toinen päätesolmu on V 1 :ssä ja toinen V 2 :ssa Tie e on tällaisista teistä lyhyin: l(e) l(f ) Poistetaan T :stä tie f ja lisätään e sen tilalle Saadaan virittävä puu, jonka pituus on alkuperäisen T :n pituus Uusi puu on myös lyhin virittävä puu Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 28/31

Verkon lyhin virittävä puu Kruskalin menetelmä: Aloitetaan triviaalilla virittävällä metsällä: Jokainen solmu muodostaa yhden puun Siis metsä (V, T ), missä T = Yhdistetään puita teillä ahneeseen tyyliin, kunnes tuloksena on yksi yhtenäinen puu Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 29/31

Kruskalin menetelmä joukko Kruskal(V,E) // Oletetaan, että verkko on yhtenäinen { T = tyhjä joukko; while (metsä <V,T> ei ole puu) { valitse e in E, jolla l(e) on pienin; poista e teiden joukosta E; if (e:n päät kuuluvat T:n eri puihin) lisää e lyhimmän virittävän puun teiden joukkoon T; } return T; } Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 30/31

Kruskalin menetelmä Aikavaativuus riippuu minimaalisen tien valintatavasta ja joukko-operaatioiden toteutuksesta Merkitään e = kaarien lukumäärä Tehokkaita tietorakenteita käyttäen voidaan laatia toteutus, jonka vaativuus on O(e log e) Algoritmit 1 Kevät 2016 Luento 13 Ti 23.2.2016 31/31