Como veo que la gente pregunta por las tablas hash, voy a explicar un poco en que consisten.
Una tabla hash es básicamente un asociación entre keys y datos. Esto quiere decir lo siguiente:
PEPE::::>1
JUAN::::>2
etc...
Se compone de:
* Un vector direccionable mediante número de posición ( un array ) capaz de almacenar N elementos.
* Una función de dispersión que nos permita a partir de la clave obtener el índice donde estará el dato asociado a esa clave.Es frecuente que existan dos claves distintas para las que la función de dispersión produzca el mismo indice.Esto se denomina colisión, y las dos claves distintas que dieron lugar al mismo índice, se dicen sinónimas respecto a la función de dispersión utilizada.
* Una función de resolución de colisiones.
Ahora bien, existen muchas formas de implementar una tabla de dispersión. La forma global de distinguirlas es:
tabla de dispersión cerradatabla de dispersión abiertatablas de dispersión cerradalos datos se almacenan dentro de la tabla. Esto provoca que en caso de colisión, se tenga que buscar una posición libre dentro de ésta. Como ventaja, no necesita de una estructura de datos auxiliar. Como desventaja, es posible que se produzcan colisiones en cadena.
tablas de dispersión abiertaLos elementos se almacenan en una segunda estructura de datos. Imaginaos una fila de bolsas (el array), donde en cada posición se pueden ir almacenando otra bolsa (segunda estructura de datos); que es donde finalmente se insertará el elemento. Ésta forma de implementar las tablas hash tiene mas uso y a mi gusto es la que mas utilidad tiene (dependiendo del caso, obviamente).
¿Cómo se implementa?.
Vamos a pensar un poco: es necesario que el elemento tenga una función de dispersión para decidir en que posición del array se insertará. Es aquí donde se pueden producir las colisiones. Si la función de dispersión es buena, el problema se planteará pocas veces, pero si por el contrario es mala, la gestión de colisiones es un problema preocupante. Por lo tanto, la función de dispersión es algo vital en una tabla hash.
Ahora, un ejemplo de lo que he explicado:
Para ver este enlace Registrate o Inicia Sesionhttp://www.lfcia.org/~valderru/alg/tablas_de_dispersion.pdf
Con esto y ese material, lo entendéis a la primera.
Saludos.