03 IA Tablas Hash

18
Ing. Luis B. Palma Ttito

description

ejercicioes tabla hash

Transcript of 03 IA Tablas Hash

Page 1: 03 IA Tablas Hash

Ing. Luis B. Palma Ttito

Page 2: 03 IA Tablas Hash

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)

Page 3: 03 IA Tablas Hash

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

Page 4: 03 IA Tablas Hash

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

Page 5: 03 IA Tablas Hash

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.

Page 6: 03 IA Tablas Hash

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

Page 7: 03 IA Tablas Hash

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

Page 8: 03 IA Tablas Hash
Page 9: 03 IA Tablas Hash
Page 10: 03 IA Tablas Hash

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

Page 11: 03 IA Tablas Hash
Page 12: 03 IA Tablas Hash

Operaciones de la Tabla Hash Búsqueda

Insertar

Eliminar

Page 13: 03 IA Tablas Hash

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.

Page 14: 03 IA Tablas Hash

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.

Page 15: 03 IA Tablas Hash

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.

Page 16: 03 IA Tablas Hash

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.

Page 17: 03 IA Tablas Hash

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.

Page 18: 03 IA Tablas Hash

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