03 ia tablas hash
DESCRIPTION
ejercicioes tabla hashTRANSCRIPT
Ing. Luis B. Palma Ttito
TABLAS HASH La tabla Hash o tabla de localización, nos permiten
acceder asociativamente a la información y, además, lo hacen en un tiempo medio constante, es decir, que el tiempo necesario para acceder a un elemento, no va a depender del número de elementos que almacene la estructura.
f(clave)
Estructura de la Tabla Hash Una estructura Hash se construye con tres elementos
básicos :
Un vector direccionable mediante número de posición (un vector) 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 índice. 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
VECTOR DIRECCIONABLE La estructura más adecuada para este propósito son las
Estructuras del tipo Arreglo, los cuales almacenan un conjunto de variables del mismo tipo, cuyo acceso se realiza atreves de índices
FUNCIÓN DE DISPERSIÓN La función de dispersión permite mediante la clave de
búsqueda obtener un índice del arreglo en la cual deberá guardarse dicha clave. La elección de una buena función de dispersión es vital para el buen funcionamiento de la estructura.
Características de la Función de Dispersión
Sencilla y por tanto rápida. La función debe distribuir uniformemente los elementos en el
espacio de almacenamiento Evitar en lo posible la aparición de sinónimos (evitar
colisiones) Para dos claves muy similares, generar posiciones distantes.
Función de dispersión Función Hash(ClaveBusqueda, TamañoTablaHash)
Inicio
ValorHash 0
PARA i 1 HASTA longitud(ClaveBusqueda) HACER
ValorHash ValorHash + Valor_Numerico(Clavei)
Retornar ValorHash mod TamañoTablaHash
Fin
Función de dispersión Función Hash(ClaveBusqueda, TamañoTablaHash)
Inicio
ValorHash 0
PARA i 1 HASTA longitud(ClaveBusqueda) HACER
ValorHash 37 * ValorHash + Valor_Numerico(Clavei)
ValorHash ValorHash mod TamañoTablaHash
Si ValorHash < 0 Entonces
ValorHash TamañoTablaHash + ValorHash
Retornar ValorHash
Fin
FUNCIÓN DE RESOLUCIÓN DE COLISIONES Es inevitable que algunas claves distintas lleguen a producir
el mismo resultado de la función de dispersión. Esto es un problema. Pero hay dos estrategias muy utilizadas para resolverlo este problema: Dispersión Abierta: utilizaremos una estructura de datos
auxiliar para guardar los elementos cuya posición ya esta ocupada por otros elementos. Se suele utilizar una lista.
Dispersión cerrada: Evita el uso de una segunda estructura de datos. En caso de colisión, se busca una posición alternativa hasta que se encuentre una libre. Se pueden llegar a producir colisiones en cadena. Exploración lineal
Exploración cuadrática
Operaciones de la Tabla Hash Búsqueda
Insertar
Eliminar
Algoritmo de búsqueda 1. A partir de la clave de búsqueda, se le aplica la
función de dispersión. Esto nos da un índice del arreglo.
2. Si el dato buscado está en ese índice, se devuelve el índice y se finaliza.
3. Sino, se busca en la zona de resolución de colisiones.
4. Si está, se devuelve la posición del elemento en la estructura y se finaliza.
5. Sino se indica que no se encuentra y se finaliza.
Algoritmo de Inserción 1. A partir de la clave de búsqueda, se le aplica la función de
dispersión. Esto nos da un índice del arreglo. 2. Si ese índice esta libre o marcado como borrado, se
guarda en él el elemento y se finaliza, Caso contrario, ir a 3.
3. Si quedan posiciones libres, ir a 4. Sino indicar que no quedan posiciones libres y finalizar.
4. Se aplica la función de resolución de colisiones, que nos da un nuevo índice.
5. Si está nueva posición está libre, se guarda el elemento y se finaliza.
6. Sino se vuelve a 3.
Algoritmo de Eliminación 1. Se Busca el elemento. Si se encuentra, ir a 2. Caso
contrario error y finalizar.
2. Se marca el elemento como borrado y finalizar.
Algoritmo de modificaciones 1. Se busca el elemento. Si se encuentra, ir a 2. Caso
contrario error y finalizar.
2. Se hacen las modificaciones en la posición devuelta por la búsqueda y se finaliza.
Determinación del tamaño de la Tabla(N) El tamaño (N) de la tabla hash es un parámetro de vital
importancia para el correcto funcionamiento de la estructura. Si N es demasiado alto, las operaciones serán muy eficientes, pero desperdiciaremos demasiado espacio. Si por el contrario, N es demasiado bajo, las colisiones se dispararán y la estructura tendrá un rendimiento malo. Además, uno de los fundamentales problemas de las tablas Hash es que una vez puesta en funcionamiento, la única forma de hacer crecer N es hacer una estructura nueva y copiar los datos que ya hubiera en la antigua: N no se puede cambiar dinámicamente.
Calculo del tamaño de la Tabla Hash N primer número primo mayor que 2M, donde M =
cantidad de datos que se pretende guardar en la tabla hash.
Por ejemplo, si se desea guardar 5000 datos, entonces el tamaño de la tabla será igual a 10007, ya que 10007 es el primer número primo superior a 5000*2