- Bastián Pérez Aguayo
- Matías García Padilla
- Vicente Miranda Gómez
Este proyecto implementa y compara el rendimiento y la escalabilidad de diferentes arquitecturas de tablas hash (hashing abierto, hashing cerrado con Quadratic Probing optimizado y std::unordered_map de la STL) utilizando un dataset real de las elecciones australianas del 2019 con más de user_id y user_screen_name.
Tarea3_ED/
├── data/
│ └── auspol2019.csv # Dataset de tweets (133.136 filas procesadas)
├── include/
│ ├── ClosedHashTable.h # Definición de la tabla hash con direccionamiento abierto
│ ├── HashFunctions.h # Funciones hash primarias y secundarias (DJB2, SDBM)
│ ├── TweetData.h # Estructura de datos del tweet y cabecera del parser CSV
│ └── openhash.h # Definición de la tabla hash con encadenamiento
├── src/
│ ├── ClosedHashTable.cpp # Implementación de la tabla cerrada y probing cuadrático
│ ├── HashFunctions.cpp # Implementación matemática de hashes modulares
│ ├── TweetData.cpp # Parser resistente a comas internas y saneamiento de strings
│ ├── main.cpp # Suite automatizada de Benchmarking (20 iteraciones)
│ └── openhash.cpp # Implementación de tabla abierta utilizando std::list
├── graficador.py # Script de Python para análisis estadístico y gráficos
├── resultados_experimento.csv # Dataset métrico generado por la suite de C++
└── README.md # Este archivo
- Compilador con soporte para C++17 o superior (
g++recomendado). - Sistema Operativo: GNU/Linux.
El script de análisis requiere Python 3 y las siguientes dependencias de procesamiento científico:
pip install pandas matplotlib seaborn
Sigue este flujo de trabajo secuencial desde la raíz del proyecto (Tarea3_ED/) en tu terminal:
Para realizar un estudio experimental confiable, compilamos activando el nivel de optimización máximo del compilador (-O3) para vectorización de ciclos y optimizaciones de registro, junto con el flag de inclusión -Iinclude:
g++ -O3 -Iinclude src/*.cpp -o main_hash
Ejecuta el binario generado. Este proceso correrá de forma aislada la suite experimental automatizando 20 repeticiones completas por cada tramo de
./main_hash
Al finalizar, la consola mostrará la validación de integridad del conteo y habrá generado en la raíz el archivo estructurado resultados_experimento.csv.
Ejecuta el script de Python para procesar el CSV, calcular las medias aritméticas y las desviaciones estándares de los tiempos, y exportar los reportes visuales de escalabilidad:
python graficador.py
El script de Python generará automáticamente los siguientes archivos en la raíz del proyecto para ser incorporados de forma directa en el informe final en
-
grafica_tiempo_screen_name.png: Curva de escalabilidad temporal (Tiempo en ms vs. Cantidad de tweets) utilizando la claveuser_screen_name, detallando la desviación estándar de las 20 pasadas. -
grafica_tiempo_user_id.png: Curva de escalabilidad temporal utilizando la clave analíticauser_id. -
Reporte por Consola: Resumen detallado del uso de memoria estática y dinámica de las tres estructuras en el límite superior de carga (
$130.000$ registros), evidenciando el trade-off de espacio de la preasignación modular.