Anda di halaman 1dari 9

Dispersion (Hashing) en C++

El trmino hash proviene, aparentemente, de la analoga con el significado estndar(en ingls)de dicha palabra en el mundo real: picar y mezclar. 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.

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.

La idea es seleccionar una funcin que permita obtener una distribucin con el mayor grado de uniformidad posible para evitar colisiones. El cdigo implementado consiste en crear un archivo llamado dispersion.txt donde

se guardan los respetivos registros en su posicion de acuerdo a la clave generada por la funcin hashing(); que manipula los caracteres de la clave mediante cdigo ASCII y devuelve un entero que sera el nmero de registro. Si al devolver la funcion hashing se repite(hay una colision) el numero de registro, este registro pasa a ser insertado en el archivo colisiones.txt Otro punto importante es que cada registro escrito en el archivo siempre tiene un puntero (llamado SR) que guarda el numero de registro del siguiente creando asi una lista. Alli en la imagen podemos apreciar la estructura de como se guarda los registros en el archivo.

Finalmente aclaro que para este programa considere como clave como el nombre de una persona y la data su apellido, ustedes pueden acomodarle de acuerdo a sus necesidades.

CODIGO FUENTE DISPERSIN

Anda mungkin juga menyukai