Compris ! Pour aligner votre index des 100 codes essentiels sur les besoins des entretiens FAANG tout en conservant la structure des dossiers sous push_swap/codes/
, nous allons réorganiser les sections d à k pour mieux correspondre aux Structures de Données et Algorithmes (DSA) essentiels. Cette approche suit le principe 80/20, se concentrant sur les 20% des sujets qui couvrent 80% des besoins des entretiens FAANG, similaire à ce que propose GeeksforGeeks.
Voici la version révisée de votre index :
Top 100 Codes à Connaître
Pour faciliter votre apprentissage et votre préparation aux entretiens FAANG, voici une liste des 100 codes essentiels organisés par catégorie. Chaque élément est lié à une page Obsidian correspondante pour une navigation aisée.
a. Structures de Données
- Créer un nœud de liste chaînée (01-create-node.c)
- Insérer en tête de liste chaînée (02-insert-head.c
- Insérer en fin de liste chaînée (03-insert-tail.c)
- Supprimer le premier élément (04-delete-head.c)
- Supprimer un élément spécifique (05-delete-node.c)
- Rechercher un élément (06-search-node.c)
- Créer une pile (stack) (07-create-stack.c)
- Push and pop d’une pile (09-stack-pop.c)
- Créer une file (queue) (10-create-queue.c)
- Enqueue dans une file (11-queue-enqueue.c)
- Dequeue d’une file (12-queue-dequeue.c)
- Créer un arbre binaire (13-create-binary-tree.c)
- Rechercher dans un arbre binaire (15-binary-tree-search.c)
- Traversée in-order (16-binary-tree-inorder.c)
- Traversée pre-order (17-binary-tree-preorder.c)
- Traversée post-order (18-binary-tree-postorder.c)
- Créer un graphe (19-create-graph.c)
- Ajouter une arête dans un graphe 20-add-edge.c)
- Implémenter une table de hachage (21-hash-table.c)
- Insérer dans une table de hachage (22-hash-insert.c)
- Rechercher dans une table de hachage (23-hash-search.c)
- Supprimer dans une table de hachage (24-hash-delete.c)
- Créer une liste doublement chaînée (25-doubly-linked-list.c)
b. Algorithmes de Tri
- Tri par Insertion (26-insertion-sort.c)
- Tri Rapide (Quick Sort) (27-quick-sort.c)
- Tri par Fusion (Merge Sort) (28-merge-sort.c)
- Tri par Radix (Radix Sort) (29-radix-sort.c)
- Tri Bulle (Bubble Sort) (30-bubble-sort.c)
- Partitionnement pour Quick Sort (31-quick-partition.c)
- Fusionner deux listes pour Merge Sort (32-merge.c)
- Compter les bits pour Radix Sort (33-count-bits.c)
- Optimisation du Tri par Radix (34-radix-optimization.c)
c. Techniques Algorithmiques
- Recherche Binaire (35-binary-search.c)
- Algorithme BFS (Breadth-First Search) (36-bfs.c)
- Algorithme DFS (Depth-First Search) (37-dfs.c)
- Algorithme Dijkstra (38-dijkstra.c)
- Algorithme A* (39-a-star.c)
- Programmation Dynamique (40-dynamic-programming.c)
- Manipulation des Bits (41-bit-manipulation.c)
- Gestion des Pointeurs (42-pointer-management.c)
- Recursion Basique (43-recursion-basic.c)
- Recursion Avancée (44-recursion-advanced.c)
- Analyse de la Complexité Temporelle (45-time-complexity.c)
- Analyse de la Complexité Spatiale (46-space-complexity.c)
d. Structures de Données Avancées pour FAANG
- Tableaux Dynamiques (Dynamic Arrays) (47-dynamic-arrays.c)
- Heaps (Min Heap et Max Heap) (48-heap.c)
- Trie (Arbre Préfixe) (49-trie.c)
- Union-Find (Disjoint Set) (50-union-find.c)
- Segment Trees (51-segment-tree.c)
- Fenwick Trees (Binary Indexed Trees) (52-fenwick-tree.c)
- Skip Lists (53-skip-list.c)
- Bloom Filters (54-bloom-filter.c)
- Suffix Trees (55-suffix-tree.c)
- K-d Trees (56-kd-tree.c)
- B-Trees (57-b-tree.c)
- Red-Black Trees (58-red-black-tree.c)
- AVL Trees (59-avl-tree.c)
- Hash Tables avec Résolution de Collisions (60-hash-table-collisions.c)
- Bloom Filters Avancés (61-bloom-filter-advanced.c)
- Gestion des Indices pour Radix Sort (62-index-management.c)
- Arbres N-aires (63-n-ary-trees.c)
- Graphes Pondérés (64-weighted-graphs.c)
- Graphes Dirigés (65-directed-graphs.c)
e. Algorithmes de Recherche et Optimisation
- Recherche de Mot dans un Texte (KMP) (66-kmp.c)
- Algorithme de Rabin-Karp (67-rabin-karp.c)
- Recherche de Mot avec Trie (68-trie-search.c)
- Algorithme de Boyer-Moore (69-boyer-moore.c)
- Algorithme de Floyd pour Détection de Cycle (70-floyd-cycle.c)
- Problème des N-Reines (71-n-queens.c)
- Problème du Voyageur de Commerce (TSP) (72-tsp.c)
- Problème de la Sac à Dos (Knapsack) (73-knapsack.c)
- Problème des Chemins les Plus Courts (74-shortest-path.c)
- Problème de la Plus Longue Sous-Séquence Croissante (LIS) (75-lis.c)
- Problème des Parenthèses Valides (76-valid-parentheses.c)
- Problème de la Plus Grande Somme Contiguë (Kadane) (77-kadane.c)
- Problème des Paires de Somme Ciblée (78-two-sum.c)
- Problème de l’Anagramme (79-anagram.c)
- Problème du Sous-Tableau Maximum (80-maximum-subarray.c)
f. Algorithmes de Graphes Avancés
- Algorithme de Ford-Fulkerson pour le Flux Maximum (81-ford-fulkerson.c)
- Algorithme de Tarjan pour les Composantes Fortement Connexes (82-tarjan-cc.c)
- Algorithme de Kosaraju pour les Composantes Fortement Connexes (83-kosaraju-cc.c)
- Algorithme de Prim Optimisé avec Heaps de Fibonacci (84-prim-fibonacci.c)
- Algorithme de Johnson pour les Chemins les Plus Courts (85-johnson-shortest-path.c)
- Topological Sorting (86-topological-sort.c)
- Détection de Cycles dans un Graphe (87-cycle-detection.c)
- Algorithme de Bellman-Ford (88-bellman-ford.c)
- Algorithme de Floyd-Warshall (89-floyd-warshall.c)
- Algorithme A Optimisé* (90-a-star-optimized.c)
g. Programmation Dynamique et Greedy
- Programmation Dynamique Avancée (91-advanced-dp.c)
- Memoization avec Structures de Données (92-memoization-structures.c)
- Algorithmes Gloutons (Greedy Algorithms) (93-greedy-algorithms.c)
- Optimisation de l’Espace et du Temps (94-space-time-optimization.c)
- Techniques de Pruning Avancées (95-advanced-pruning.c)
- Optimisation de la Mémoire (96-memory-optimization.c)
- Optimisation des Rotations et Reverse Rotations (97-rotation-optimization.c)
- Minimisation des Opérations de Swap (98-minimize-swap.c)
- Optimisation des Séquences d’Opérations Simultanées (99-optimize-simultaneous.c)
- Algorithme de Tri Hybride (100-hybrid-sort.c)