You are on page 1of 3

TAREA 4

ESTRUCTURA DE DATOS (2017-2)

Nombres: _ Sebastián Navarrete.

_Giancarlo Risopatrón.
Enunciado Problema:

Suponga que existe un Sistema de Gestión de Biblioteca que posee un catálogo que N (0<N<132)
libros en existencia.

Cuando un usuario desea saber si un libro está o no disponible, el sistema actual efectúa una
búsqueda secuencial por el código del libro, hasta encontrar el registro buscado e informar de su
disponibilidad. Si se tiene suerte, la respuesta tiene O (1), sino puede llegar a tener O (N).

Los registros no están ordenados, sino que se ingresan al repositorio de datos según vayan
llegando nuevas adquisiciones. Los códigos corresponden al estándar internacional de
codificación.

Luego, se ha pensado que es una buena idea mejorar este sistema de búsqueda a través de la
construcción de un programa que genere una búsqueda más rápida, utilizando una tabla Hash
como estrategia de búsqueda de los registros.

Se pide:

1.- Construir en Java un programa que ofrezca al usuario un menú simple que le permita
“fácilmente” (sebe ser posible identificar que ejecuta cada opción):

a) Cargar (leer) un archivo con los registros de los libros existentes en biblioteca con el formato
indicado.

b) Transformar cada código de un libro registrado en un valor X entero, que es su equivalente


numérico en base 10, transformado usando la tabla ASCII considerando base 128 para el código.
Por ejemplo, la clave “pt” puede ser transformada a (112*128+116) = 14452.

c) Generar una tabla hash abierta para los códigos de los libros de tamaño MAX = 131; la función
de colisión es

H(X) = X mod 131.

d) Generar una tabla hash cerrado de tamaño MAX = 131; en que la función de colisión es

H1(X, i) = (H(X) + i* (X mod 127)) mod 131, con H(X) igual a la definición de b).

e) Generar una tabla hash cerrada de tamaño MAX = 131; la función de colisión es

H2(X, i) = (H`(X) + i* (X mod 127)) mod 131.

f) Generar una tabla hash cerrada de tamaño MAX = 131; la función de colisión es

H3 (X, i) = (H``(X) + i* (X mod 127)) mod 131, con H``(X) = pleg(X) mod 131, donde pleg es
una función que “suma” los dígitos de X; por ejemplo: pleg (9999) = 9+9+9+9 = 36.

2.- Reportar: Cuál de todas las tablas hash implementadas le parece más eficiente. ¿Por qué?
Fundamente su respuesta con datos experimentales (distintos tamaños de archivos de entrada,
diferentes datos vs. Tiempo de respuesta y/o número de colisiones resueltas; buen
aprovechamiento del espacio, entre otras razones posibles).
Análisis Problema:

En una biblioteca se ha pensado que el sistema de búsqueda actual de libros debe mejorarse, para
esto se ideo un programa que genere una búsqueda más rápida, el cual utilizada la tabla Hash
como estrategia en la búsqueda de registro de libros.

Para esto es necesario la lectura del archivo de texto que tenga los datos de los libros disponibles,
tras la lectura es necesario transformar cada código de un libro en un valor X entero, utilizando la
tabla ASCII, mediante este valor se puede generar las tablas hash que se piden y almacenar los
libros mediante los resultados de las distintas funciones de colisión. Y así utilizarlas para una
búsqueda más eficiente.

Casos de prueba Problema:

Mediante el siguiente texto

Al ejecutar proyecto de inmediato muestra menú

En caso que se busque un código inexistente

En caso en que se aplique el hash sin datos

Conclusión Problema:

Se puede apreciar que el método utilizado, en este caso el hash, mejora el sistema de gestión de la
biblioteca, al organizar los libros mediante el uso de hash abierto o cerrado y posteriormente
buscarlos con su código único, al igual que el hash abierto posee el menor tiempo al organizar
datos por su método de ordenamiento, pero es inferior al buscar por casillas, mientras que el uso
de hash cerrado a pesar que tiene un mayor tiempo de ordenamiento, es superior al buscar al
tener nodos únicos por código.

You might also like