Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
TEMA
DOCENTE
CURSO
ORGANIZACIN DE ARCHIVOS.
INTEGRANTES
CICLO :
IV
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. -
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.
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.
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
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