You are on page 1of 21

DISPERSIÓN

HASH
Tabla de dispersión

Son estructuras de datos que se usan para


manejar una secuencia de elementos, de
tal forma que cada elemento tiene un
valor clave que pertenece a un rango de
valores.
Definición de una tabla de dispersión

Tienen la finalidad de realizar una


búsqueda o eliminación de un registro con
una complejidad constante.
La organización ideal de una tabla es
aquella en la cual el campo llave de los
elementos corresponde directamente con
el índice de la tabla.
Operaciones de una tabla de dispersión

* Crear y dar de alta elementos

* Insertar elementos

* Eliminar elementos
Buscar (tabla T, clave x)
Revuelve el elemento de la tabla T[h(x)]
Insertar(tabla T, elemento k)
Añade el elemento k, T[h(clave(k))] k
Elimina(tabla T, clave x)
Retira de la tabla el elemento con clave x, T[h(x)] LIBRE
Funciones de dispersión
Una función se convierte en el dato del campo
clave, un entero o una cadena , en un valor
entero en el rango de definición del arreglo que
va a almacenar los elementos de tal forma que
sea adecuado para indexar el arreglo.

Se tiene que realizar una función hash para


realizar la transformación y determinar su
dirección del conjunto (k) de claves sobre el
conjunto (L) de memoria.
h(x) : K – L
Si x es una clave, h(x) se denomina
direccionamiento hash de la clave x.
Si la clave es una cadena de caracteres, se hace la
transformación previa a un valor entero.

Una colisión es cuando dos claves diferentes dan la


misma dirección.
A la hora de seleccionar una función hash se debe
tomar en cuenta que se pueda evaluar fácilmente,
y tratar de distribuir uniformemente las direcciones
sobre el conjunto “L” de forma que se minimice el
número de colisiones.

*La experiencia enseña que habrá que preparar


la resolución de colisiones para cuando se
produzca alguna.
ARITMETICA MODULAR
Una función de dispersión aritmética modular genera
valores dispersos calculando el resto de la división entre
la clave(x) y el tamaño de la tabla (m)

h(x) = x mod m

La operación “resto” siempre genera un número entero


entre 0 y -1. Por tanto, ésta función de dispersión
calcula Valores enteros de 0.. -1.

Las elecciones de tamaño de la tabla (m)


recomendadas, son números primos que estén cercanos
al número de elementos(n) que se tienen previstos que
almacene la tabla.
Ejemplo:
N=900 registros
245643 245981 257135

Una buena elección de m, en este


supuesto, es 997 al ser el número primo
más próximo y tiene como (n/m) = 0.8.

Aplicando la aritmética modular se tiene


h (245643) = 245643 mod 997 = 381
h (245981) = 245981 mod 997 = 719
h (257135) = 257135 mod 997 = 906.
PLEGAMIENTO
Esta técnica se utiliza cuando el valor entero
puede ser demasiado grande que no se
pueda almacenar en memoria y se hace una
división en partes iguales de x.

La función se define como h(x) X1 + X2, + …. +Xr

*se desprecian los dígitos más significativos


que se obtienen del acarreo.
Ejemplo:

245643 245981 257135 se dividen en dos


grupos de tres dígitos

h(245643) = 245 + 643 =888


h(245981) = 245 + 981=1266---266 (se ignora el
acarreo 1)
h(257135) = 257 + 135=392

Aveces se hace la inversa alas partes pares de x.


h(245643) =245 + 346 = 591
h(245981) = 245 +189 =434
h(257135) = 257 +531 =788
Mitad del Cuadrado
Es una técnica de obtener direcciones
dispersas.

Consiste en calcular el cuadrado de la clave


“x” y de esto extraer los dígitos que se
encuentran en ciertas posiciones.

Se extraen tres dígitos siempre, aquellos


que están en las mismas posiciones .
Ejemplo:

Para 245643, h(245643) = 483; vamos paso


a paso:

245643  2456432  60340483449 


(posiciones 4,5 y 6)
Método de la Multiplicación
Este método primero multiplica la clave “x”
por una constante real “r” (entre o y 1).

En segundo lugar, determina la parte decimal


“D” del numero obtenido de “rx”.

Por ultimo multiplica el tamaño de la tabla


“m” por “d” y al truncarse el resultado se
obtiene un numero entero en el rango 0.m-1.
Ejemplo:

1.- R * X
2.- D = R * X – parte entera (R * X)
3.-h(X) = parte entera (M * D)

1.-.6180334 * 245981  152024.4738


2.-D = 152024.4738 – parte entera (152024)  .4738.
3.-h(245981) = 1.000 * .4738  parte entera (473.8)  473.
Colisiones y Resolución de Colisiones

Cuando en la dirección de dos registros se


da el caso de que la posición sea igual a la
de la tabla, entonces se dice que hay una
colisión que hay que resolver.

Hay varias técnicas de resolución de


colisiones, pero las más populares
son encadenamiento y direccionamiento
abierto.
Por encadenamiento

En la técnica más simple de encadenamiento,


cada casilla en el arreglo referencial una lista de
los registros insertados que colisionan en la
misma casilla.

La inserción consiste en encontrar la casilla


correcta y agregar al final de la lista
correspondiente.

El borrado consiste en buscar y quitar de la lista.


Por direccionamiento abierto
Las tablas hash de direccionamiento abierto
pueden almacenar los registros directamente
en el arreglo.

Las colisiones se resuelven mediante


un sondeo del arreglo, en el que se buscan
diferentes localidades del arreglo (secuencia
de sondeo) hasta que el registro es
encontrado o se llega a una casilla vacía,
indicando que no existe esa llave en la tabla.
INTEGRANTES

Barajas de la Mora Jaime Agustín


Gutiérrez Orozco Leonardo Daniel
Gutiérrez Casillas Eduardo

GRACIAS POR SU ATENCION!

You might also like