Sunteți pe pagina 1din 17

A los profesores de la Universidad Nacional de

Trujillo que nos han inculcado conocimiento


para ser buenos profesionales.

AGRADECIMIENTOS

A Dios primeramente por darnos la vida, la oportunidad de


estudiar y superarnos cada da ms, y a las personas que nos
apoyaron con este trabajo.
Al docente Lourdes Daz Amaya por contribuir con valiosas
sugerencias, correcciones y crticas constructivas.

RESUMEN

En este Informe se dar uno de los accesos ms directos o rpidos en


ficheros es decir estamos hablando de FICHEROS DISPERSOS O
TAMBIEN LLAMADO HASHING.

El tema se encuentra dentro del rea conocida como METODOS DE


ACCESO A FICHEROS, un subcampo del
ORGANIZACIN DE
ARCHIVOS.

Para implementar la aplicacin se utilizar el entorno de


programacin DEV C++, tambin se usarn funciones del propio IDE
y algunas creadas por nosotros mismos para la Interseccin de
palabras y cuando se compile nos vaya dando imgenes formadas

ABSTRACT

This report will be one of the most direct and rapid access to files is
talking about hash files or also called hashing.

The issue is within the area known as methods of file access, a


subfield of file organization.

To deploy the application will use the programming environment DEV


C + +, also used the IDE itself functions and some created by
ourselves for the intersection of words and when we go giving
compile images formed

INTRODUCCION

Una tcnica de bsqueda completamente diferente de las basadas en


estructuras de arboles de comparacin es de la DISPERSION un
mtodo que permite hacer directamente referencia a los registros de
una tabla por medio de transformaciones aritmticas sobre las claves
para obtener direcciones de la tabla. Si se sabe que las claves son
enteros distintos entre 1 y N, entonces se puede almacenar un
registro con clave i en la posicin i de la tabla preparado para que se
acceda a el de forma inmediata con el valor de la clave. La
DISPERSION es una generalizacin de este mtodo trivial en
aplicaciones de bsqueda tpicas donde no se tienen ningn
conocimiento concreto sobre los valores de las claves.

En primer paso en una bsqueda por dispersin consiste en evaluar


una FUNCION DE DISPERSION que transforma la clave de bsqueda
en direcciones de la tabla. Idealmente, diferentes claves deben dar
diferentes direcciones , pero ninguna funcin de dispersin es
perfecta y dos o ms claves diferentes a pueden dar la misma
direccin de la tabla. La segunda parte de una bsqueda por
dispersin es pues un proceso de RESOLUCION DE COLISIONES que
permite tratar este tipo de claves.

La Dispersin es un buen ejemplo del compromiso ESPACIO-TIEMPO, si


no hubiera limitacin de memoria, se podr hacer cualquier bsqueda
con un solo acceso a la memoria, utilizando simplemente la clave de
cmo una direccin de memoria. Si no hubiera limitaciones de tiempo
se podra hacer con un mnimo de memoria utilizando un mtodo
secuencial de bsqueda. La dispersin proporciona una forma de
utilizar razonablemente la memoria y el tiempo para obtener un
equilibrio entre estos dos extremos. El empleo eficaz de la memoria
disponible y un rpido acceso a la memoria son los objetivos bsicos
de cualquier mtodo de dispersin.

FICHEROS DISPERSOS
DEFINCION:
Los archivos directos explotan la capacidad de los discos para acceder
directamente a cualquier bloque de direccin conocida. Como en los
archivos secuenciales y secuenciales indexados, se requiere un
campo clave en cada registro. Sin embargo, aqu no hay concepto de
ordenamiento secuencial.
Direccin de cada registro: se calcula aplicando cierta funcin sobre
uno de sus campos, el campo de dispersin.
Acceso a los datos: muy rpido slo si se busca con la condicin de
igualdad sobre el Campo de dispersin.
La dispersin se puede utilizar a nivel interno (RAM), como una
estructura de datos de un programa, o bien a nivel externo para
ficheros en disco.

Dispersin Interna
Funciones ms comunes:
h(K) = K mod M ---
Partir el campo en trozos y
sumarlos o aplicar funcin lgica.
Extraer ciertos dgitos del campo.

Resolucin de colisiones:

Direccionamiento abierto.
Encadenamiento. ---

Dispersin mltiple.

DISPERSION ESTATICA
La funcin de dispersin produce un nmero de bloque relativo.
En una tabla que se guarda en la cabecera del fichero se convierte
ese nmero relativo en una direccin efectiva del disco (bloque o
cluster).

Manejo de colisiones mediante encadenamiento: cada bloque con


colisiones tiene un puntero a una lista de registros de desbordamiento
(overflow).
Los registros de esta lista estn encadenados (enlazados por
punteros).

Buscar:

Por el campo de dispersin: muy eficiente.


Por otro campo: bsqueda lineal.

Leer ordenadamente:
Caro (las funciones de dispersin no
suelen mantener los registros en un orden).
Insertar:

Aplicar la funcin de dispersin y si hay


colisin aplicar el algoritmo correspondiente.

Eliminar:

Encontrar registro y borrarlo. Si hay lista de


desbordamiento, mover un registro de la
lista al bloque.
Encontrar y modificar.
Si se modifica el campo de dispersin:
cambiar el registro de lugar (borrar e
insertar).

Modificar:

Gran inconveniente de la dispersin esttica: el espacio de


almacenamiento es fijo.
Si hay menos de registros de los que caben: hay espacio
no utilizado.

Si hay ms de registros de los que caben: habr largas


listas de desbordamiento
--> acceso muy lento.

Tcnicas que permiten la expansin dinmica del


fichero

Resultado de la funcin de dispersin -> nmero entero no negativo


-> se puede representaren binario.
Los registros se distribuyen teniendo en cuenta los primeros bits de
este nmero, al que se Denomina valor de dispersin.

DISPERSION EXTENSIBLE

Ejemplo

TABLA DE HASH
"Hashing" es una tcnica que busca realizar las operaciones
de insercin, eliminacin y bsqueda en tiempo constante.
Esa caracterstica es muy importante cuando se traba con
almacenamiento secundario en disco, donde el acceso a una
determinada direccin es bastante lenta. Algunas
aplicaciones que son beneficiadas por el uso de tablas hash
son diccionarios y tablas de palabras reservadas de un
compilador.
En vez de organizar la tabla segn el valor relativo de cada
llave en relacin a las dems, la tabla hash toma encuentra
solamente su valor absoluto, interpretado como un valor
numrico.

Si consiguisemos asociar a cada elemento a ser almacenado


un nmero como en el ejemplo anterior, podremos realizar las

operaciones de insercin, eliminacin y bsqueda en tiempo


constante.
La funcin que asocia a cada elemento de un conjunto U un
nmero que sirva de ndice en una tabla (array) es llamada de
funcin hash.
Una funcin hash debe satisfacer las siguientes condiciones:
1. Ser simple de calcular
2. Asegurar que elementos distintos posean ndices
distintos.
3. Generar una distribucin equilibrada para los elementos
dentro del array.

Funciones Hash
Crear una funcin hash satisfaciendo las condiciones
anteriores no siempre es una tarea fcil. Existen mucho
modelos de creacin para funciones hash. A continuacin se
presentan apenas dos formas de creacin de funciones hash.
en "Cormen,T.H. Leiserson C.E., Rivest R.L. Introduction to
Algorithms" pueden ser encontraod varios ejemplos afines
hash.
Una buena funcin hash es aquella en que toda entrada (slot)
del array posee la misma probabilida de ser alcanzado por la
funcin.

Mtodo da Divisin
El mtodo de la divisin consiste en los siguiente: suponga
que los elementos x que deben ser almacenados sean
nmeros enteros, una funcin hash que puede ser utilizada
para distribuir tales nmeros en un array (tabla hash) es:
h(x)=x% (tamao de la tabla)

Implementacin

La siguiente funcin describe la implementacin de la funcin


hash descrita anteriormente para el caso de strings.
int Hash(char *a, int stringsize)
{
int hashval, j;
hashval = (int) a[0];
for (j = 1; j < stringsize; j++)
hashval += (int) a[j];
return(hashval % tablesize); /* suponiendo que tablesize
es global */
}

Mtodo del Doblado


En este mtodo, las llaves son interpretadas como una secuencia de
dgitos escritos en un pedazo de papel. Ello consiste en "doblar" ese
papel, de manera que los dgitos se superpongan sin llevar en
consideracin el "se lleva uno" como se muestra en la siguiente
figura.

El proceso es
repetido
hasta que los
dgitos
formen
un
nmero
menor al del
tamao de la
tabla hash.
Es importante
resaltar que
el metodo de
doblar
tambin
puede
ser
usado
con
nmeros
binarios.
En
este caso, en
vez
de
la
suma, se debe realizar una operacin de "OR exclusivo", pues
operaciones de "AND" y de "OR" tienden a producir direcciones-base
concentrados al final o al inicio de la tabla.

COLISIONES
Por ms que se intente encontrar una funcin hash eficiente, en
aplicaciones prcticas es difcil conseguir evitar el problema de
colisiones de llaves. As, se vuelve necesario estudiar alternativas
para este problema.

Existen varias formas de resolver el problema de colisiones, dentro de


ellas destacamos:
Encadenamiento Separado o Externo (Separate Chaining)
En el encadenamiento separado colocamos los elementos que poseen
llaves iguales en una listas encadenada.

Utilizando esta estrategia, no es difcil percibir que en el peor de los


casos el tiempo para insertar un nuevo elemento en la tabla es de
O(1). La bsqueda por un elemento, toma el tiempo proporcional al
tamao de la lista almacenada en cada slot.
Encadenamiento Interno
Encadenamiento interno es un mtodo para resolver problemas de
colisiones mediante el empleo de listas encadenadas que comparten
el mismo espacio de memoria al de la tabla de distribucin.

El encadenamiento interno prevee la divisin de la tabla T en dos


zonas, una de direccin-base, de tamao p, y otra reservada para
colisiones, de tamao s. Naturalmente, p+s = m, donde m
corresponde al tamao de la tabla hash.

Un problema de esta tcnica es que ella puede provocar colisiones


secundaria, eso quiere decir, que puede provocar colisiones
provenientes de la coincidencia de direcciones para llaves que no son
sinnimas. Este fue el caso ocurrido en al figura anterior cuando se
intent insertar el nmero 02. En la direccin base de este nmero ya
se encontraba el nmero 14, el cual no es sinnimo de 02.
Otra dificultad de esta tcnica se encuentra en la funcin de
eliminacin de un elemento. Es necesario tomar cuidado en este
procedimiento para que la llamada de bsqueda y eliminacin futuras
no retornen falsos resultados.

S-ar putea să vă placă și