Desenvolvido por Aline Athaydes
Este repositório contém a implementação e a análise experimental de dois algoritmos exatos para o problema do Caminho Hamiltoniano (HP) em grafos não-direcionados, desenvolvida para a disciplina Algoritmos e Grafos (IC0004) da UFBA.
O foco principal do projeto é analisar esforço computacional, efetividade de podas e o comportamento em instâncias críticas (Transição de Fase).
- Backtracking Otimizado (BT): implementação instrumentada com heurística de Warnsdorff e poda por componentes conexos (checagem de conectividade no subgrafo restante e identificação de estruturas críticas que inviabilizam a continuação do caminho).
- Programação Dinâmica (DP): algoritmo no estilo Bellman–Held–Karp via bitmasking, com complexidade O(n² · 2ⁿ), adequado para instâncias onde o BT tende à explosão combinatória.
- Pipeline Experimental: gerador de instâncias aleatórias usando o modelo Erdős–Rényi G(n, p) para mapear a dificuldade do problema em diferentes densidades.
src/
├── hp_main.py # CLI principal e exportação Graphviz (1-based)
├── hp_bt0.py # Core do Backtracking com podas avançadas (0-based)
├── hp_dp.py # Solver via Programação Dinâmica (0-based)
├── graph_gen.py # Gerador de grafos (modelos HP e Erdős–Rényi)
├── bench.py # Pipeline automático de benchmarks
├── plot_results.py # Geração de gráficos a partir do CSV
├── plot_results2.py # Alternativa de visualização (variações)
└── plot_analysis.py # Visualização/análises (Matplotlib)
examples/ # Instâncias clássicas para testes e validação
outputs/ # Resultados consolidados (CSV, plots e visualizações)
- Python 3.8+
- Graphviz (para gerar as visualizações
.dot)
sudo apt-get update && sudo apt-get install -y graphvizpip install pandas matplotlib seabornPara reproduzir o benchmark e gerar as métricas utilizadas no relatório técnico:
python3 src/bench.py --csv outputs/results.csv --timeout-bt 10 --trials 5python3 src/plot_analysis.py
python3 src/plot_results2.py
python3 src/plot_results.pyOs resultados salvos em outputs/results.csv detalham o número de chamadas recursivas, podas realizadas e o tempo de execução para cada algoritmo.
-
Garey, M. R., & Johnson, D. S. (1979). Computers and Intractability.
Redução clássica do Ciclo Hamiltoniano para o Caminho Hamiltoniano. -
Karp, R. M. (1972). Reducibility Among Combinatorial Problems.
-
Bellman–Held–Karp: fundamentação para a complexidade da solução via Programação Dinâmica (DP por subconjuntos/bitmasking).