Sei sulla pagina 1di 6

UNIVERSIDAD NACIONAL DE TRUJILLO

FACULTAD DE CIENCIAS FSICAS Y MATEMTICAS


ESCUELA ACADMICO PROFESIONAL DE INFORMTICA

TEMA

METODO HASHING O DISPERSO PARA ARCHIVOS.

DOCENTE

GUITIERREZ GUITERREZ JORGE LUIS.

CURSO

ORGANIZACIN DE ARCHIVOS.

INTEGRANTES

LAZARO RODRIGUEZ ESTEFANY. LULICHAC ROJAS EDUARDO. MUOZ HUERTAS FRANCO.

CICLO :

IV

TRUJILLO PER 2011

DEFINICIN: En informtica , Hash se refiere a una funcin o mtodo para generar claves que representen a un documento , registro , archivo , etc. Una funcin de hash es una funcin para resumir o identificar probabilsticamente un gran conjunto de informacin. PROPIEDAD FUNDAMENTAL DEL HASHING Es que si dos resultados de una misma funcin son diferentes, entonces las dos entradas que generaron dichos resultados tambin lo son. Es posible que existan claves resultantes iguales para objetos diferentes, ya que el rango de posibles claves es mucho menor que el de posibles objetos a resumir. Con el uso de la funcin de dispersin los datos se guardan de manera aleatoria en el archivo,
Par una mejor comprensin se proceder a la implementacin en donde se mostrara de manera detallada la explicacin de este mtodo.

IMPLEMENTACIN: Ejm:
Se utilizaran 2 archivos uno de texto k.txt y un archivo de colisin k.col. Fh(): es la funcin de dispersin(se define), devuelve el nmero de registro del archivo. Nos dice donde se debe ubicar el registro. nr <- fh(clave) Ptr: campo del archivo de texto si es -1 indica que no hay colisin sino indica el valor del nmero de registro en donde se debe escribir el registro, pero en el archivo de colisin. SR: campo del archivo de colisin, indica el siguiente registro a escribir en el mismo archivo y si su valor es -1 indica que no hay siguiente registro. -

Se cuenta con las siguientes estructuras:

struct encabezado{ int tam; }e;

struct encab_colision{ int nrs; }ec;

struct registro{ int nr; char nom[10]; int edad; int ptr; }rd;

struct registro_col{ int nr; char nom[10]; int edad; int SR; }rc;

r:registro de datos

rc:registro de colisin

OJO: Este mtodo al igual que el indexado presenta un campo en comn en ambos archivos, el campo ptr siguientes datos: Se cuenta con losdel archivo de texto y el campo nr del archivo de colision Fh( ) Sumar los pesos de las letras,sacarle modulo 10 y sumarle 1.
1)

Clave
Paty 2) Ruben 3) Nicol 4) Ana 5) Mara 6) Juan

nr <- fh(clave) 3 1 3 7 3 7

Como nos podemos dar cuenta que para claves diferentes,la funcin dispersin devuelve nmeros iguales,esto no quiere decir que un registro se sobreescriba en otro, sino que el registro con el mismo valor de nr se debe guardar en otro archivo llamado k.col . A este proceso se le denomina colision,cuando para claves distintas se obtiene el mismo valor de nr.

La siguientes tablas muestran como se guardan los datos en ambos archivos.

Los datos se guardan conforme al nr que devuelva la funcin dispersion,al encontrar colisin el campo ptr indica el numero del archivo en donde se guardara el registro,pero este ser guardado en el archivo k.col ya no de manera dispersa sino secuencial.

NRS nr 1 2 3 4 5 6 7 Ana K.TXT 29 2 Paty 18 1 nom Ruben edad 15 ptr -1

Si en el caso que se tuviere un tercer registro en colision,como el caso del registro Maria,el campo SRdel registro Nicol (que esta en colision ) indica en donde se debe guadar el registro Maria,se guardad en el mismo archivo k.col

NRS nr 1 2 3 4 Mara K.COL 13 -1 nom Nicol Juan edad 9 25 SR 4 -1

ALGORITMO: lr <- sizeof(struct registro) lrc <- sizeof(struct registro_col)

le <- sizeof(struct encabezado) LEER

lec <- sizeof(struct encab_colision)

sea las variables tipo entero nr <- 0,pos Sea una variable tipo carcter nombre[10]

SI ((fd<- open("k.txt",O_TEXT))<0)//fd archivo de datos Escribir("no se pudo abrir archivo") Retornar FIN SI SI ((fc<- open("k.col",O_TEXT))<0)//fc archivo de colisin Escribir("no se pudo abrir archivo") Retornar FIN SI fflush(stdin); escribir("Nombre) leer(nombre) nr <- fh(nom) // nr es nmero de registro en donde esta nom ingresado pos <- (nr-1)*lr+le lseek(fd,pos,0) read(fd,&r,lr) SI ( strcmp (r.nom,nombre=0) ) Escribir( r.nr , "\t", r.nom, "\t", r.edad) CASO CONTRARIO nr <- r.ptr pos <- (nr-1)*lrc+lec lseek(fc,pos,0) read(fc,&rc,lrc) SI ( strcmp (rc.nom,nombre=0) )

Escribir( rc.nr , "\t", rc.nom, "\t", rc.edad) CASO CONTRARIO nr <- rc.SR pos <- (nr-1)*lrc+lec lseek(fc,pos,0) read(fc,&rc,lrc) Escribir( rc.nr , "\t", rc.nom, "\t", rc.edad) FIN SI FIN SI FIN LEER

Potrebbero piacerti anche