Giter Site home page Giter Site logo

iangg29 / tc1031-integral-a Goto Github PK

View Code? Open in Web Editor NEW
0.0 2.0 0.0 5.46 MB

Application for reviewing and consulting data from Formula 1 Championships from 1950 to 2021.

License: GNU General Public License v3.0

C++ 100.00%
data-structures algorithms cpp

tc1031-integral-a's Introduction

ITESM

Formula 1 Statistics 🏎

Data Structures & Algorithms - TC1031 💻

Proyecto para la materia de Programación de estructuras de datos y algoritmos fundamentales, en C++.

Contexto 🔍

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.


Competencias 📖

SICT0301B: Evalúa los componentes.

  • Presenta Casos de Prueba correctos y completos para todas las funciones y procedimientos del programa.

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.

  • Hace un análisis de complejidad correcto y completo para todo el programa y sus componentes.

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)

SICT0302B: Toma de decisiones.

  • Selecciona un algoritmo de ordenamiento adecuado al problema.

Merge Sort

  • Selecciona y usa una estructura lineal adecuada al problema.

Doubly Linked List y Linked List

  • Usa un árbol adecuado para resolver un problema.

Binary Search Tree (BST)

SICT0303B: Implementa acciones científicas.

  • Implementa mecanismos para consultar información de las estructuras correctos.

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.

  • Implementa mecanismos de lectura de archivos correctos

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.

SEG0702A: Tecnologías de vanguardia.

  • Describe cada algoritmo de la estructura de forma clara y con ejemplos.

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.


Pre-requisitos 📋

  • C++ 14.
  • Git en caso de querer clonar el repositorio.

Instalación 🔧

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

Construido con 🛠️

Autor ✒️

Referencias 📃

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

Licencia 📄

Este proyecto está bajo la Licencia (GNU General Public License v3.0) - mira el archivo LICENSE.md para detalles


Ian García 2021

tc1031-integral-a's People

Contributors

iangg29 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.