Sobre o projeto
Este repositório é uma coleção curada de implementações de algoritmos e estruturas de dados escritas em Java, projetada para demonstrar implementações corretas e elegantes de técnicas computacionais comuns. Serve tanto como biblioteca de referência quanto como recurso educacional para desenvolvedores e estudantes.
O projeto cobre uma ampla gama de tópicos organizados em seções principais:
**Estruturas de Dados**: Inclui árvores balanceadas (AVL, Rubro-Negra), árvores de busca binária, árvores splay, arrays dinâmicos, árvores de Fenwick, heaps de Fibonacci, tabelas hash (com múltiplas estratégias de resolução de colisão), listas encadeadas, filas de prioridade (heap binário, heap D, variantes indexadas), filas, árvores de segmento, tabelas esparsas, pilhas, arrays de sufixos, tries e estruturas de união-busca.
**Programação Dinâmica**: Apresenta problemas clássicos como troca de moedas, distância de edição, variantes do problema da mochila, subarray contíguo máximo, subsequências comuns, crescentes e palíndromas mais longas, problema do caixeiro viajante e emparelhamento perfeito de peso mínimo. Também inclui exemplos práticos como problemas de ladrilhamento e desafios ad hoc.
**Geometria**: Cobre operações vetoriais 2D e 3D, algoritmos de interseção de círculos e linhas, par mais próximo de pontos, construção de casca convexa (varredura de Graham e cadeia monótona), cálculos de área e verificação de contenção de polígonos, cálculos de área de triângulos e cálculos de distância geográfica.
**Teoria dos Grafos**: Uma seção substancial incluindo algoritmos de árvores (enraizamento, isomorfismo, centro, diâmetro, LCA), algoritmos de fluxo em rede (Ford-Fulkerson, Edmonds-Karp, Dinic, escalonamento de capacidade, fluxo máximo de custo mínimo) e algoritmos centrais como BFS, DFS, Dijkstra, Bellman-Ford, Floyd-Warshall, ordenação topológica, árvores geradoras mínimas (Kruskal, Prim, Boruvka), componentes fortemente conexas (Tarjan, Kosaraju), pontos de articulação, pontes e caminhos eulerianos.
**Álgebra Linear**: Inclui eliminação de Gauss, operações de matrizes (determinante, inversa, multiplicação, potência), algoritmo de Freivald e solucionadores de recorrência linear.
**Matemática**: Cobre tópicos de teoria dos números, incluindo o Teorema Chinês do Resto, crivos de primos, função totiente de Euler, algoritmo estendido de Euclides, MDC e Transformada Rápida de Fourier.
O projeto usa Bazel como sistema de build (exigindo JDK 8+), com instruções claras para executar algoritmos individuais ou a suíte de testes completa. Muitas implementações incluem explicações em vídeo complementares no canal do YouTube William Fiset, tornando-o acessível para aprendizes visuais. Cada entrada de algoritmo normalmente inclui sua complexidade de tempo, e o código é organizado por tópico com convenções de nomenclatura consistentes. O repositório é licenciado sob MIT e inclui selos de CI/CD para testes Bazel e verificação de URL do README.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.