Saltar al contenido

Modelo por capas

El contrato de una clave

Una tabla hash usa dos operaciones sobre las claves:

  • hash(k): para elegir la cubeta;
  • igualdad (a = b): para reconocer la clave dentro de la cubeta.

Para que funcione, tienen que cumplir un contrato:

Texto
si a = b, entonces hash(a) = hash(b)

Si dos claves iguales dieran hashes distintos, irían a cubetas distintas y la búsqueda miraría en la equivocada. Lo contrario no hace falta: claves distintas pueden tener el mismo hash (es una colisión).

En el fenómeno, el punto (3, 4) usaba una igualdad que compara x e y, pero un hash calculado a partir de su posición en memoria: dos puntos (3, 4) creados por separado daban hashes distintos.

Dos claves iguales con hash distintoDos puntos (3, 4) creados por separado: iguales según su igualdad, que compara x e y. Pero el hash se calcula desde su posición en memoria y es distinto: el primero, al insertarse, fue a la cubeta 1 de una tabla de 8; el segundo, al buscarse, apunta a la cubeta 6, que está vacía, y la búsqueda responde que no está. Los números de cubeta son de ejemplo.01234567(3, 4)*vacía(3, 4) primero(3, 4) despuéshash por memoria: 1hash por memoria: 6a = b: igualesx e y coincidenpero hash(a) ≠ hash(b)
Valores de ejemplo para las cubetas. La búsqueda mira la cubeta 6, y el punto está en la 1.
Un tipo Correo considera iguales dos direcciones que solo difieren en mayúsculas: ANA@x.com = ana@x.com. Lo usas como clave de una tabla hash. ¿Qué función hash rompe el contrato?