Um benchmark comparativo do tempo de execução (
Este projeto realiza uma análise de benchmark comparativa entre três abordagens do algoritmo de Dijkstra para encontrar o caminho mínimo em grafos ponderados:
-
Dijkstra Clássico: Implementação de sala com complexidade
$O(V^2)$ . -
Dijkstra com Min-Heap: Implementação de sala com complexidade
$O((V+E)\log V)$ . -
Referência
NetworkX: A implementação otimizada da bibliotecanetworkxcomo linha de base.
O objetivo é avaliar o impacto prático da complexidade algorítmica em duas métricas principais:
- Tempo de Execução (s): O tempo médio necessário para executar o algoritmo.
- Pegada de Carbono (kg CO₂e): A emissão de dióxido de carbono estimada para cada execução, medida com a biblioteca
CodeCarbon.
O experimento foi conduzido em grafos aleatórios ponderados de tamanhos variando de 100 até 50.000 nós, com 20 repetições por tamanho para garantir robustez estatística.
- Python 3.10+
- Jupyter Notebook / Lab
- Pandas: Para coleta e agregação dos dados estatísticos.
- NetworkX: Para geração de grafos e como algoritmo de referência.
- Matplotlib & Seaborn: Para a geração dos gráficos estáticos (
.png). - Plotly: Para a geração dos gráficos interativos (
.html). - CodeCarbon: Para medição da pegada de carbono.
- Pickle: Para salvar e recarregar o progresso do benchmark (checkpoints).
Você pode replicar este experimento em sua máquina local seguindo os passos abaixo.
- Python 3.10 ou superior
pip(gerenciador de pacotes do Python)
-
Clone este repositório:
git clone https://github.com/alicefvictorino/dijkstra-performance cd dijkstra-performance -
(Opcional, mas recomendado) Crie e ative um ambiente virtual:
python -m venv venv source venv/bin/activate # No macOS/Linux .\venv\Scripts\activate # No Windows (PowerShell/CMD)
-
Instale as dependências necessárias:
pip install -r requirements.txt
-
Inicie o servidor Jupyter:
jupyter-lab
(Ou
jupyter notebookse preferir a interface clássica) -
Abra o arquivo
trab.ipynbno seu navegador. -
No menu do Jupyter, clique em Run (Executar) -> Run All Cells (Executar Todas as Células).
O notebook irá:
- Executar o benchmark completo (pode levar um tempo considerável).
- Salvar os resultados brutos em
resultados_benchmark/checkpoint_all_results.pkl. - Salvar a tabela de resumo em
resultados_benchmark/benchmark_dijkstra_resultados_com_co2.csv. - Gerar todos os gráficos estáticos (em
graficos_estaticos_barras_erro/) e interativos (emgraficos_interativos_plotly/).
Observação: O sistema de checkpoint está ativado. Se a execução for interrompida, você pode simplesmente dar "Run All" novamente, e o script pulará os tamanhos de grafo que já foram concluídos.
Os resultados completos da execução, incluindo a tabela de resumo (.csv) e todos os gráficos (.png e .html), estão salvos nas pastas /graficos_estaticos e /graficos_plotly.
Uma explicação detalhada da metodologia, execução do código e análise dos resultados está disponível no vídeo de apresentação: