Algoritmit 2 Demot 2 3.-4.4.2019 Timo Männikkö
Tehtävä 1 Avoin osoitteenmuodostus: Hajautustaulukko t (koko m) Erikoisarvot VAPAA ja POISTETTU Hajautusfunktio h(k,i) Operaatiot: lisaa etsi poista Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 2/35
Tehtävä 1 (a) lisaa(t,alkio) { k = alkio.avain; for (i = 0; i < m; i++) { j = h(k,i); if (t[j] == VAPAA t[j] == POISTETTU) { t[j] = alkio; return true; // onnistui } } return false; // taulukko täynnä } Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 3/35
Tehtävä 1 (b) etsi(t,alkio) { k = alkio.avain; for (i = 0; i < m; i++) { j = h(k,i); if (t[j] == VAPAA) break; // alkioketju loppui, lopetetaan if (t[j]!= POISTETTU && t[j].avain == k) return j; // löytyi, palautetaan indeksi } return -1; // ei löytynyt, palautetaan virhe } Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 4/35
Tehtävä 1 (c) poista(t,alkio) { j = etsi(t,alkio); if (j < 0) return error; else t[j] = POISTETTU; } Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 5/35
Tehtävä 2 (a) Lisätään luvut 23, 47, 17, 75, 53, 33, 62 ja 18 h(k, i) = ((k mod 10) + i) mod 10, i = 0, 1, 2,... 0 1 2 3 4 5 6 7 8 9 - - - 23 - - - - - - i = 0 - - - 23 - - - 47 - - i = 0 - - - 23 - - - 47 17 - i = 1 - - - 23-75 - 47 17 - i = 0 - - - 23 53 75-47 17 - i = 1 - - - 23 53 75 33 47 17 - i = 3 - - 62 23 53 75 33 47 17 - i = 0 - - 62 23 53 75 33 47 17 18 i = 1 Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 6/35
Tehtävä 2 (b) Lisätään luvut 23, 47, 17, 75, 53, 33, 62 ja 18 h(k, i) = ((k mod 10) + i 2 ) mod 10, i = 0, 1, 2,... 0 1 2 3 4 5 6 7 8 9 - - - 23 - - - - - - i = 0 - - - 23 - - - 47 - - i = 0 - - - 23 - - - 47 17 - i = 1 - - - 23-75 - 47 17 - i = 0 - - - 23 53 75-47 17 - i = 1 - - 33 23 53 75-47 17 - i = 3, i 2 = 9 - - 33 23 53 75 62 47 17 - i = 2, i 2 = 4 - - 33 23 53 75 62 47 17 18 i = 1 Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 7/35
Tehtävä 2 (c) Lisätään luvut 23, 47, 17, 75, 53, 33, 62 ja 18 h(k, i) = ((k mod 10) + i (7 (k mod 7))) mod 10 0 1 2 3 4 5 6 7 8 9 - - - 23 - - - - - - i = 0 - - - 23 - - - 47 - - i = 0-17 - 23 - - - 47 - - i = 1, 7 (17 mod 7) = 4-17 - 23-75 - 47 - - i = 0-17 - 23-75 53 47 - - i = 1, 7 (53 mod 7) = 3-17 - 23-75 53 47-33 i = 3, 7 (33 mod 7) = 2-17 62 23-75 53 47-33 i = 0-17 62 23-75 53 47 18 33 i = 0 Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 8/35
Tehtävä 3 (a) 20 30 48 58 70 88 11 15 17 22 28 35 49 50 62 66 73 79 90 96 Lisätään 13: x 48 haarautumissolmu y 20,30 ei täysi x 20,30 haarautumissolmu y 11,15,17 täysi, halkaistaan (a=15) Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 9/35
Tehtävä 3 (a) jatkuu 15 20 30 48 58 70 88 11 17 22 28 35 49 50 62 66 73 79 90 96 x 15,20,30 y 11, z 17 x 11 lehtisolmu joten lisätään Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 10/35
Tehtävä 3 (a) jatkuu 48 15 20 30 58 70 88 11 13 17 22 28 35 49 50 62 66 73 79 90 96 Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 11/35
Tehtävä 3 (b) 20 30 48 58 70 88 11 15 17 22 28 35 49 50 62 66 73 79 90 96 Lisätään 52: x 48 haarautumissolmu y 58,70,88 täysi, halkaistaan (a=70) Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 12/35
Tehtävä 3 (b) jatkuu 20 30 48 70 58 88 11 15 17 22 28 35 49 50 62 66 73 79 90 96 x 48,70 y 58, z 88 x 58 haarautumissolmu y 49,50 ei täysi x 49,50 lehtisolmu joten lisätään Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 13/35
Tehtävä 3 (b) jatkuu 48 70 58 88 20 30 11 15 17 22 28 35 49 50 52 62 66 73 79 90 96 Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 14/35
Tehtävä 4 (a) 20 30 48 58 70 88 11 15 17 22 28 35 49 50 62 66 73 79 90 96 Poistetaan 35: x 48 haarautumissolmu y 20,30 ei puoliksi täysi x 20,30 haarautumissolmu y 35 puoliksi täysi z 22,28 yksi yli minimin, siirretään (a=30, b=28) Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 15/35
Tehtävä 4 (a) jatkuu 20 28 48 58 70 88 11 15 17 22 30 35 49 50 62 66 73 79 90 96 x 20,28 z 22, y 30,35 x 30,35 lehtisolmu joten poistetaan Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 16/35
Tehtävä 4 (a) jatkuu 20 28 48 58 70 88 11 15 17 22 30 49 50 62 66 73 79 90 96 Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 17/35
Tehtävä 4 (b) 20 30 48 58 70 88 11 15 17 22 28 35 49 50 62 66 73 79 90 96 Poistetaan 58: x 48 haarautumissolmu y 58,70,88 ei puoliksi täysi x 58,70,88 haarautumissolmu, sisältää poistettavan y 49,50 yksi yli minimin k 50 poistettavan edeltäjä Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 18/35
Tehtävä 4 (b) jatkuu 20 30 48 58 70 88 11 15 17 22 28 35 49 50 62 66 73 79 90 96 Poistetaan k =50: x 58,70,88 haarautumissolmu y 49,50 ei puoliksi täysi x 49,50 lehtisolmu joten poistetaan Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 19/35
Tehtävä 4 (b) jatkuu 20 30 48 58 70 88 11 15 17 22 28 35 49 62 66 73 79 90 96 Poisto k =50 tehty, palataan takaisin: x 58,70,88 korvataan 58 alkiolla k =50 Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 20/35
Tehtävä 4 (b) jatkuu 20 30 48 50 70 88 11 15 17 22 28 35 49 62 66 73 79 90 96 Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 21/35
Tehtävä 5 (a) Tallennetaan nelipuuhun pisteet (7,15), (3,2), (13,3), (5,10), (6,6), (6,13), (1,3) (7,15) Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 22/35
Tehtävä 5 (a) jatkuu Tallennetaan nelipuuhun pisteet (7,15), (3,2), (13,3), (5,10), (6,6), (6,13), (1,3) ( o x x o ) / / (7,15) (3,2) Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 23/35
Tehtävä 5 (a) jatkuu Tallennetaan nelipuuhun pisteet (7,15), (3,2), (13,3), (5,10), (6,6), (6,13), (1,3) ( o x x x ) / \ / \ (7,15) (3,2) (13,3) Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 24/35
Tehtävä 5 (a) jatkuu Tallennetaan nelipuuhun pisteet (7,15), (3,2), (13,3), (5,10), (6,6), (6,13), (1,3) ( o x x x ) / \ / \ (x o o x) (3,2) (13,3) (7,15) (5,10) Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 25/35
Tehtävä 5 (a) jatkuu Tallennetaan nelipuuhun pisteet (7,15), (3,2), (13,3), (5,10), (6,6), (6,13), (1,3) ( o x x x ) / \ / \ (x o o x) (x o x o) (13,3) \ (7,15) (5,10) (6,6) (3,2) Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 26/35
Tehtävä 5 (a) jatkuu Tallennetaan nelipuuhun pisteet (7,15), (3,2), (13,3), (5,10), (6,6), (6,13), (1,3) ( o x x x ) / \ / \ (x o o x) (x o x o) (13,3) / \ (x o o x) (5,10) (6,6) (3,2) (7,15) (6,13) Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 27/35
Tehtävä 5 (a) jatkuu Tallennetaan nelipuuhun pisteet (7,15), (3,2), (13,3), (5,10), (6,6), (6,13), (1,3) ( o x x x ) / \ / \ (x o o x) (x o x o) (13,3) / \ (x o o x) (5,10) (6,6) (x x o o) / \ (7,15) (6,13) (3,2) (1,3) Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 28/35
Tehtävä 5 (b) Tallennetaan nelipuuhun pisteet (6,6), (1,3), (3,2), (7,15), (6,13), (5,10), (13,3) (6,6) Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 29/35
Tehtävä 5 (b) jatkuu Tallennetaan nelipuuhun pisteet (6,6), (1,3), (3,2), (7,15), (6,13), (5,10), (13,3) ( o o x o ) (x o x o) \ (6,6) (1,3) Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 30/35
Tehtävä 5 (b) jatkuu Tallennetaan nelipuuhun pisteet (6,6), (1,3), (3,2), (7,15), (6,13), (5,10), (13,3) ( o o x o ) (x o x o) \ (6,6) (x x o o) / \ (3,2) (1,3) Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 31/35
Tehtävä 5 (b) jatkuu Tallennetaan nelipuuhun pisteet (6,6), (1,3), (3,2), (7,15), (6,13), (5,10), (13,3) ( o x x o ) / / (7,15) (x o x o) \ (6,6) (x x o o) / \ (3,2) (1,3) Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 32/35
Tehtävä 5 (b) jatkuu Tallennetaan nelipuuhun pisteet (6,6), (1,3), (3,2), (7,15), (6,13), (5,10), (13,3) ( o x x o ) / / (x o o o) (x o x o) / \ (x o o x) (6,6) (x x o o) / \ (7,15) (6,13) (3,2) (1,3) Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 33/35
Tehtävä 5 (b) jatkuu Tallennetaan nelipuuhun pisteet (6,6), (1,3), (3,2), (7,15), (6,13), (5,10), (13,3) ( o x x o ) / / (x o o x) (x o x o) / \ (x o o x) (5,10) (6,6) (x x o o) / \ (7,15) (6,13) (3,2) (1,3) Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 34/35
Tehtävä 5 (b) jatkuu Tallennetaan nelipuuhun pisteet (6,6), (1,3), (3,2), (7,15), (6,13), (5,10), (13,3) ( o x x x ) / \ / \ (x o o x) (x o x o) (13,3) / \ (x o o x) (5,10) (6,6) (x x o o) / \ (7,15) (6,13) (3,2) (1,3) Algoritmit 2 Kevät 2019 Demot 2 3.-4.4.2019 35/35