You are on page 1of 16

Universidad Nacional de Trujillo

Facultad de Ciencias Fsicas y Matemticas

Escuela de Ingeniera Informtica


METODO DE DISPERSION
AUTORES: Castillo Gallardo, Pedro Flores Aguilar, Diego Bermudes Jara, Guillermo ASESOR: Jorge Gutierres Gutierres

Trujillo, Per 2011

CONTENIDO
1. 2. 3. Introduccin: ................................................................................................................................................................ 3 Objetivos: ..................................................................................................................................................................... 3 Desarrollo del tema: ..................................................................................................................................................... 3 3.1. Orgenes del trmino hash: .................................................................................................................................. 3

3.2. Definicin: ................................................................................................................................................................ 3 3.3. Conceptos de hashing: ............................................................................................................................................ 4 4. Administracin de las Colisiones ..................................................................................................................................... 8 4.1. Organizacin de Archivo ........................................................................................................................................... 8 4.2. Tcnicas de Manejo de Colisiones .......................................................................................................................... 10 5. Consideraciones de Diseo del mtodo Hashing: ......................................................................................................... 14 5.1. Eficiencia ................................................................................................................................................................. 14 5.2 Inicializacin ............................................................................................................................................................. 14 5.3 Mantenimiento......................................................................................................................................................... 15 5.4 Criterios .................................................................................................................................................................... 15 6. Aplicaciones: ................................................................................................................................................................. 15 6.1 Tendencias Tecnolgicas .......................................................................................................................................... 15 6.2 Ejemplos de Aplicaciones ......................................................................................................................................... 16

METODO DE DISPERSION (HASHING)


1. Introduccin: En esta documentacin lo que se busca es dar a conocer a los estudiantes de informtica, y a los que les guste la programacin, Como es que funciona y en que consiste el mtodo hashing en la organizacin de archivos, en esta documentacin se les mostraran ejemplos y documentacin detallada sobre hashing. 2. Objetivos: - Se busca dar a conocer la informacin necesaria sobre el mtodo hashing (estructura y funcionamiento), a los alumnos de informtica. - Plantear este mtodo como un mtodo viable para la organizacin de archivos 3. Desarrollo del tema:
3.1. Orgenes del trmino hash:
El trmino hash proviene, aparentemente, de la analoga con el significado estndar (en ingls) de dicha palabra en el mundo real: picar y mezclar. Donald Knuth cree que H. P. Luhn, empleado de IBM, fue el primero en utilizar el concepto en un memorndum fechado en enero de 1953. Su utilizacin masiva no fue hasta despus de 10 aos. En el algoritmo SHA-1, por ejemplo, el conjunto de partida de la funcin es dividido en palabras que son mezcladas entre s utilizando funciones matemticas seleccionadas especialmente. Se hace que el rango de valores que puede devolver la funcin sea de longitud fija: 160 bits utilizando la adicin modular

3.2. Definicin:
Es un mtodo que permite encontrar, con el mnimo esfuerzo, una clave dada dentro de un conjunto de elementos. Tambin se denomina mtodo de "transformacin de claves", "direccionamiento calculado", "direccionamiento asociativo" o de "dispersin". En la tcnica de hashing se aplican clculos o transformaciones aritmticas sobre la

clave para producir directamente una direccin en una tabla o archivo de acceso directo. Por ejemplo:

El mtodo de direccionamiento por hashing tiene las siguientes caractersticas generales: Buena velocidad de bsqueda sin necesidad de tener los datos ordenados El tiempo de bsqueda es prcticamente independiente de la cantidad de datos Dentro del espacio de direccionamiento, hay posiciones vacas

3.3. Conceptos de hashing: a) Clave


La clave contiene el valor que permite ubicar, mediante la funcin Hash, la posicin o registro que contiene el resto de informacin asociada. Normalmente la clave es el campo que identifica en forma nica la informacin. Por ejemplo: Cdula de Identidad Registro de Informacin Fiscal Placa o Matrcula de Vehculo

b) Funcin Hash Es un algoritmo o transformacin que, aplicado a la clave, devuelve la posicin del destino en donde podemos ubicar o recuperar el elemento que contiene dicha clave. Normalmente consta de tres partes: 1. Transformacin: Si la clave no es numrica se convierte en un nmero. Con frecuencia se utiliza el valor ASCII de cada carcter y luego se aplican operaciones matemticas para obtener un nmero entero.

2. Generacin: El nmero generado se procesa con un algoritmo que trata de uniformizar la distribucin de las claves en el rango de direcciones. 3. Compresin: Se comprime el nmero obtenido multiplicndolo por un factor para adecuarlo a la capacidad de almacenamiento disponible. La funcin Hash debe definirse al momento de disear el sistema y su seleccin tiene gran incidencia en rendimiento del sistema. Una buena funcin Hash debe tener las siguientes caractersticas: Sencilla, de manera que sea fcil de codificar y minimice el tiempo de clculo. Distribucin Uniforme de las direcciones tratando que la generacin distribuya en forma aleatoria las claves y evite agrupamientos. Dispersin, dadas las claves X, Y, Z tal que X < Y < Z, no necesariamente Hash(X) < Hash (Y) < Hash (Z). Para elegir una funcin de hashing, entonces, hay que tomar en cuenta: Rango o espacio de direcciones Tipo de clave (alfanumrica o numrica) Semntica de la clave (cmo se presente la clave, simple o compuesta y variabilidad de sus valores) La idea es seleccionar una funcin que permita obtener una distribucin con el mayor grado de uniformidad posible para evitar colisiones.

a. Ejemplos de Funcin Hash


Se presentan a continuacin algunas funciones Hash y ejemplos.
a. Truncamiento:

Se ignora una parte de la clave y se usa la parte restante directamente como el ndice. El truncamiento es un mtodo veloz, pero con frecuencia no logra distribuir las claves uniformemente. Por ejemplo: Si se tienen 800 posiciones y la clave es numrica de 8 dgitos, se toman en cuenta solo 3 dgitos y se aplica un factor de compresin de 0.8: Posicin resultante: 394*0.8=315

b. Mdulo:

Consiste en tomar el residuo de la divisin de la clave entre el nmero de componentes del arreglo. La funcin Hash queda definida por la siguiente frmula: Hash (K) = (K mod N) + 1 Se recomienda que N sea el nmero primo inmediato inferior al nmero total de elementos.

c.

Funcin Centro de Cuadrados:

Consiste en elevar al cuadrado la clave y tomar los dgitos centrales como direccin. El nmero de dgitos a tomar queda determinado por el rango del ndice. La funcin Hash que definida por la siguiente frmula: Hash (K) = digitos_centrales (K) + 1
d. Plegamiento:

Consiste en dividir la clave en partes de igual nmero de dgitos (la ltima puede tener menos dgitos) y operar con ellas, tomando como direccin los dgitos menos significativos. La operacin entre las partes puede hacerse por medio de sumas o multiplicaciones. Por ejemplo: Un entero de 8 dgitos puede dividirse en grupos de 3, 3 y 2 dgitos, se suman los grupos y se trunca si es necesario: Alternativa A 62538194 = 625 + 381 + 94 = 1100 Alternativa B Y luego 38194 526 80794 80 497 4 110

Esta tcnica realiza una mejor dispersin que el truncamiento


e. Multiplicacin:

Hash (k) = int (M * fracc (k*Phi)) Dnde: M es el nmero primo inmediatamente menor que el tamao de la zona primaria. int (x) es el mayor entero que es menor o igual a x fracc (x) = x int (x) Phi = 0.618034 Ejemplo para M = 593 Hash (5) = int (593 * fracc (5 * 0.618034)) Hash (2) = int (593 * fracc (2 * 0.618034)) = int (593 * (3.090670 3)) = int (593 * (1.236068)) = int (593 * 0.90670) = int (593 * 0.236068) = 537 = 139 Hash (15) = 160, Hash (20) = 213, Hash (25) = 267, Hash (30) = 320 => nmero de oro Phi = [(5) 1] / 2

b. colisin
Es posible que al aplicar el algoritmo de hashing o de transformacin a dos valores diferentes, d como resultado el mismo nmero de posicin, resultando en una colisin. Se dice que las claves que generan la misma posicin son sinnimas. Los algoritmos para manejar las operaciones de Agregar, Buscar, Eliminar y Modificar deben prever el caso de una colisin: Al AGREGAR, se debe verificar que la posicin resultante del algoritmo de hashing, no est ocupada por otra clave. Al BUSCAR, se debe verificar que la posicin resultante del algoritmo de hashing contiene el valor buscado. Al MODIFICAR la CLAVE, cambia la posicin, entonces se debe Eliminar el valor anterior y Agregar el nuevo valor.

c. Zonas Primaria y Secundaria


Para manejar las colisiones, se deben prever donde se van a guardar las claves que produjeron colisiones. Generalmente se consideran dos zonas: ZONA PRIMARIA ZONA SECUNDARIA

d. Factor de Carga
El Factor de Carga o Densidad Primaria, es la proporcin entre la cantidad de registros de la zona primaria que estn ocupados dividida por el nmero total de registros en la zona primaria. Al disear el tamao de la zona primaria en funcin del nmero mximo de registros que se esperan registrar, el Factor de Carga estimado debe estar entre 0,5 y 0,8. A mayor tamao de la zona primaria, disminuye el Factor de Carga pero se desperdicia espacio. Un menor tamao de la zona primaria aumenta el Factor de Carga pero se aumenta la probabilidad de que ocurran colisiones.

e. Capacidad de Registro Primario


Es el nmero de registros lgicos que hay en un registro fsico. Al aumentar la capacidad de los registros fsicos, disminuye la tasa de colisiones.

f. Tasa de Colisiones
Es la probabilidad de que al agregar un nuevo registro, se encuentre la direccin en la zona primaria ocupada y haya que registrarlo en la zona de desbordamiento. Al aumentar la tasa de colisiones, disminuye la eficiencia del sistema. El analista de sistemas selecciona el mejor compromiso entre la densidad primaria y la capacidad de registro primario para obtener la tasa de colisiones deseada.

4. Administracin de las Colisiones


Dos claves K1 y K2 son sinnimas si la direccin calculada por la funcin Hash es la misma para ambas. Si K1 es almacenada primero en el archivo y su direccin es Hash (K1), entonces se dice que K1 esta almacenada en su direccin de origen. Si luego se va a almacenara K2 , se encuentra que la direccin de origen est ocupada, ocurriendo una colisin. La administracin de las colisiones representa el mayor inconveniente del direccionamiento por hashing. A la hora de disear el sistema, se deben definir dos aspectos para manejar las colisiones: La organizacin de archivo y su estructura de datos El mtodo o estrategia para tratar las colisiones Ambos aspectos estn interrelacionados.

4.1. Organizacin de Archivo


Desde punto de vista de la Organizacin de Archivo, existen varias soluciones para almacenar las colisiones:

Zona Primaria
La solucin ms sencilla es almacenar las colisiones en la misma zona de direccionamiento utilizada para almacenar todos los datos. Esta zona se denomina Zona Primaria o Principal.

Zona Secundaria o de Desbordamiento


Se define una zona al final de la tabla para almacenar las claves que produjeron colisin. Esta zona se denomina zona de desbordamiento ("overflow") o zona secundaria. Cuan- do se produce una colisin en la zona primaria, se utiliza la siguiente posicin disponible en la zona secundaria.

Cubetas o "buckets"
Esta solucin para almacenar las colisiones consiste en colocar ms de un registro en una direccin. A diferencia de los casos anteriores donde cada direccin almacena nicamente un registro, en este caso, cada registro fsico almacena varios registros "lgicos". Este concepto se basa en "buckets" o cubetas de datos en cada direccin.

Zona de Desbordamiento con Cubetas


Esta solucin para almacenar las colisiones combina las dos organizaciones anteriores, previendo varios registros lgicos por cada registro fsico y una zona de desbordamiento que se utiliza cuando todos los registros lgicos estn ocupados y ocurre una nueva colisin.

Otras Estructuras de Datos


Existe una infinidad de soluciones mucho ms complejas. En general estas soluciones utilizan estructuras de datos que manejan:

Apuntadores Listas Enlazadas o Encadenadas para relacionar la clave en su direccin de origen con las colisiones en otras direcciones ubicadas en la misma zona primaria o en la zona de desbordamiento.

4.2. Tcnicas de Manejo de Colisiones


Las tcnicas para el manejo de colisiones estn relacionadas con la organizacin de archivo o estructura de datos seleccionada. De acuerdo a la ubicacin donde se almacenan las colisiones, se clasifican en: 1. Tcnicas de Direccionamiento Abierto en la Zona Primaria Los sinnimos se ubican en la misma zona de direccionamiento utilizada para almacenar todos los datos. Esta zona se denomina Zona Primaria o Principal. Se solucionan las colisiones buscando celdas alternativas hasta encontrar una vaca dentro de la misma tabla. 2. Uso de rea Separada de Desbordamiento (Overflow) Los sinnimos se ubican fuera del rea principal del archivo, en un rea especial de desbordamiento (Zona Secundaria). 3. Tcnicas de Direccionamiento Cerrado Los sinnimos se relacionan mediante una lista que los encadena mediante apuntadores. La ubicacin de los sinnimos puede ser en la Zona Primaria o en la Zona Secundaria.

a) Crear un archivo para guardar las colisiones: Este mtodo consiste en crear otro archivo (con la extensin que deseemos, ejm: archivo. Col) Para poder almacenar en el todas las colisiones que sucedan, esta tcnica lo que hace es mantener el archivo original intacto, y todas las colisiones que surjan las guarda en el archivo de colisiones, para ello en el archivo original se le adiciona en su estructura un puntero que apunte hacia la posicin donde se guard la colisin, y esta a su vez tiene otro puntero que enlaza a las posteriores colisiones. De esta manera cuando se desee buscara un dato bastara con buscarlo en el archivo original y si este tuviera colisiones sera fcil de encontrar y en poco tiempo. b) Bsqueda Lineal
Esta es una tcnica de direccionamiento abierto en la Zona Primaria. Cuando la direccin original est ocupada (colisin) se busca una direccin alternativa vaca. Esta tcnica es tambin conocida como mtodo de desbordamiento consecutivo. La bsqueda de un lugar vaco se realiza en forma secuencial comenzando en la direccin siguiente a la original. El espacio de direcciones se hace circular. Si en el proceso de bsqueda se llega al final del archivo, se contina en la primera posicin. Por ejemplo:

Para la bsqueda de un registro por hashing con sondeo lineal, los valores de clave de los registros encontrados en la direccin de origen, y en las direcciones alcanzadas con el sondeo lineal, deber compararse con el valor de la clave buscada, para determinar si el registro objetivo ha sido localizado o no. El sondeo lineal, aunque es muy sencillo, no es muy eficiente si la tasa de colisiones es alta. Las desventajas que tiene este mtodo son: el tiempo que se tarda en encontrar una celda vaca y la formacin de bloques de celdas ocupadas, llamada efecto agrupamiento prima- rio. A causa de este efecto, cualquier clave que se disperse en un agrupamiento realizar

varios intentos para resolver la colisin, y agrandar el agrupamiento. c) Bsqueda Lineal Extendida Esta tcnica es similar a la anterior pero utiliza la Zona Secundaria. Cuando la direccin original est ocupada (colisin) se busca una direccin vaca en la zona secundaria o de desbordamiento ("overflow"). De esta manera se evita el efecto de agrupamiento primario. Cuando se realiza una bsqueda para recuperar la informacin, se debe realizar una bsqueda secuencial en la zona secundaria cuando la clave en la zona primaria no concuerda con la que estamos buscando. d) Doble Hashing En esta tcnica, cuando se encuentra una colisin al aplicar la funcin Hash a la clave, se aplica una segunda funcin Hash para combinar la clave original con el resultado de la primera funcin Hash y se aplica luego una operacin matemtica. Por ejemplo:

Aplicando esta tcnica se consiguen buenos resultados, aunque es ms compleja y, por lo tanto, ms lenta que otras soluciones. Se recomienda que el tamao de la Zona Primaria sea un nmero primo. e) Uso de Cubetas Con el uso de cubetas o "buckets", definiendo varios registros lgicos por cada registro fsico, el concepto de colisin sigue siendo el mismo, solo que no es problema mientras haya registros disponibles en la cubeta. Cuando la cubeta se llena vuelve a aparecer el problema de colisin (desbordamiento) y podemos utilizar cualquiera de las tcnicas mencionadas anteriormente. En todo caso, el problema de desbordamiento que obliga a buscar espacio en otro registro se da con menor frecuencia al usar una cubeta con tamao mayor que 1 (uno). El tiempo de

bsqueda aumenta en la cubeta pero disminuye el tiempo en comparacin con el de acceso a disco. Si llamamos K al nmero de registros en el archivo, C a la capacidad de cada cubeta y N la cantidad de datos que se quieren almacenar, se puede calcular la densidad primaria o factor de carga (DP) como:

Si la densidad de empaquetamiento supera el 70% las colisiones son demasiado frecuentes. Para calcular el nmero de registros de desbordamiento esperados se puede utilizar la funcin de Poisson. N! 1 1 Prob(x) = --------------------- (----) (1 - -----)n-x X! (N-x)! M M Se observa a travs de ella que el uso de cubetas disminuye notablemente el porcentaje de desbordamiento mejorando el rendimiento. f)

Encadenamiento de Sinnimos
Una buena manera de mejorar la eficiencia de un archivo que utiliza hashing, es el encadenamiento de sinnimos. Mantener una lista enlazada de registros, con la misma direccin de origen, no reduce el nmero de colisiones, pero reduce los tiempos de acceso para recuperar los registros que no se encuentran en su localidad de origen. El encadenamiento de sinnimos puede emplearse con cualquier tcnica de solucin de colisiones. Cuando un registro debe ser recuperado del archivo, solo los sinnimos de la clave objetivo son accesados. Una posibilidad adicional es mantener una lista encadenada de los registros vacos, que se utiliza cuando se busca una direccin libre para almacenar un sinnimo, en vez de utilizar una bsqueda lineal.

5. Consideraciones de Diseo del mtodo Hashing:


5.1. Eficiencia
Los principales factores que afectan la eficiencia y que deben ser tomados en cuenta por el analista de sistemas son: El tamao de la cubeta. Cuantos registros lgicos? El factor de carga o densidad de la zona primaria (entre 50% y 80%). El algoritmo utilizado por la funcin Hash. El mtodo utilizado para manejar las colisiones. El siguiente grfico puede ser utilizado para predecir la cantidad de colisiones en funcin de la capacidad de la cubeta (bucket) y la densidad primaria.

5.2 Inicializacin
La rutina de inicializacin del archivo debe realizar las siguientes funciones: Inicializar cada registro fsico y lgico, marcndolos como vaco o libre. Inicializar el apuntador que indica donde empieza la zona secundaria, si existe. Inicializar a cero el contador de registros en la zona secundaria.

5.3 Mantenimiento
Luego de muchas inserciones y eliminaciones (altas y bajas) es lgico esperar cierto deterioro en la performance. Aumentan los registros 'antes usados' los registros sinnimos quedan innecesariamente alejados de su direccin de origen. Una opcin posible es realizar una reorganizacin local (en el bucket o la lista en cuestin) cada vez que se da una baja, para determinar si es posible acortar las bsquedas. Tambin es posible reorganizar el archivo en su totalidad cuando se llega a una longitud de bsqueda inaceptable o cambiar el mtodo de manejo de colisiones.

5.4 Criterios
Los siguientes factores pueden ser tomados en cuenta para decidir si es conveniente el use de direccionamiento por hashing en una aplicacin: Necesidad de ahorrar espacio de almacenamiento Frecuencia de uso Frecuencia de Actualizacin Tiempo de respuesta requerido Volatilidad de la Informacin (Vida til) Crecimiento o capacidad de expansin Vulnerabilidad, Integridad, Recuperacin de Fallas Grado de Simplicidad o Complejidad Transportabilidad, Independencia Hardware - Software Requiere reportes con datos ordenados?

6. Aplicaciones:

6.1 Tendencias Tecnolgicas


La capacidad de los dispositivos de almacenamiento en lnea, tales como unidades de disco duro, aumenta continuamente. Actualmente es posible adquirir en el mercado unidades de varios centenares de Gigabytes. El costo de almacenamiento de la informacin disminuye regularmente, debido a la disminucin de costos de las unidades de almacenamiento debido a la masificacin y al aumento en la capacidad de cada una.

Los requerimientos de almacenamiento de las aplicaciones tiende a aumentar pues manejan informaciones ms amplias, debido en parte a la globalizacin de la informacin. Es normal que una aplicacin que maneja informacin internacional requiera varios Terabytes de almacenamiento en lnea. El incremento en el uso de las telecomunicaciones y las aplicaciones teleinformticas re- quieren menor tiempo de respuesta a una solicitud.

6.2 Ejemplos de Aplicaciones


En la actualidad, la tcnica de direccionamiento aplicando hashing es muy utilizada, especialmente para localizar rpidamente una informacin cuando la cantidad de datos es muy grande o el tiempo de respuesta requerido es muy corto. Podemos mencionar algunas de las aplicaciones conocidas en que se aplica de direccionamiento por hashing: Genoma Humano Direcciones IP en Internet Directorio de Informacin en CD o DVD Base de Datos de Huellas Digitalizadas Verificacin de Firmas Digitales SQL Server Pginas en Cache de Proxy Server Validacin de tarjetas de crdito

You might also like