Skip to content

EDAII/motorcycle_ordering

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🏍️ Ordenador de Motocicletas

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.

Alunos

  • Manoel Felipe Teixeira Neto - Matrícula: 211041240
  • Caio Mesquita Vieira - Matrícula: 222024283

Vídeo de Apresentação

Clique aqui para vizualiar o vídeo

Sobre o Projeto

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.

Funcionalidades

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.

Algoritmos de Ordenação Utilizados

A eficiência da plataforma é garantida pela escolha estratégica de algoritmos de ordenação para cada tipo de atributo, conforme detalhado abaixo:

1. Ordenação por Potência - Quick Sort

  • 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.

2. Ordenação por Peso - Selection Sort

  • 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.

3. Ordenação por Torque - Insertion Sort

  • 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.

4. Ordenação por Conforto - Bubble Sort

  • 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).

5. Ordenação por Preço - Merge Sort

  • 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.

Como Rodar o Projeto

Para executar o projeto em sua máquina local, siga os passos abaixo.

Pré-requisitos

  • Python 3.x
  • pip (gerenciador de pacotes do Python)

Instalação

  1. 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
  2. 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

Execução

  1. Verifique os arquivos: Certifique-se de que o arquivo base_dados_motos.csv está na raiz do projeto, no mesmo diretório que o app.py.

  2. Inicie a aplicação Flask: Com as dependências instaladas, execute o seguinte comando no terminal:

    python app.py
  3. 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.

Tecnologias Utilizadas

  • 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •