In una tabella Hash di m = 17 posizioni, inizialmente vuota, devono essere inserite le seguenti chiavi numeriche nell’ordine indicato:
23, 40, 15, 58, 85
Indicare per ogni chiave la posizione finale dove viene allocata in questi due casi:
a. Funzione Hash:
h(k) = k mod m
Risoluzione delle collisioni mediante concatenamento
b. La tabella è a indirizzamento aperto e la scansione è eseguita per doppio Hashing:
h(k, i) = (k mod m + i * 2k mod 5) mod m
Si devono indicare tutte le posizioni scandite nella tabella.
Svolgimento
Caso A:
- 23 mod 17 = 6 → 6[0] = 23
- 40 mod 17 = 6 → 6[1] = 40
- 15 mod 17 = 15 → 15[0] = 15
- 58 mod 17 = 7 → 7[0] = 58
- 85 mod 17 = 0 → 0[0] = 85
Risultato:
0: 85; 1:; 2:; 3:; 4:; 5:; 6: 23, 40; 7: 58; 8:; 9:; 10:; 11:; 12:; 13:; 14:; 15: 15; 16:;
Caso B
- i = 0, k = 23: (23 mod 17 + 0 * 2*23 mod 5) mod 17 = 6
- i = 1, k = 40: (40 mod 17 + 1 * 2*40 mod 5) mod 17 = 6: c'è una collisione, quindi si scorre fino al numero 7
- i = 2, k = 15: (15 mod 17 + 2 * 2*15 mod 5) mod 17 = 15
- i = 3, k = 58: (58 mod 17 + 3 * 2*58 mod 5) mod 17 = 10
- i = 4, k = 85: (85 mod 17 + 4 * 2*85 mod 5) mod 17 = 0
Risultato:
0: 85; 1:; 2:; 3:; 4:; 5:; 6: 23; 7: 40; 8:; 9:; 10: 58; 11:; 12:; 13:; 14:; 15: 15; 16:;