You are on page 1of 13

# Universidad de Oriente- Ncleo de Anzotegui POST GRADO INFORMTICA GERENCIAL CURSO : ORGANIZACIN DE ARCHIVOS Conceptos de Hashing

1. HASHING .............................................................................................................................. 2 2. CONCEPTOS DE HASHING ................................................................................................ 2 2.a Clave ................................................................................................................................ 2 2.b Funcin Hash.................................................................................................................... 2 2.c Ejemplos de Funcin Hash ............................................................................................... 3
2.c.1 Truncamiento ...........................................................................................................................3 2.c.2 Mdulo......................................................................................................................................3 2.c.3 Funcin Centro de Cuadrados .................................................................................................3 2.c.4 Plegamiento .............................................................................................................................4 2.c.5 Multiplicacin ............................................................................................................................4

2.d Colisin ............................................................................................................................. 4 2.e Zonas Primaria y Secundaria ........................................................................................... 5 2.f Factor de Carga ................................................................................................................. 5 2.g Capacidad de Registro Primario ....................................................................................... 5 2.h Tasa de Colisiones ........................................................................................................... 5 3. ADMINISTRACIN DE LAS COLISIONES .......................................................................... 6 3.a Organizacin de Archivo ................................................................................................... 6
3.a.1 Zona Primaria...........................................................................................................................6 3.a.2 Zona Secundaria o de Desbordamiento ..................................................................................6 3.a.3 Cubetas o "buckets" .................................................................................................................7 3.a.4 Zona de Desbordamiento con Cubetas ...................................................................................7 3.a.5 Otras Estructuras de Datos ......................................................................................................8

## 3.b Tcnicas de Manejo de Colisiones ................................................................................... 8

3.b.1 Bsqueda Lineal ......................................................................................................................9 3.b.2 Bsqueda Lineal Extendida .....................................................................................................9 3.b.3 Doble Hashing..........................................................................................................................9 3.b.4 Uso de Cubetas .....................................................................................................................10 3.b.5 Encadenamiento de Sinnimos .............................................................................................10

4. CONSIDERACIONES DE DISEO .................................................................................... 10 4.a Eficiencia ........................................................................................................................ 10 4.b Inicializacin ................................................................................................................... 11 4.c Mantenimiento ................................................................................................................ 11 4.d Criterios .......................................................................................................................... 11 5. APLICACIONES ................................................................................................................. 12 5.a Tendencias Tecnolgicas ............................................................................................... 12 5.b Ejemplos de Aplicaciones ............................................................................................... 12

## Profesor Dr. Ing. Roberto Saettone

2005

Pgina

Universidad de Oriente- Ncleo de Anzotegui POST GRADO INFORMTICA GERENCIAL CURSO : ORGANIZACIN DE ARCHIVOS Conceptos de Hashing

1. HASHING
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:

## Hashing o Transformacin de Clave

Datos Cristina Algoritmo de Hashing 3 1 Mariana 2. 3 Cristina 4. 5. 6 Mnica

Clave

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

2. Conceptos de Hashing
2.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

## 2.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 caracter y luego se aplican operaciones matemticas para obtener un nmero entero.

## Profesor Dr. Ing. Roberto Saettone

2005

Pgina

Universidad de Oriente- Ncleo de Anzotegui POST GRADO INFORMTICA GERENCIAL CURSO : ORGANIZACIN DE ARCHIVOS Conceptos de Hashing
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: 1. Sencilla, de manera que sea fcil de codificar y minimice el tiempo de clculo. 2. Distribucin Uniforme de las direcciones tratando que la generacin distribuya en forma aleatoria las claves y evite agrupamientos. 3. 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.

## 2.c Ejemplos de Funcin Hash

Se presentan a continuacin algunas funciones Hash y ejemplos.
2.c.1 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: 6 2 5 3 8 1 9 4 Posicin resultante: 394*0.8= 315
2.c.2 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.

Consiste en elevar al cuadrado la clave y tomar los dgitos centrales como direccin. El numero 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
Profesor Dr. Ing. Roberto Saettone 2005

Pgina

Universidad de Oriente- Ncleo de Anzotegui POST GRADO INFORMTICA GERENCIAL CURSO : ORGANIZACIN DE ARCHIVOS Conceptos de Hashing
2.c.4 Plegamiento

Consiste en dividir la clave en partes de igual numero de dgitos (la ultima 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 110 Alternativa B y luego 38194 80 526 497 80794 477 Esta tcnica realiza una mejor dispersin que el truncamiento.
2.c.5 Multiplicacin

Hash (k) = int (M * fracc (k*Phi)) donde: 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 => numero de oro Phi = [(5) 1] / 2 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

2.d 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 sinnimos. 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.
Profesor Dr. Ing. Roberto Saettone 2005

Pgina

Universidad de Oriente- Ncleo de Anzotegui POST GRADO INFORMTICA GERENCIAL CURSO : ORGANIZACIN DE ARCHIVOS Conceptos de Hashing 2.e 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

## 2.f 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.

## 2.g 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.

## 2.h 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.

## Profesor Dr. Ing. Roberto Saettone

2005

Pgina

Universidad de Oriente- Ncleo de Anzotegui POST GRADO INFORMTICA GERENCIAL CURSO : ORGANIZACIN DE ARCHIVOS Conceptos de Hashing

## 3. 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 almacenar 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.

## 3.a Organizacin de Archivo

Desde punto de vista de la Organizacin de Archivo, existen varias soluciones para almacenar las colisiones:
3.a.1 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 Primaria

## 3.a.2 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. Cuando se produce una colisin en la zona primaria, se utiliza la siguiente posicin disponible en la zona secundaria.

Zona Primaria

Zona Desbordamiento

## Profesor Dr. Ing. Roberto Saettone

2005

Pgina

Universidad de Oriente- Ncleo de Anzotegui POST GRADO INFORMTICA GERENCIAL CURSO : ORGANIZACIN DE ARCHIVOS Conceptos de Hashing
3.a.3 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. Varios Registros Lgicos Registro Fsico

## 3.a.4 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. Varios Registros Lgicos Registro Fsico

Zona Desbordamiento

## Profesor Dr. Ing. Roberto Saettone

2005

Pgina

Universidad de Oriente- Ncleo de Anzotegui POST GRADO INFORMTICA GERENCIAL CURSO : ORGANIZACIN DE ARCHIVOS Conceptos de Hashing
3.a.5 Otras Estructuras de Datos

Existe una infinidad de soluciones mucho ms complejas que no trataremos aqu pues escapan al objetivo de este curso. 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.

## 3.b 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.

## Profesor Dr. Ing. Roberto Saettone

2005

Pgina

Universidad de Oriente- Ncleo de Anzotegui POST GRADO INFORMTICA GERENCIAL CURSO : ORGANIZACIN DE ARCHIVOS Conceptos de Hashing
3.b.1 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: dir = Hash(x) Repetir hasta que dir = "libre" dir = dir + 1 Si dir > finarchivo dir = 1 Finsi Finhasta 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 primario. A causa de este efecto, cualquier clave que se disperse en un agrupamiento realizar varios intentos para resolver la colisin, y agrandar el agrupamiento.
3.b.2 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.
3.b.3 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: a) multiplicacin por un nmero entero b) Suma de nmero primo i=0 i=0 dir = Hash(x) dir = Hash(x) Repetir hasta que dir = "libre" Repetir hasta que dir = "libre" i=i+1 dir = i * primo + Hash2(x) dir = i * Hash2(x) i=i+1 Finhasta Finhasta
Profesor Dr. Ing. Roberto Saettone 2005

Pgina

Universidad de Oriente- Ncleo de Anzotegui POST GRADO INFORMTICA GERENCIAL CURSO : ORGANIZACIN DE ARCHIVOS Conceptos de Hashing
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.
3.b.4 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: DP = K / (C * N) 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.

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.

4. Consideraciones de Diseo
4.a 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?
Profesor Dr. Ing. Roberto Saettone 2005

Pgina 10

Universidad de Oriente- Ncleo de Anzotegui POST GRADO INFORMTICA GERENCIAL CURSO : ORGANIZACIN DE ARCHIVOS Conceptos de Hashing
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.

4.b 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.

4.c 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.

4.d Criterios
Los siguientes factores pueden ser tomados en cuenta para decidir si es conveniente el use de direccionamiento por hashing en una aplicacin:
Profesor Dr. Ing. Roberto Saettone 2005

Pgina 11

Universidad de Oriente- Ncleo de Anzotegui POST GRADO INFORMTICA GERENCIAL CURSO : ORGANIZACIN DE ARCHIVOS Conceptos de Hashing

5. Aplicaciones
5.a 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 requieren menor tiempo de respuesta a una solicitud.

## 5.b 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
2005

## Profesor Dr. Ing. Roberto Saettone

Pgina 12

Universidad de Oriente- Ncleo de Anzotegui POST GRADO INFORMTICA GERENCIAL CURSO : ORGANIZACIN DE ARCHIVOS Conceptos de Hashing
Pginas en Cache de Proxy Server Validacin de tarjetas de crdito

2005

Pgina 13