Proyecto para la materia de Programación de estructuras de datos y algoritmos fundamentales, en C++.
En este proyecto se muestran los datos y estadísticas obtenidas de la Formula 1 desde 1950 a 2021. Para esto se cargan los datos en distintas estructuras de datos para poder optimizar las consultas dentro de la información. Este software tiene bastante capacidad para expandirse por lo que cualquiera es libre de modificar/agregar cosas siguiendo los términos de la licencia.
Para poder comprobar el buen funcionamiento de las estructuras implementadas en el programa se implementó un sistema complejo de Testing para cada una de las funciones que tiene el usuario. Esta función hace distintas pruebas a todas las estructuras de datos implementadas y compara ciertos el resultado de ciertos casos con la respuesta correcta que se espera, en caso de coincidir la prueba ha pasado. Así consecutivamente hasta haber probado todas las funciones y estructuras. Para ejecutar esta función es necesario seleccionar la opción 4 en el menú de la aplicación.
Para esta actividad Integral tipo A, se implementaron diversas estructuras, las cuales incluyen una estructura lineal, un árbol, así como un algoritmo de ordenamiento.
Algoritmo de ordenamiento: Merge Sort
El algoritmo de ordenamiento escogido fué el de Merge Sort, el cual para este caso tiene una complejidad para el peor de los casos de O(n log n), siendo n el número de registros que en este caso se utilizó para los Tiempos de Vuelta de los pilotos durante la carrera.
Estructura lineal: Doubly Linked List y Linked List
La estructura lineal seleccionada para este programa de estadísticas fué Doubly Linked List y Linked List para los tiempos de vuelta por los pilotos en las carreras así como de las carreras realizadas durante 1950 a 2021. Los análisis de complejidad temporal para el peor de los casos de ambas listas (doubly and singly) son completamente iguales, por lo que la complejidad temporal para el peor de los casos es: en acceso O(n), para búsqueda O(n) y para inserción O(1).
Árbol: BST (Binary Search Tree)
El árbol que mejor se adapta a la estructura de los datos de los pilotos fué el Binary Search Tree (BST), el cual tiene una complejidad temporal para el peor de los casos de O(n) para acceder a algún dato, O(n) para búsqueda dentro del árbol, así como O(n) para inserción de algún dato.
** Nota: El programa, al ser de consulta de estadísticas de un deporte de la vida real, no permite la inserción de datos (a pesar de estar implementados). Por lo que el número de registros es fijo dando así una complejidad constante. O(1)
Merge Sort
Doubly Linked List y Linked List
Binary Search Tree (BST)
Todas las estructuras implementadas en la aplicación cuentan con métodos de búsqueda y/o de obtención de datos. Sin embargo, al tratarse de muchos datos (algunos archivos hasta 500K datos) solo se permite la consulta de n número de datos.
Para poder hacer la carga completa de los datos, que, originalmente se encuentran en un archivo CSV, se implementó un sistema que permite leer los datos de dichos archivos e insertarlos adecuadamente a las diferentes estructuras de datos que el programa soporta. Este sistema se ejecuta al inicio del programa, ya que para poder utilizarse es necesario y obligatorio que los datos estén cargados.
Dentro del código de la aplicación, por encima de cada método se encuentra una pequeña descripción, así como la descripción de los posibles parámetros y variables de respuesta que estos puedan tener. Además, los diferentes ejemplos de cada estructura se encuentran en las pruebas automáticas en la opción 4 del menú principal.
- C++ 14.
- Git en caso de querer clonar el repositorio.
Clonar repositorio o descargar código fuente.
git clone https://github.com/iangg29/TC1031-Integral-A.git
Ir al proyecto descargado
cd TC1031-Integral-A
Compilar programa
g++ -std=c++14 main.cpp
Ejecutar
- LINUX/MACOS
./a.out
- WINDOWS
a.exe
Seleccionar tipo de Integral
A
- Ian García - iangg29
CPlusPlus (2020) vector. https://www.cplusplus.com/reference/vector/vector/
Vopani (2021) Formula 1 World Championship (1950 - 2021) . https://www.kaggle.com/rohanrao/formula-1-world-championship-1950-2020
Este proyecto está bajo la Licencia (GNU General Public License v3.0) - mira el archivo LICENSE.md para detalles
Ian García 2021