t a b l a d e d i s p e r s i o n (hash table)

17
FUNCION DE DISPERSION (Función Hash) Una función hash es un algoritmo matemático que nos da un resultado B al aplicarlo a un valor inicial A. Es como cualquier función matemática, por ejemplo la función raíz cuadrada nos daría como resultado 2 si se la aplicamos al número 4. Al igual que cualquier función matemática tiene que actuar de tal forma y tiene que cumplir con ciertos criterios. No nos puede devolver cualquier cosa, lo que nos devuelva requiere que tenga ciertas propiedades para que podamos usarlo.

Upload: angie-suarez

Post on 11-Jan-2015

2.760 views

Category:

Technology


5 download

DESCRIPTION

 

TRANSCRIPT

Page 1: T A B L A  D E  D I S P E R S I O N (Hash Table)

FUNCION DE DISPERSION (Función Hash)

Una función hash es un algoritmo matemático que nos da un resultado B al aplicarlo a un valor inicial A.

Es como cualquier función matemática, por ejemplo la función raíz cuadrada nos daría como resultado 2 si se la aplicamos al número 4.

Al igual que cualquier función matemática tiene que actuar de tal forma y tiene que cumplir con ciertos criterios. No nos puede devolver cualquier cosa, lo que nos devuelva requiere que tenga ciertas propiedades para que podamos usarlo.

Page 2: T A B L A  D E  D I S P E R S I O N (Hash Table)

Una función de Hash es una caja negra que tiene como entrada una llave y como salida una dirección h(K)=addressEjemplo: h(LOWELL)=4

Page 3: T A B L A  D E  D I S P E R S I O N (Hash Table)

El hashing es similar al indexamiento en el sentido de asociación entre llaves y direcciones relativas de registros

Pero difiere de los índices en 2 cosas:

1 La dirección generada por Hash suele ser aleatoria (random).

• No hay una relación aparente entre la llave y la localización del registro correspondiente

2 El Hash permite que 2 llaves puedan producir la misma salida --> direcciones iguales, a esto se le conoce como "colisión".

Page 4: T A B L A  D E  D I S P E R S I O N (Hash Table)

PROPIEDADES BASICAS PARA CUMPLIR POR LAS FUNCIONES HASH

1 Sea cual sea la longitud del texto base A, la longitud de su hash resultante B siempre va a ser la misma.

Si la longitud de la salida B esta defiinida en 128 bits, si aplicamos una función hash a un A de 5 bits nos dará un B de 128 bits, y si se la

aplicamos a un A de 380 millones de bits, nos dará un B de 128 bits igualmente.

2 Para cada entrada A, la función generará una salida B única. O lo que es lo mismo, es imposible que dos textos bases A y A' tengan un mismo hash B.

3 Dado un texto base, es fácil y rápido (para un ordenador) calcular su número resumen.

Page 5: T A B L A  D E  D I S P E R S I O N (Hash Table)

PROPIEDADES TIENEN QUE CUMPLIR LAS FUNCIONES HASH

4 Es imposible reconstruir el texto base a partir del número resumen.

5 No puede presentar Colisiones

PERO?

QUE SON COLISIONES?QUE SON COLISIONES?

Page 6: T A B L A  D E  D I S P E R S I O N (Hash Table)

COLISIONES

Page 7: T A B L A  D E  D I S P E R S I O N (Hash Table)

COLISIONES

Nuestra función de hash es pobre ya que fácilmente habrán llaves que generen la misma dirección ej.( OLIVIER), a éstas llaves que generan las mismas direcciones se les llama "sinónimas".

Idealmente lo que se buscaría es tener un "algoritmo de hash perfecto" en el cual no ocurran colisiones y siempre nos garantice direcciones diferentes. Pero desafortunadamente esto es casi imposible, se dice que 1 de 10^120000 algoritmos evitarían dichas colisiones, así que hay que acostumbrarse a la idea de trabajar y lidiar con COLISIONES.

Page 8: T A B L A  D E  D I S P E R S I O N (Hash Table)

TABLA DE DISPERSION (hash table)

Son estructuras de datos que asocien claves con valores.

Por ejemplo, se podría implementar una guía telefónica por guardar los números (los valores) bajo los nombres (las claves). La idea es reservar primero espacio en la memoria de la computadora y después alocarlo a la información insertada, de tal manera que siempre será rápido obtener la información que corresponde a una clave dada.

OPERACIONES: insertar buscar

eliminar

En promedio el tiempo de ejecución de estas operaciones es constante. Gracias a esto y a su simplicidad muchas veces se prefiere a los árboles binarios de búsqueda, requiere memoria extra.

Page 9: T A B L A  D E  D I S P E R S I O N (Hash Table)

Tablas de Dispersión Abierta

• Utilizan como estrategia de resolución del problema de las colisiones el permitir que varios elementos se encuentren almacenados en la misma posición de la tabla: es decir, el contenido de la tabla no son elementos, sino listas de elementos.

• Las listas suelen implementarse mediante representación enlazada, con enlaces simples y sin mantener un orden entre los elementos.

• Se define el factor de carga (L) de la tabla como el valor L = n/m, donde n es el número de elementos almacenados. Si la función de dispersión se comporta de manera uniforme para el conjunto de datos utilizado, entonces L representa el tamaño promedio de las listas.

Nota: La tabla se define como un vector de listas indexado de 0 a m-1.

Page 10: T A B L A  D E  D I S P E R S I O N (Hash Table)
Page 11: T A B L A  D E  D I S P E R S I O N (Hash Table)

Propiedades de la dispersión abierta

Nota: La tabla se define como un vector de listas indexado de 0 a m-1.

• El número de elementos almacenados puede ser mayor que el tamaño de la tabla. No es estrictamente necesario realizar operaciones de reestructuración (cambio de tamaño) de la tabla, salvo para garantizar que el coste de las operaciones de acceso y borrado (que es lineal con L) sea constante.

• Las operaciones de acceso y borrado se convierten en operaciones de búsqueda y borrado en listas: La eficiencia depende del tamaño de las listas, para que se considere que el tiempo es constante se debe cumplir

• El tamaño de las listas debe ser más o menos uniforme: Se debe cumplir que la función de dispersión sea uniforme para los conjuntos de datos que se van a utilizar.

• Si se cumple la condición anterior, el tamaño promedio de las listas será de L = n/m (factor de carga).

• No se debe permitir que L sea muy grande, por lo que el tamaño de la tabla debe ser del mismo orden que el máximo número de elementos que se van a almacenar.

Page 12: T A B L A  D E  D I S P E R S I O N (Hash Table)
Page 13: T A B L A  D E  D I S P E R S I O N (Hash Table)

Tablas de Dispersión Cerrada

• Las tablas de dispersión cerrada utilizan como estrategia de resolución del problema de colisiones el asignar otra posición en la tabla al elemento cuya posición está ocupada.

• Se define una función adicional, la función de exploración, que calcula una nueva posición para un elemento a partir de su posición inicial y del número de intentos de realojamientos (nº de colisiones sufridas) en el proceso de hallar una posición vacía.

• El contenido de las tablas de dispersión cerrada son referencias a elementos: A diferencia de la dispersión abierta, sólo se puede almacenar un elemento (o ninguno) en cada celda.

• Cuando se busca un elemento en la tabla se sigue el mismo camino de exploración que se ha seguido en la inserción. La aparición de una posición vacía indica que no existe el elemento en la tabla, ya que en caso contrario se hubiera insertado en esa posición.

• Además se plantea el problema de que borrar un elemento cambiando su posición en la tabla a vacía puede impedir el hallar otros elementos que sufrieron una colisión en esa posición, ya que aparece una posición vacía en su ruta de exploración.

• La solución más utilizada es la estrategia perezosa de borrado: Los elementos no se borran marcando su posición como vacía, sino que se marca es posición como borrada. Una casilla borrada se puede usar para insertar un elemento (al igual que una posición vacía), pero no indica el final de una exploración (a diferencia de una posición vacía).

Page 14: T A B L A  D E  D I S P E R S I O N (Hash Table)

Tablas de Dispersión dinámica

• El número de bloques del fichero no es fijo, sino que crece y disminuye conforme es necesario. El fichero puede empezar con un solo bloque y cuando éste se llena, se toma un nuevo bloque.

• Los registros se distribuyen entre los dos bloques teniendo en cuenta el primer bit de sus valores de dispersión. Los que tienen un 0 van a un bloque y los que tienen un 1 van al otro. Además, se va formando un directorio con estructura de árbol binario que tiene dos tipos de nodos:

• Nodos internos, que guían la búsqueda. Tienen un puntero izquierdo correspondiente al bit 0 y un puntero derecho correspondiente al bit 1.

• Nodos hoja, conteniendo el puntero al bloque de datos.

• Para hacer una búsqueda se puede almacenar el directorio en memoria, a menos que sea muy grande. Si no cabe en un bloque, habrá que distribuirlo en dos o más niveles. Cada nodo interno puede tener también un puntero al padre. Se pueden utilizar representaciones especiales de árboles binarios para reducir el espacio necesario para los tres punteros (izquierdo, derecho y padre). En general, un directorio de niveles puede necesitar hasta accesos a bloque para alcanzar un registro.

Page 15: T A B L A  D E  D I S P E R S I O N (Hash Table)

Eficiencia en las Tablas de Dispersión

La eficiencia dependerá de la longitud de las listas (dispersión abierta) o de la longitud del proceso de exploración (dispersión cerrada). Existen dos situaciones distintas:

• Explorar para encontrar un elemento o• Explorar para encontrar una posición vacía.

El análisis en el caso promedio da los resultados siguientes:

Page 16: T A B L A  D E  D I S P E R S I O N (Hash Table)

CONCLUSIONESCONCLUSIONES

• En la dispersión abierta la dependencia es lineal con el factor de carga.

• La dispersión cerrada, sin embargo, a medida que el factor de carga se

• Aproxima al valor límite 1 (tabla llena), el número de accesos crece demanera potencial. Por lo tanto, si se desea garantizar un orden constante en el caso promedio, se deben cumplir las siguientes condiciones:

– Diseñar la función de dispersión para que sea uniforme de acuerdo con las características de los datos que se van a utilizar.

– En tablas de dispersión cerrada, usar exploración con desplazamiento si puede darse el problema de agrupamiento. No permitir L > 0.8.

Page 17: T A B L A  D E  D I S P E R S I O N (Hash Table)

BIBLIOGRAFIA

• www.cs.buap.mx/~mmartin/introprog/ejercicios03-AED-prope-2007.pdf

• Arboles AVL – Rotaciones disponible http://www.infor.uva.es/~cvaca/asigs/transp0405b.pdf

• Dispersión dinámica http://www3.uji.es/~mmarques/f47/apun/node20.html

• Tablas de dispersión dinámicas http://it.ciidit.uanl.mx/~elisa/teaching/aa/pdf/clase1610.pdf