| description |
|---|
Biblioteca acadêmica em C11 de estruturas de dados, algoritmos clássicos, heurísticas e meta-heurísticas com rigor científico e análise de complexidade. |
Biblioteca acadêmica focada em implementações eficientes e validadas de estruturas de dados, algoritmos clássicos, heurísticas e meta-heurísticas. Todas as implementações seguem princípios acadêmicos rigorosos com referências a papers e pseudocódigos reconhecidos.
- ✅ Eficiência: Implementações otimizadas com análise de complexidade
- ✅ Genericidade: Suporte a tipos primitivos, strings, ponteiros, vetores e matrizes
- ✅ Validação Acadêmica: Cada algoritmo referencia papers e literatura científica
- ✅ Documentação: Código bem documentado com exemplos práticos
- ✅ Testes: Cobertura completa com testes unitários e benchmarks
algoritmos-heuriticos/
├── include/ # Headers públicos
│ ├── data_structures/ # Estruturas de dados
│ │ ├── common.h # Tipos genéricos
│ │ ├── queue.h # Fila FIFO
│ │ ├── stack.h # Pilha LIFO
│ │ ├── linked_list.h # Lista Encadeada
│ │ ├── array_list.h # Array Dinâmico
│ │ ├── hash_table.h # Tabela Hash
│ │ ├── binary_tree.h # Árvore Binária
│ │ ├── bst.h # Binary Search Tree
│ │ ├── avl_tree.h # AVL Tree (auto-balanceada)
│ │ ├── heap.h # Binary Heap
│ │ ├── priority_queue.h # Fila de Prioridade
│ │ ├── trie.h # Trie (Prefix Tree)
│ │ ├── graph.h # Grafo
│ │ └── union_find.h # Disjoint Set
│ ├── algorithms/ # Algoritmos clássicos
│ │ ├── sorting/
│ │ ├── searching/
│ │ └── graph_algorithms/
│ ├── heuristics/ # Heurísticas construtivas
│ │ └── greedy/
│ └── metaheuristics/ # Meta-heurísticas
│ ├── genetic_algorithm.h
│ ├── simulated_annealing.h
│ ├── tabu_search.h
│ └── ant_colony.h
├── src/ # Implementações
│ ├── data_structures/
│ ├── algorithms/
│ ├── heuristics/
│ └── metaheuristics/
├── tests/ # Testes unitários
├── examples/ # Exemplos de uso
├── benchmarks/ # Benchmarks de performance
├── docs/ # Documentação adicional
│ ├── references/ # Papers e referências
│ └── complexity_analysis/ # Análise de complexidade
└── CMakeLists.txt
- Queue (Fila FIFO) - Cormen Ch. 10.1 - O(1) enqueue/dequeue
- Stack (Pilha LIFO) - Cormen Ch. 10.1 - O(1) push/pop
- LinkedList (Lista Encadeada) - Knuth Vol 1, Sec 2.2 - O(1) insert/remove com ponteiro
- ArrayList (Array Dinâmico) - Goodrich Ch. 7 - O(1) acesso, O(1) amortizado append
- Hash Table - Cormen Ch. 11 - O(1) amortizado insert/search/delete
- Chaining e Open Addressing (Linear/Quadratic/Double Hashing)
- Binary Tree - Base para BST, AVL, etc.
- BST (Binary Search Tree) - Cormen Ch. 12 - O(h) operações
- Heap (Min/Max Binary Heap) - Cormen Ch. 6 - O(log n) insert/extract
- Graph (Grafo) - Cormen Ch. 22 - Adjacency List e Matrix
- AVL Tree - Adelson-Velsky & Landis (1962) - O(log n) GARANTIDO
- Priority Queue - Implementada sobre Heap - O(log n) insert/extract
- Trie (Prefix Tree) - Knuth Vol 3, Sec 6.3 - O(m) onde m = tamanho string
- Union-Find (Disjoint Set) - Cormen Ch. 21 - O(α(n)) ≈ O(1)
Para suportar genericidade em C, utilizamos a seguinte estratégia:
// Estrutura base genérica
typedef struct {
void *data; // Ponteiro para dados
size_t size; // Tamanho do tipo
void (*destructor)(void*); // Função de destruição customizada
void* (*copy)(const void*); // Função de cópia customizada
} GenericData;
// Funções auxiliares para comparação, hash, etc.
typedef int (*CompareFn)(const void*, const void*);
typedef size_t (*HashFn)(const void*);
typedef void (*PrintFn)(const void*);// Criando uma fila de inteiros
Queue *int_queue = queue_create(sizeof(int), NULL, NULL);
// Criando uma pilha de strings
Stack *str_stack = stack_create(sizeof(char*), free_string, copy_string);
// Criando uma lista de structs customizadas
LinkedList *list = list_create(sizeof(Person), free_person, copy_person);- Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2009). Introduction to Algorithms (3rd ed.). MIT Press.
- Knuth, D. E. (1997). The Art of Computer Programming, Volume 1: Fundamental Algorithms (3rd ed.). Addison-Wesley.
- Sedgewick, R., & Wayne, K. (2011). Algorithms (4th ed.). Addison-Wesley.
- Talbi, E.-G. (2009). Metaheuristics: From Design to Implementation. Wiley.
- Gendreau, M., & Potvin, J.-Y. (2010). Handbook of Metaheuristics (2nd ed.). Springer.
- Papadimitriou, C. H., & Steiglitz, K. (1998). Combinatorial Optimization: Algorithms and Complexity. Dover.
# Criar diretório de build
mkdir build && cd build
# Configurar com CMake
cmake ..
# Compilar
cmake --build .
# Executar testes
ctest --output-on-failureCada estrutura de dados e algoritmo inclui:
- ✅ Testes unitários (correção)
- ✅ Testes de stress (robustez)
- ✅ Benchmarks (performance)
- ✅ Análise de complexidade empírica
- Queue (Array circular buffer e Linked)
- Stack (Array e Linked)
- Linked List (Single, Double, Circular)
- ArrayList (Dynamic Array)
- Hash Table (Chaining, Linear/Quadratic/Double Hashing)
- Binary Tree (base)
- Binary Search Tree (BST)
- Heap (Min/Max Binary Heap)
- Graph (Adjacency List e Matrix)
- AVL Tree (auto-balanceada)
- Priority Queue (sobre Heap)
- Trie (Prefix Tree para strings)
- Union-Find (Disjoint Set)
- Red-Black Tree
- B-Tree / B+ Tree
- Skip List
- Bloom Filter
- Segment Tree
- Fenwick Tree
- Sorting (QuickSort, MergeSort, HeapSort)
- Searching (Binary Search, Interpolation Search)
- Graph Algorithms (Dijkstra, Bellman-Ford, Floyd-Warshall)
- Greedy Algorithms
- Genetic Algorithms
- Simulated Annealing
- Tabu Search
- Ant Colony Optimization
- Particle Swarm Optimization
Este projeto é licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.
Contribuições são bem-vindas! Por favor:
- Inclua referências acadêmicas para novos algoritmos
- Adicione testes unitários completos
- Documente a análise de complexidade
- Siga o estilo de código do projeto
Para dúvidas ou sugestões sobre implementações acadêmicas, abra uma issue no repositório.
Nota: Este projeto tem fins educacionais e de pesquisa. Todas as implementações seguem princípios acadêmicos rigorosos e incluem análise de complexidade teórica e empírica.