Aquí hay una explicación en términos simples.
Supongamos que desea llenar una biblioteca con libros y no solo meterlos allí, sino que también desea poder encontrarlos fácilmente cuando los necesite.
Entonces, usted decide que si la persona que quiere leer un libro sabe el título del libro y el título exacto para arrancar, entonces eso es todo lo que debe tomar. Con el título, la persona, con la ayuda del bibliotecario, debería poder encontrar el libro fácil y rápidamente.
Entonces, ¿cómo puedes hacer eso? Bueno, obviamente puede mantener algún tipo de lista de dónde coloca cada libro, pero luego tiene el mismo problema que buscar en la biblioteca, necesita buscar en la lista. De acuerdo, la lista sería más pequeña y más fácil de buscar, pero aún así no desea buscar secuencialmente de un extremo de la biblioteca (o lista) al otro.
Desea algo que, con el título del libro, pueda darle el lugar correcto de una vez, por lo que todo lo que tiene que hacer es caminar hasta el estante correcto y recoger el libro.
¿Pero cómo se puede hacer eso? Bueno, con un poco de previsión cuando llenas la biblioteca y mucho trabajo cuando llenas la biblioteca.
En lugar de comenzar a llenar la biblioteca de un extremo al otro, diseña un pequeño método inteligente. Usted toma el título del libro, lo ejecuta a través de un pequeño programa de computadora, que escupe un número de estante y un número de ranura en ese estante. Aquí es donde colocas el libro.
La belleza de este programa es que más adelante, cuando una persona vuelve a leer el libro, usted alimenta el título a través del programa una vez más, y obtiene el mismo número de estante y número de ranura que le dieron originalmente, y esto es donde se encuentra el libro.
El programa, como otros ya han mencionado, se llama algoritmo hash o cómputo hash y generalmente funciona tomando los datos ingresados (el título del libro en este caso) y calcula un número a partir de él.
Para simplificar, digamos que solo convierte cada letra y símbolo en un número y los resume todos. En realidad, es mucho más complicado que eso, pero dejémoslo así por ahora.
La belleza de tal algoritmo es que si ingresas la misma entrada una y otra vez, seguirá escupiendo el mismo número cada vez.
Ok, así es básicamente cómo funciona una tabla hash.
Lo técnico sigue.
Primero, está el tamaño del número. Por lo general, la salida de dicho algoritmo hash está dentro de un rango de algún número grande, generalmente mucho más grande que el espacio que tiene en su tabla. Por ejemplo, digamos que tenemos espacio para exactamente un millón de libros en la biblioteca. La salida del cálculo de hash podría estar en el rango de 0 a mil millones, que es mucho mayor.
¿Asi que que hacemos? Usamos algo llamado cálculo de módulo, que básicamente dice que si contabas el número que querías (es decir, el número de mil millones) pero querías mantenerte dentro de un rango mucho más pequeño, cada vez que alcanzas el límite de ese rango más pequeño, comienzas de nuevo en 0, pero debes hacer un seguimiento de cuán lejos has llegado en la gran secuencia.
Digamos que la salida del algoritmo hash está en el rango de 0 a 20 y obtienes el valor 17 de un título en particular. Si el tamaño de la biblioteca es de solo 7 libros, usted cuenta 1, 2, 3, 4, 5, 6 y cuando llega a 7, comienza de nuevo en 0. Dado que necesitamos contar 17 veces, tenemos 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, y el número final es 3.
Por supuesto, el cálculo del módulo no se hace así, se hace con la división y el resto. El resto de dividir 17 entre 7 es 3 (7 va 2 veces en 17 a 14 y la diferencia entre 17 y 14 es 3).
Por lo tanto, pones el libro en la ranura número 3.
Esto lleva al siguiente problema. Colisiones. Dado que el algoritmo no tiene forma de espaciar los libros para que llenen la biblioteca exactamente (o la tabla hash si lo desea), invariablemente terminará calculando un número que se ha utilizado antes. En el sentido de la biblioteca, cuando llegas al estante y al número de ranura en el que deseas colocar un libro, ya hay un libro allí.
Existen varios métodos de manejo de colisiones, incluida la ejecución de los datos en otro cálculo para obtener otro lugar en la tabla ( doble hashing ), o simplemente para encontrar un espacio cercano al que le dieron (es decir, justo al lado del libro anterior asumiendo el espacio estaba disponible también conocido como sondeo lineal ). Esto significaría que tienes que cavar cuando intentas encontrar el libro más tarde, pero aún así es mejor que simplemente comenzar en un extremo de la biblioteca.
Finalmente, en algún momento, es posible que desee poner más libros en la biblioteca de los que la biblioteca permite. En otras palabras, necesita construir una biblioteca más grande. Dado que el lugar exacto en la biblioteca se calculó utilizando el tamaño exacto y actual de la biblioteca, se deduce que si cambia el tamaño de la biblioteca, es posible que tenga que encontrar nuevos lugares para todos los libros, ya que el cálculo se realizó para encontrar sus lugares ha cambiado.
Espero que esta explicación sea un poco más realista que los cubos y las funciones :)