Professional Documents
Culture Documents
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
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
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.
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.
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
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.
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.
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.
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.
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.
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.
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.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:
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.