Algoritmit 2 Demot 4 24.-25.4.2019 Timo Männikkö
Tehtävä 1 (a) int laske(n) { if (n <= 1) return 1; for (i = 0; i < w; i++) x = laske(n/2); for (j = 0; j < n; j++) for (k = 0; k < n; k++) x++; return x; } T (n) = missä c 1, c > 0 vakioita Kun n > 1 tehdään w kertaa rekursiivinen kutsu syöttötiedon koolla n/2 suoritetaan n 2 kertaa vakioaikainen lause { c 1, kun n 1, wt (n/2) + cn 2, kun n > 1, Algoritmit 2 Kevät 2019 Demot 4 24.-25.4.2019 2/23
Tehtävä 1 (b) T (n) = { c 1, kun n 1 wt (n/2) + cn 2, kun n > 1 Master-lauseessa a = w, b = 2, α = 2 ja c 0 Tapaus w = 3: a < b α T (n) = Θ(n α ) = Θ(n 2 ) Tapaus w = 4: a = b α T (n) = Θ(n α log b n) = Θ(n 2 log 2 n) Tapaus w = 5: a > b α T (n) = Θ(n log b a ) = Θ(n log 2 5 ) (log 2 5 2,32) Algoritmit 2 Kevät 2019 Demot 4 24.-25.4.2019 3/23
Tehtävä 2 (a) Kruskal(N, E) { 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 2019 Demot 4 24.-25.4.2019 4/23
Tehtävä 2 (a) jatkuu S T (A,B) (A,C) (A,D) (A,E) (B,C) (B,D) - (B,E) (C,D) (D,E) (A,B) (A,C) (A,D) (B,C) (B,D) (B,E) (C,D) (D,E) (A,B) (A,C) (A,D) (B,D) (B,E) (C,D) (D,E) (A,B) (A,C) (B,D) (B,E) (C,D) (D,E) (A,B) (A,C) (B,D) (B,E) (C,D) (A,C) (B,D) (B,E) (C,D) (A,E) (A,E) (B,C) (A,E) (B,C) (A,D) (A,E) (B,C) (A,D) (A,E) (B,C) (A,D) (A,B) Algoritmit 2 Kevät 2019 Demot 4 24.-25.4.2019 5/23
Tehtävä 2 (b) Prim(N, E) { 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 2019 Demot 4 24.-25.4.2019 6/23
Tehtävä 2 (b) U T A - A E (A,E) A E D (A,E) (A,D) A E D B (A,E) (A,D) (A,B) A E D B C (A,E) (A,D) (A,B) (B,C) E 2 A 6 4 D B 3 C Algoritmit 2 Kevät 2019 Demot 4 24.-25.4.2019 7/23
Tehtävä 3 (a) Huffmanin koodit merkeille, joiden esiintymistiheydet ovat: a b c d e f g 34 16 12 3 7 15 18 3 7 12 15 16 18 34 10 12 15 16 18 34 / \ 3 7 Algoritmit 2 Kevät 2019 Demot 4 24.-25.4.2019 8/23
Tehtävä 3 (a) jatkuu 15 16 18 22 34 / \ 10 12 / \ 3 7 18 22 31 34 / \ / \ 10 12 15 16 / \ 3 7 31 34 40 / \ / \ 15 16 18 22 / \ 10 12 / \ 3 7 Algoritmit 2 Kevät 2019 Demot 4 24.-25.4.2019 9/23
Tehtävä 3 (a) jatkuu 40 65 / \ / \ 18 22 31 34 / \ / \ 10 12 15 16 / \ 3 7 105 / \ / \ 40 65 / \ / \ 18 22 31 34 / \ / \ 10 12 15 16 / \ 3 7 Algoritmit 2 Kevät 2019 Demot 4 24.-25.4.2019 10/23
Tehtävä 3 (a) jatkuu * / \ * / \ 0 / \ 1 * * / \ / \ / \ g * * a / \ / \ * c f b / \ d e Koodit: a b c d e f g 11 101 011 0100 0101 100 00 Algoritmit 2 Kevät 2019 Demot 4 24.-25.4.2019 11/23
Tehtävä 3 (b) a b c d e f g 11 101 011 0100 0101 100 00 Vakiopituinen koodi, 3 bittiä/merkki: 3 105 = 315 bittiä Huffmanin koodit: 2 34 + 3 16 + 3 12 + 4 3 + 4 7 + 3 15 + 2 18 = 273 bittiä Tilaa säästyy 42 bittiä, joka on 13,3 % vakiopituisen tarvitsemasta tilasta. Algoritmit 2 Kevät 2019 Demot 4 24.-25.4.2019 12/23
Tehtävä 4 (a) ababbabbbabb 0 1 a b a babbabbbabb 0 0 1 2 a b ab ab abbabbbabb 01 0 1 2 3 a b ab ba Algoritmit 2 Kevät 2019 Demot 4 24.-25.4.2019 13/23
Tehtävä 4 (a) jatkuu abab babbbabb 012 0 1 2 3 4 a b ab ba abb ababba bbbabb 0123 0 1 2 3 4 5 a b ab ba abb bab ababbab bbabb 01231 0 1 2 3 4 5 6 a b ab ba abb bab bb Algoritmit 2 Kevät 2019 Demot 4 24.-25.4.2019 14/23
Tehtävä 4 (a) jatkuu ababbabbb abb 012316 0 1 2 3 4 5 6 7 a b ab ba abb bab bb bba ababbabbbabb 0123164 0 1 2 3 4 5 6 7 a b ab ba abb bab bb bba Merkkijonon pituus 12 ja koodin pituus 7, joten tilaa säästyy 5/12 41,7 % Algoritmit 2 Kevät 2019 Demot 4 24.-25.4.2019 15/23
Tehtävä 4 (b) 11042036 0 1 a b 1 1042036 b 0 1 a b 11 042036 bb 0 1 2 a b bb Algoritmit 2 Kevät 2019 Demot 4 24.-25.4.2019 16/23
Tehtävä 4 (b) jatkuu 110 42036 bba 0 1 2 3 a b bb ba 1104 2036 bbaaa 0 1 2 3 4 a b bb ba aa 11042 036 bbaaabb 0 1 2 3 4 5 a b bb ba aa aab Algoritmit 2 Kevät 2019 Demot 4 24.-25.4.2019 17/23
Tehtävä 4 (b) jatkuu 110420 36 bbaaabba 0 1 2 3 4 5 6 a b bb ba aa aab bba 1104203 6 bbaaabbaba 0 1 2 3 4 5 6 7 a b bb ba aa aab bba ab 11042036 bbaaabbababba 0 1 2 3 4 5 6 7 8 a b bb ba aa aab bba ab bab Merkkijonon pituus 13 ja koodin pituus 8, joten tilaa säästyy 5/13 38,5 % Algoritmit 2 Kevät 2019 Demot 4 24.-25.4.2019 18/23
Tehtävä 5 Merkkijonoissa a (pituus m) ja b (pituus n) on kirjaimia aakkosjärjestyksessä Kukin kirjain voi esiintyä samassa merkkijonossa vain kerran Montako yhteistä kirjainta merkkijonoilla a ja b on? Algoritmit 2 Kevät 2019 Demot 4 24.-25.4.2019 19/23
Tehtävä 5 Taulukointimenetelmä: Jos merkit a i ja b j ovat samat, lasketaan merkkijonojen a 1 a 2... a i 1 ja b 1 b 2... b j 1 yhteiset merkit ja lisätään yksi Jos merkit a i ja b j eivät ole samoja, lasketaan merkkijonojen a 1 a 2... a i 1 ja b 1 b 2... b j sekä merkkijonojen a 1 a 2... a i ja b 1 b 2... b j 1 yhteiset merkit ja valitaan näistä suurempi Merkkijonot a[1..m] ja b[1..n] Yhteisten merkkien lukumäärä d[0..m][0..n] Algoritmit 2 Kevät 2019 Demot 4 24.-25.4.2019 20/23
Tehtävä 5 (a) 1. for (i = 0; i <= m; i++) d[i][0] = 0; 2. for (j = 0; j <= n; j++) d[0][j] = 0; 3. for (i = 1; i <= m; i++) { for (j = 1; j <= n; j++) { if (a[i] == b[j]) d[i][j] = d[i-1][j-1] + 1; else d[i][j] = max(d[i-1][j], d[i][j-1]); } } 4. return d[m][n]; Algoritmit 2 Kevät 2019 Demot 4 24.-25.4.2019 21/23
Tehtävä 5 (b) A B D G K M 0 1 2 3 4 5 6 0 0 0 0 0 0 0 0 A 1 0 1 1 1 1 1 1 C 2 0 1 1 1 1 1 1 G 3 0 1 1 1 2 2 2 J 4 0 1 1 1 2 2 2 M 5 0 1 1 1 2 2 3 P 6 0 1 1 1 2 2 3 Algoritmit 2 Kevät 2019 Demot 4 24.-25.4.2019 22/23
Tehtävä 5 (c) C F K L N R T 0 1 2 3 4 5 6 7 0 0 0 0 0 0 0 0 0 B 1 0 0 0 0 0 0 0 0 C 2 0 1 1 1 1 1 1 1 H 3 0 1 1 1 1 1 1 1 K 4 0 1 1 2 2 2 2 2 N 5 0 1 1 2 2 3 3 3 R 6 0 1 1 2 2 3 4 4 Algoritmit 2 Kevät 2019 Demot 4 24.-25.4.2019 23/23