À propos du projet
Ce dépôt est une collection organisée d'implémentations d'algorithmes et de structures de données écrites en Java, conçue pour démontrer des implémentations correctes et élégantes de techniques computationnelles courantes. Il sert à la fois de bibliothèque de référence et de ressource pédagogique pour les développeurs et les étudiants.
Le projet couvre une large gamme de sujets organisés en sections principales :
**Structures de données** : Inclut des arbres équilibrés (AVL, Rouge-Noir), des arbres binaires de recherche, des arbres splay, des tableaux dynamiques, des arbres de Fenwick, des tas de Fibonacci, des tables de hachage (avec plusieurs stratégies de résolution de collisions), des listes chaînées, des files de priorité (tas binaire, tas D, variantes indexées), des files, des arbres de segments, des tables creuses, des piles, des tableaux de suffixes, des tries et des structures union-find.
**Programmation dynamique** : Présente des problèmes classiques tels que le changement de pièces, la distance d'édition, les variantes du sac à dos, le sous-tableau contigu maximal, les sous-séquences communes/ croissantes/palindromiques les plus longues, le problème du voyageur de commerce et l'appariement parfait de poids minimal. Inclut également des exemples pratiques comme les problèmes de pavage et des défis ad hoc.
**Géométrie** : Couvre les opérations vectorielles 2D et 3D, les algorithmes d'intersection de cercles et de lignes, la paire de points la plus proche, la construction d'enveloppes convexes (Graham Scan et Monotone Chain), les calculs de surface et de contenance de polygones, les calculs de surface de triangles et les calculs de distance géographique.
**Théorie des graphes** : Une section substantielle incluant des algorithmes d'arbres (enracinement, isomorphisme, centre, diamètre, LCA), des algorithmes de flux réseau (Ford-Fulkerson, Edmonds-Karp, Dinic, mise à l'échelle de capacité, flux max à coût min), et des algorithmes de base tels que BFS, DFS, Dijkstra, Bellman-Ford, Floyd-Warshall, tri topologique, arbres couvrants minimaux (Kruskal, Prim, Boruvka), composantes fortement connexes (Tarjan, Kosaraju), points d'articulation, ponts et chemins eulériens.
**Algèbre linéaire** : Inclut l'élimination de Gauss, les opérations matricielles (déterminant, inverse, multiplication, puissance), l'algorithme de Freivald et les solveurs de récurrence linéaire.
**Mathématiques** : Couvre des sujets de théorie des nombres, notamment le théorème des restes chinois, les cribles de nombres premiers, la fonction indicatrice d'Euler, l'algorithme d'Euclide étendu, le PGCD et la transformée de Fourier rapide.
Le projet utilise Bazel comme système de build (nécessitant JDK 8+), avec des instructions claires pour exécuter des algorithmes individuels ou la suite de tests complète. De nombreuses implémentations incluent des explications vidéo associées sur la chaîne YouTube William Fiset, ce qui le rend accessible aux apprenants visuels. Chaque entrée d'algorithme inclut généralement sa complexité temporelle, et le code est organisé par sujet avec des conventions de nommage cohérentes. Le dépôt est sous licence MIT et inclut des badges CI/CD pour les tests Bazel et la vérification de l'URL du README.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.