Algoritmit 2. Luento 9 Ti Timo Männikkö



Samankaltaiset tiedostot
Algoritmit 2. Luento 10 To Timo Männikkö

Algoritmit 2. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 10 To Timo Männikkö

Algoritmit 2. Luento 11 Ti Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

Algoritmit 1. Luento 13 Ti Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

Algoritmit 1. Luento 13 Ma Timo Männikkö

Algoritmit 2. Luento 11 Ti Timo Männikkö

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 2. Luento 12 Ke Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

Algoritmit 2. Luento 12 To Timo Männikkö

Algoritmit 2. Luento 14 Ke Timo Männikkö

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 6 To Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 1. Luento 9 Ti Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

Algoritmit 2. Luento 6 Ke Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 1. Luento 2 Ke Timo Männikkö

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Algoritmit 1. Demot Timo Männikkö

Algoritmit 2. Luento 8 Ke Timo Männikkö

Algoritmit 1. Luento 5 Ti Timo Männikkö

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

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

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

Algoritmit 1. Luento 12 Ke Timo Männikkö

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö

7.4 Sormenjälkitekniikka

811312A Tietorakenteet ja algoritmit, VI Algoritmien suunnitteluparadigmoja

Algoritmit 1. Luento 12 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit, , Harjoitus 6, Ratkaisu

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

Algoritmit 1. Demot Timo Männikkö

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

Algoritmit 2. Luento 8 To Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

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

Algoritmit 2. Luento 14 To Timo Männikkö

Algoritmit 2. Luento 4 To Timo Männikkö

Verkon värittämistä hajautetuilla algoritmeilla

Algoritmit 1. Luento 4 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit, , Harjoitus 6, Ratkaisu

Ongelma 1: Onko datassa tai informaatiossa päällekkäisyyttä?

Laskennan teoria (kevät 2006) Harjoitus 3, ratkaisuja

Algoritmit 2. Luento 4 Ke Timo Männikkö

Algoritmit 1. Luento 7 Ti Timo Männikkö

4.3. Matemaattinen induktio

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

Ohjelmoinnin perusteet Y Python

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

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

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

Algoritmit 1. Luento 6 Ke Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

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.

Numeeriset menetelmät

Rekursiivinen Derives on periaatteessa aivan toimiva algoritmi, mutta erittäin tehoton. Jos tarkastellaan esim. kieliopinpätkää

ITKP102 Ohjelmointi 1 (6 op)

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

1.1 Tavallinen binäärihakupuu

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

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

Luetteloivat ja heuristiset menetelmät. Mat , Sovelletun matematiikan tutkijaseminaari, kevät 2008, Janne Karimäki

811120P Diskreetit rakenteet

Ohjelmoinnin perusteet Y Python

Datatähti 2019 loppu

Kuljetustehtävä. Materiaalia kuljetetaan m:stä lähtöpaikasta n:ään tarvepaikkaan. Kuljetuskustannukset lähtöpaikasta i tarvepaikkaan j ovat c ij

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

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

Ohjelmoinnin perusteet Y Python

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

811312A Tietorakenteet ja algoritmit III Lajittelualgoritmeista

Algoritmi on periaatteellisella tasolla seuraava:

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.

Ellipsoidimenetelmä. Samuli Leppänen Kokonaislukuoptimointi. S ysteemianalyysin Laboratorio

14 Tasapainotetut puurakenteet

Algoritmit 1. Luento 14 Ke Timo Männikkö

Ohjelmoinnin perusteet Y Python

Numeeriset menetelmät

ITKP102 Ohjelmointi 1 (6 op)

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

811120P Diskreetit rakenteet

Lineaarinen optimointitehtävä

ITKP102 Ohjelmointi 1 (6 op)

Transkriptio:

Algoritmit 2 Luento 9 Ti 19.4.2016 Timo Männikkö

Luento 9 Merkkitiedon tiivistäminen LZW-menetelmä Taulukointi Editointietäisyys Peruutus Verkon 3-väritys Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 2/30

Merkkitiedon tiivistäminen Vakiopituinen koodi: Jokainen merkki esitetään samalla määrällä bittejä Esimerkiksi ASCII-koodi: 8 bittiä Sama tallennustila riippumatta merkkitiedon sisällöstä Vaihtelevan pituinen koodi: Usein esiintyville merkeille lyhyempi koodi, harvoin esiintyville pidempi koodi Tavoitteena säästää tallennustilaa Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 3/30

LZW-menetelmä Lempel-Ziv-Welch Merkkijonoja muutetaan numeerisiksi koodeiksi Kuvaus merkkijonojen ja koodien välillä esitetään hakemistossa Hakemiston alkiossa avain ja koodi Aluksi kaikilla esiintyvillä merkeillä oma koodi Käydään läpi tiivistettävä merkkijono alusta loppuun ja samalla lisätään hakemistoon uusia alkioita Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 4/30

LZW-menetelmä: Koodaus Tiivistettävä merkkijono m Haetaan koodaamattomasta osasta m:ää pisintä etuliitettä p, joka löytyy hakemistosta Tämä etuliite koodataan löydetyllä koodilla Jos m:ssä on p:n jälkeen merkki s, lisätään hakemistoon seuraava koodi merkkijonolle ps Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 5/30

Esimerkki xxxyyyyyyxxyxxyx 0 1 x y x xxyyyyyyxxyxxyx 0 0 1 2 x y xx xxx yyyyyyxxyxxyx 02 0 1 2 3 x y xx xxy Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 6/30

Esimerkki jatkuu xxxy yyyyyxxyxxyx 021 0 1 2 3 4 x y xx xxy yy xxxyyy yyyxxyxxyx 0214 0 1 2 3 4 5 x y xx xxy yy yyy xxxyyyyyy xxyxxyx 02145 0 1 2 3 4 5 6 x y xx xxy yy yyy yyyx Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 7/30

Esimerkki jatkuu xxxyyyyyyxxy xxyx 021453 0 1 2 3 4 5 6 7 x y xx xxy yy yyy yyyx xxyx xxxyyyyyyxxyxxyx 0214537 0 1 2 3 4 5 6 7 x y xx xxy yy yyy yyyx xxyx Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 8/30

LZW-menetelmä: Koodin purku Tunnetaan koodattu jono ja yksittäisten merkkien koodit Huom: Koko hakemistoa ei tunneta, vaan se muodostuu purkamisen yhteydessä Merkintä teksti[i] tarkoittaa koodia i vastaavaa merkkijonoa Merkintä teksti[i][1] tarkoittaa koodia i vastaavan merkkijonon ensimmäistä merkkiä Olkoon k seuraavaksi käsiteltävä koodi Olkoon j koodia k edeltävä koodi Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 9/30

LZW-menetelmä: Koodin purku Jos k löytyy hakemistosta: Vastaava merkkijono teksti[k] saadaan hakemistosta Hakemistoon lisätään uusi koodi, jota vastaava merkkijono on teksti[j] + teksti[k][1] Jos k ei löydy hakemistosta: Vastaava merkkijono on teksti[j] + teksti[j][1] Lisätään k ja vastaava merkkijono hakemistoon Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 10/30

Esimerkki 0214537 0 1 x y 0 214537 x 0 1 x y 02 14537 xxx 0 1 2 x y xx Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 11/30

Esimerkki jatkuu 021 4537 xxxy 0 1 2 3 x y xx xxy 0214 537 xxxyyy 0 1 2 3 4 x y xx xxy yy 02145 37 xxxyyyyyy 0 1 2 3 4 5 x y xx xxy yy yyy Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 12/30

Esimerkki jatkuu 021453 7 xxxyyyyyyxxy 0 1 2 3 4 5 6 x y xx xxy yy yyy yyyx 0214537 xxxyyyyyyxxyxxyx 0 1 2 3 4 5 6 7 x y xx xxy yy yyy yyyx xxyx Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 13/30

Algoritmien suunnittelu 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 Käytetään usein kombinatorisille tehtäville Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 14/30

Editointietäisyys Merkkijonot x = a 1 a 2... a m ja y = b 1 b 2... b n Merkkijonojen x ja y välinen editointietäisyys on pienin määrä yhden merkin lisäys- ja poisto-operaatioita, joka tarvitaan x:n muuntamisessa y:ksi Esimerkki: AUTO AUT AU ASU ASUA Editointietäisyys 4 Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 15/30

Editointietäisyys Taulukko d[0..m][0..n] d[i][j] = jonojen a 1... a i ja b 1... b j välinen editointietäisyys d[i][0] = i (merkit a 1,..., a i poistetaan) d[0][j] = j (merkit b 1,..., b j lisätään) Jos a i = b j, niin d[i][j] = d[i 1][j 1] (viimeisiä merkkejä ei tarvitse muuttaa) Jos a i b j, niin d[i][j] = min{d[i 1][j] + 1, d[i][j 1] + 1} (a i poistetaan ensin, tai b j lisätään ensin) Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 16/30

Editointietäisyys editdist(a[1..m], b[1..n]) { int d[0..m][0..n]; for (i=0,...,m) d[i][0] = i; for (j=0,...,n) d[0][j] = j; for (i=1,...,m) for (j=1,...,n) if (a[i] == b[j]) d[i][j] = d[i-1][j-1]; else d[i][j] = min{d[i-1][j]+1, d[i][j-1]+1}; return d[m][n]; } Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 17/30

Editointietäisyys Kaksi sisäkkäistä silmukkaa Toinen silmukka suoritetaan m kertaa, toinen n kertaa Aikavaativuus Θ(mn) Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 18/30

Algoritmien suunnittelu Raa an voiman käyttö: Tutkitaan kaikki mahdolliset ratkaisuvaihtoehdot Jokaisen kohdalla selvitetään, onko se parempi kuin tähän mennessä tutkitut Usein löydetään oikoteitä, joilla menetelmää voidaan nopeuttaa: Esimerkiksi rajataan pois vaihtoehdot, joiden joukosta ei voi enää löytyä parempaa ratkaisua Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 19/30

Peruutus Lähdetään liikkeelle tyhjästä osaratkaisusta Täydennetään osaratkaisua tekemällä joitain valintoja Perutaan huonoiksi osoittautuneita valintoja Löydetään optimaalinen ratkaisu Mutta: Huonoimmassa tapauksessa joudutaan käymään läpi kaikki ratkaisuvaihtoehdot Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 20/30

Verkon 3-väritys Suuntaamaton verkko G, solmujen joukko N, teiden joukko E Kaikki solmut väritetään Solmuilla i ja j oltava eri väri, jos on tie (i, j) Tehtävä: Selvitä, onko annetulle verkolle olemassa sallittu väritys, joka käyttää vain kolmea eri väriä Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 21/30

Verkon 3-väritys Solmuja n kpl Solmun i väri c i (= 1, 2 tai 3) Verkon väritys {c 1,..., c n } Erilaisia värityksiä (mukaan lukien ei-sallitut) on 3 n Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 22/30

Verkon 3-väritys Ratkaisupuu: Juurisolmu vastaa osittaista ratkaisua, jossa solmuille ei ole asetettu mitään väriä Juurisolmulla on kolme lasta, jotka vastaavat osittaisia ratkaisuja, joissa solmulle 1 on vuorotellen asetettu eri väri Näillä kolmella solmulla on jokaisella kolme lasta, jotka vastaavat solmun 2 väritystä Jne. Täydellisessä ratkaisupuussa tasoja n + 1 kpl Lehtisolmuja 3 n kpl Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 23/30

Verkon 3-väritys Muodostetaan ratkaisupuuta solmu kerrallaan Jos polku juurisolmusta tämänhetkiseen solmuun muodostaa sallitun värityksen, ratkaisu on löytynyt ja voidaan lopettaa Jos kaikkia solmuja ei vielä väritetty ja tämänhetkisen solmun väritys on sallittu: Generoidaan tämänhetkiselle solmulle lapsisolmu, joka väritetään Merkitään lapsisolmu tämänhetkiseksi solmuksi (Jatkuu) Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 24/30

Verkon 3-väritys (Jatkuu) Jos tämänhetkisen solmun väritys ei ole sallittu, peruutetaan: Perutaan tämänhetkisen solmun viimeksi tehty väritys ja väritetään sama solmu uudestaan seuraavalla värillä Jos kaikkia värejä on jo yritetty, niin palataan ratkaisupuussa edelliselle tasolle perumaan siellä viimeksi tehty väritys Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 25/30

Verkon 3-väritys väritys(k) { for (kaikilla v=1,2,3) { c[k] = v; if (kaikki solmut väritetty ja taulukon c väritys sallittu) löytyi = true ja lopeta; else if (taulukon c osittainen väritys sallittu) väritys(k+1); } löytyi = false ja lopeta; } Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 26/30

Verkon 3-väritys // Algoritmin aloitus for (kaikilla k=1,...,n) c[k] = 0; // Mikään solmu ei väritetty löytyi = false; väritys(1); // Solmut väritetään // numerojärjestyksessä if (löytyi on true) löydetty väritys on taulukossa c else ei sallittua väritystä Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 27/30

Esimerkki A C B E D 1 1 1 1 2 2 Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 28/30

Esimerkki jatkuu 1 1 1 1 1 1 2 3 2 3 2 1 3 1 3 1 3 2 2 1 3 1 2 Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 29/30

Esimerkki: Ratkaisupuu A: B: ei 2 C: 1 D: ei ei 3 E: ei ei ei 1 A: 1 B: ei 2 C: ei ei 3 D: 1 E: ei ei 3 Algoritmit 2 Kevät 2016 Luento 9 Ti 19.4.2016 30/30