guia-tp

Práctica 6: Tablas Hash

Para empezar a trabajar

Construir el TAD de Tabla Hash correspondiente a las implementaciones de Dispersión Abierta [lista de colisiones y zona de overflow] de teniendo en cuenta:

Entendiendo como funcionan

Se tiene la entrada (631, 130, 611, 417, 534, 965, 394) y una función hash h(x) = x mod 10, expresar las tablas hash correspondientes a:

¿Qué estructura de Tabla Hash recomendarias?

Comparando tablas Hash

Sea T una tabla de hash de tamaño 10 y h la siguiente función de hash h(k) = (4 + 3k) mod 10.

Se quieren insertar en T elementos con claves (22, 23, 25, 15, 32, 18, 12, 19, 41, 31) en ese mismo orden usando h.

Comparando Tablas Hash vs Árboles AVL

El código a utilizar es provisto por la cátedra. La idea es realizar modificaciones pequeñas para poder realizar las mediciones necesarias.

Se entregan 4 archivos que contienen datos de un producto (código de 7 dígitos, detalle, precio, stock).

Son archivos binarios que contienen datos correspondientes a los productos que responden a la siguiente estructura:

struct Registro {
    int codigo;
    char detalle[50];
    int precio;
    int stock;
};

La función leerArchivoYCargarEstructuras lee el archivo especificado por parámetro y, para cada registro leido del archivo, guardará tanto en la tabla hash como en el árbol AVL, el código del producto como clave y la posición física del registro adentro del archivo como dato.

Por lo tanto, ambas estructuras (la tabla hash y árbol AVL) actúan como índice en memoria para realizar búsquedas por código de producto y luego poder leer el registro desde el archivo de manera eficiente.

Una vez cargados esos índices, se procede a realizar una serie de búsquedas de códigos de productos generados al azar. Para ello se procede a generar códigos aleatorios y chequear a ver si se encuentran en la estructura de datos. En caso de que se encuentre, se lee el registro del archivo y se muestra por pantalla. De no encontrarse se vuelve a generar otro código aleatorio y se repite el proceso. El proceso termina al haber hecho exactamente la cantidad de búsquedas y lecturas que se especifican por parámetro.

Se pide realizar los siguientes experimentos modificando las variables del programa: tamanoTablaHash, nombreArchivo e iteraciones. Una vez ejecutado, registrar en las siguientes tablas los tiempos de acceso promedio para cada estructura de datos. Y al finalizar, responder las preguntas planteadas para cada experimento y para las conclusiones finales.

Archivo de 10 registros, realizando 500 repeticiones

Tamaño Tabla Hash TH c/colisiones TH c/ZO Tiempo de acceso Árbol AVL
2   ——- NO ——-  
3   ——- NO ——-  
5      
7      
11      

Archivo de 100 registros, realizando 500 repeticiones

Tamaño Tabla Hash TH c/colisiones TH c/ZO Tiempo de acceso Árbol AVL
13   ——- NO ——-  
29   ——- NO ——-  
43   ——- NO ——-  
67      
101      

Archivo de 1000 registros, realizando 50000 repeticiones

Tamaño Tabla Hash TH c/colisiones TH c/ZO Tiempo de acceso Árbol AVL
113   ——- NO ——-  
359   ——- NO ——-  
727      
1009      
1451      

Archivo de 10000 registros, realizando 50000 repeticiones

Tamaño Tabla Hash TH c/colisiones TH c/ZO Tiempo de acceso Árbol AVL
1433   ——- NO ——-  
3529   ——- NO ——-  
7297      
10093      
13873      

Preguntas

Para cada uno de los archivos anteriores, responder y justificar las siguientes preguntas:

Conclusiones generales