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