Repaso Tablas de Hash

Primitivas

Mejor Amortizado Peor
find O(1) O(1) O(n)
insert O(1) O(1) O(n)
get O(1) O(1) O(n)
delete O(1) O(1) O(n)

Queremos que todo sea O(1) (en el peor caso)

Dos técnicas de hashing:

Hoptscotch Hashing (rayuela)

h(x) → num

K: tamaño del vecindario

Vecindario: los k números después de mi (además de mi), que también hashean al mismo número

Ejemplo k = 3, n = 8

Untitled

Así el find se vuelve O(k) en el peor caso, porque me fijo en el valor del hash y en su vecindario

Al final me queda

0 A 100
1 D 000
2 000
3 F 101
4 C 101
5 G 000
6 E 000
7 B 101

Si ahora quiero insertar H en 6, como el único vacío es el 2, muevo A al 2 e inserto H en 0

0 H 001
1 D 000
2 A 000
3 F 101
4 C 101
5 G 000
6 E 000
7 B 101