Sobre el proyecto

Este repositorio es una colección seleccionada de implementaciones de algoritmos y estructuras de datos escritas en Java, diseñadas para demostrar implementaciones correctas y elegantes de técnicas computacionales comunes. Sirve como biblioteca de referencia y recurso educativo para desarrolladores y estudiantes. El proyecto cubre una amplia gama de temas organizados en secciones principales: Estructuras de datos: incluye árboles balanceados (AVL, Rojo-Negro), árboles de búsqueda binaria, árboles splay, arreglos dinámicos, árboles Fenwick, montículos de Fibonacci, tablas hash (con múltiples estrategias de resolución de colisiones), listas enlazadas, colas de prioridad (montículo binario, montículo D, variantes indexadas), colas, árboles de segmentos, tablas dispersas, pilas, arreglos de sufijos, tries y estructuras de unión-búsqueda. Programación dinámica: incluye problemas clásicos como cambio de moneda, distancia de edición, variantes de la mochila, subarreglo contiguo máximo, subsecuencias común más larga, creciente más larga y palíndroma más larga, problema del viajante y emparejamiento perfecto de peso mínimo. También incluye ejemplos prácticos como problemas de mosaicos y desafíos ad hoc. Geometría: cubre operaciones vectoriales 2D y 3D, algoritmos de intersección de círculos y líneas, par de puntos más cercano, construcción de cascos convexos (Graham Scan y Monotone Chain), área de polígonos y comprobaciones de contención, cálculo de áreas de triángulos y cálculos de distancia geográfica. Teoría de grafos: una sección sustancial que incluye algoritmos de árboles (enraizado, isomorfismo, centro, diámetro, LCA), algoritmos de flujo en redes (Ford-Fulkerson, Edmonds-Karp, Dinic's, escalado de capacidad, flujo máximo de costo mínimo) y algoritmos centrales como BFS, DFS, Dijkstra, Bellman-Ford, Floyd-Warshall, ordenamiento topológico, árboles de expansión mínima (Kruskal, Prim, Boruvka), componentes fuertemente conexos (Tarjan, Kosaraju), puntos de articulación, puentes y caminos eulerianos. Álgebra lineal: incluye eliminación gaussiana, operaciones con matrices (determinante, inversa, multiplicación, potencia), algoritmo de Freivald y solucionadores de recurrencias lineales. Matemáticas: cubre temas de teoría de números, incluido el teorema chino del resto, cribas de primos, función totiente de Euler, algoritmo extendido de Euclides, MCD y transformada rápida de Fourier. El proyecto utiliza Bazel como sistema de compilación (requiere JDK 8+), con instrucciones claras para ejecutar algoritmos individuales o la suite de pruebas completa. Muchas implementaciones incluyen explicaciones en video complementarias en el canal de YouTube de William Fiset, lo que lo hace accesible para aprendices visuales. Cada entrada de algoritmo generalmente incluye su complejidad temporal, y el código está organizado por tema con convenciones de nomenclatura consistentes. El repositorio está licenciado bajo MIT e incluye insignias de CI/CD para las pruebas de Bazel y la verificación de URL del README.