Este projeto é uma aplicação web desenvolvida como parte da disciplina de Estrutura de Dados e Análise de Algoritmos (EDA2). O "Ordenador de Motocicletas" é uma plataforma que permite filtrar e ordenar motocicletas por diferentes atributos, implementando diferentes algoritmos de ordenação para demonstrar suas características e eficiências.
- Manoel Felipe Teixeira Neto - Matrícula: 211041240
- Caio Mesquita Vieira - Matrícula: 222024283
Clique aqui para vizualiar o vídeo
O "Ordenador de Motocicletas" é uma aplicação web que permite aos usuários explorar uma base de dados de motocicletas, filtrando por marca, categoria, ano e cilindrada, e ordenando por diferentes atributos como potência, peso, torque, conforto e preço. A aplicação foi construída utilizando Flask, um micro-framework em Python, e emprega a biblioteca Pandas para manipulação de dados.
A aplicação oferece as seguintes funcionalidades:
- Filtragem por Atributos: Permite que os usuários filtrem motocicletas por marca, categoria, ano e cilindrada.
- Ordenação por Diferentes Atributos: Ordena as motocicletas por potência, peso, torque, conforto ou preço.
- Interface Web Intuitiva: Interface moderna e responsiva para facilitar a navegação e exploração dos dados.
- Paginação: Sistema de paginação para lidar com grandes volumes de dados de forma eficiente.
A eficiência da plataforma é garantida pela escolha estratégica de algoritmos de ordenação para cada tipo de atributo, conforme detalhado abaixo:
- Arquivo:
src/sorting/by_potencia.py
- Descrição: Para a ordenação por potência, foi implementado o Quick Sort. Este algoritmo divide a lista em duas partes baseado em um pivô, ordenando recursivamente cada parte. É um algoritmo eficiente e amplamente utilizado para ordenação de grandes conjuntos de dados.
- Justificativa: O Quick Sort tem complexidade de tempo média de O(n log n) e no pior caso O(n²), mas é muito eficiente na prática. É ideal para ordenação por potência, que é um atributo numérico com boa distribuição de valores.
- Arquivo:
src/sorting/by_peso.py
- Descrição: A ordenação por peso utiliza o Selection Sort. Este algoritmo encontra o menor (ou maior) elemento e o coloca na posição correta, repetindo o processo para os elementos restantes.
- Justificativa: O Selection Sort tem complexidade de tempo de O(n²), mas realiza poucas trocas (apenas n-1 trocas no pior caso). É adequado para ordenação por peso, especialmente quando a estabilidade não é crítica e o número de elementos não é muito grande.
- Arquivo:
src/sorting/by_torque.py
- Descrição: A ordenação por torque emprega o Insertion Sort. Este algoritmo constrói a lista ordenada um elemento por vez, inserindo cada novo elemento na posição correta dentro da parte já ordenada.
- Justificativa: O Insertion Sort tem complexidade de tempo de O(n²) no pior caso, mas O(n) no melhor caso. É muito eficiente para listas pequenas ou parcialmente ordenadas, sendo ideal para ordenação por torque.
- Arquivo:
src/sorting/by_conforto.py
- Descrição: A ordenação por conforto utiliza o Bubble Sort. Este algoritmo compara pares adjacentes e os troca se estiverem na ordem errada, repetindo o processo até que a lista esteja ordenada.
- Justificativa: O Bubble Sort tem complexidade de tempo de O(n²), mas é simples de implementar e entender. É adequado para ordenação por conforto, que é um atributo com poucos valores únicos (escala de 1 a 10).
- Arquivo:
src/sorting/by_preco.py
- Descrição: A ordenação por preço emprega o Merge Sort. Este algoritmo divide a lista em duas metades, ordena cada metade recursivamente e depois combina as duas metades ordenadas.
- Justificativa: O Merge Sort tem complexidade de tempo de O(n log n) em todos os casos e é estável. É ideal para ordenação por preço, garantindo consistência na ordenação e eficiência mesmo com grandes volumes de dados.
Para executar o projeto em sua máquina local, siga os passos abaixo.
- Python 3.x
pip
(gerenciador de pacotes do Python)
-
Clone o repositório:
git clone [https://github.com/seu-usuario/seu-repositorio.git](https://github.com/seu-usuario/seu-repositorio.git) cd seu-repositorio
-
Instale as dependências: O projeto utiliza as bibliotecas listadas no arquivo
requirements.txt
. Para instalá-las, execute o comando:pip install -r requirements.txt
-
Verifique os arquivos: Certifique-se de que o arquivo
base_dados_motos.csv
está na raiz do projeto, no mesmo diretório que oapp.py
. -
Inicie a aplicação Flask: Com as dependências instaladas, execute o seguinte comando no terminal:
python app.py
-
Acesse a aplicação: Abra o seu navegador e acesse o endereço fornecido no terminal, que geralmente é: http://127.0.0.1:8000
A aplicação estará rodando e pronta para uso.
- Python 3.x - Linguagem de programação
- Flask - Framework web
- Pandas - Manipulação de dados
- NumPy - Operações numéricas
- HTML/CSS/JavaScript - Interface web