Cours : Algorithmique avancée
📌 1. Définitions & Cadre d’étude
Section titled “📌 1. Définitions & Cadre d’étude”L’algorithmique avancée en classe préparatoire MP2I/MPI formalise l’étude de la complexité, de la calculabilité et des paradigmes de conception et d’analyse des algorithmes.
Modèle de calcul
Section titled “Modèle de calcul”Le modèle de référence est la Machine à Accès Aléatoire (RAM, Random Access Machine). Dans ce modèle :
- Les instructions élémentaires (affectations, opérations arithmétiques de base, comparaisons, accès mémoire indexé) s’exécutent en temps constant .
- La taille de la mémoire est supposée infinie, mais chaque mot mémoire possède une taille bornée (ou l’on comptabilise le coût binaire des opérations en fonction de la taille des opérandes dans le cadre de la complexité en bits).
Complexité en temps et en espace
Section titled “Complexité en temps et en espace”Soit un algorithme et la taille de l’entrée.
- Complexité au pire : .
- Complexité en moyenne : .
- Complexité amortie : Sur une suite de opérations, le coût total est divisé par pour obtenir le coût moyen par opération, indépendamment de la configuration initiale (méthode des potentialités ou de l’agrégat).
Notations asymptotiques
Section titled “Notations asymptotiques”Soit et deux fonctions de dans \mathbb{R}^^+ :
📐 2. Théorèmes fondamentaux & Démonstrations clés
Section titled “📐 2. Théorèmes fondamentaux & Démonstrations clés”Théorème Maître (Master Theorem)
Section titled “Théorème Maître (Master Theorem)”Le théorème maître permet de déterminer immédiatement la complexité asymptotique des algorithmes récursifs divisant le problème en sous-problèmes de taille égale.
Énoncé : Soit et des constantes, et . Soit une fonction définie sur les entiers par la relation de récurrence : où désigne soit , soit . On pose l’exposant critique. Alors :
- Si , alors .
- Si :
- Si , alors .
- Si , alors .
- Si , alors .
- Si , alors .
Démonstration : Arbre de récurrence (Cas )
Section titled “Démonstration : Arbre de récurrence (Cas k=0k = 0k=0)”Objectif: * Établir rigoureusement le cas 1 du Théorème Maître (avec ), c’est-à-dire avec .
-
Construction de l’arbre : La racine de l’arbre représente le coût de la division et de la combinaison au premier niveau, soit . Ce problème se ramifie en sous-problèmes de taille .
- À la profondeur , il y a sous-problèmes, chacun de taille .
- Le coût total au niveau (pour ) est donc majoré par :
-
Sommation des coûts : Le coût total de l’algorithme est la somme des coûts sur toutes les profondeurs, de à , à laquelle s’ajoute le coût des feuilles (à la profondeur ) :
-
Évaluation de la série géométrique : Puisque , on a , soit r = . La raison de la série géométrique est strictement supérieure à . Le terme dominant est donc le dernier terme de la somme (niveau des feuilles) : \sum_{h=0}^{\log_b(n)-1} \left(\frac{a}{b^c}\right)^h = \frac{\left(\frac{a}{b^c}\right)^{\log_b(n)} - 1}{\frac{a}{b^c} - 1} = \Theta\left(\left(\frac{a}{b^c}\right)^{\log_b(n)}\sights)
-
Simplification finale : En utilisant la propriété : Par conséquent, le coût total de la somme est : Le nombre de feuilles est , ce qui correspond exactement à la même complexité. Conclusion: ** .
💡 3. Méthodes classiques de résolution
Section titled “💡 3. Méthodes classiques de résolution”Programmation dynamique
Section titled “Programmation dynamique”Utilisée pour les problèmes présentant une sous-structure optimale et des sous-problèmes qui se chevauchent.
- Approche descendante (Memoization) : Fonction récursive stockant les résultats intermédiaires dans une table de mémoïsation. Évite les recalculs redondants.
- Approche ascendante (Bottom-Up) : Remplissage itératif d’un tableau du cas de base vers le cas général.
- Exemples canoniques : Distance d’Édition (Levenshtein), Plus Longue Sous-Séquence Commune (LCS), Sac à dos (0/1).
Algorithmes gloutons (Greedy Algorithms)
Section titled “Algorithmes gloutons (Greedy Algorithms)”À chaque étape, on fait un choix localement optimal dans l’espoir d’atteindre un optimum global.
- Nécessite de prouver la propriété de choix glouton et la sous-structure optimale.
- Exemples canoniques : Code de Huffman, Algorithme de Dijkstra (plus courts chemins à poids positifs), Algorithme de Kruskal / Prim (arbres couvrant de poids minimal).
Algorithmes de graphes avancés
Section titled “Algorithmes de graphes avancés”- Parcours en largeur (BFS) / Profondeur (DFS) : Exploration linéaire .
- Flots maximaux : Algorithme de Ford-Fulkerson et méthode de Edmonds-Karp (basée sur un BFS, complexité ).
- Tarjan / Kosaraju : Identification des composantes fortement connexes en .
⚠️ 4. Pièges classiques aux Concours
Section titled “⚠️ 4. Pièges classiques aux Concours”-
Utiliser le Théorème Maître hors de ses hypothèses : Le théorème maître ne s’applique que si les sous-problèmes ont strictement la même taille . Si les tailles varient (ex: ), le théorème maître est inapplicable ; il faut recourir à l’arbre de récurrence, à la méthode de substitution ou au théorème d’Akra-Bazzi.
-
Confondre complexité au pire et complexité amortie : Affirmer qu’une structure de données (comme une table de hachage dynamique ou un Union-Find) effectue chaque opération en ou au pire est faux. Seule la complexité amortie est garantie. Une opération individuelle (worst-case) peut être en .
-
Piège des récursivités non-terminales et de la pile d’appels : En programmation fonctionnelle ou impérative, un algorithme récursif en en temps théorique peut mener à un dépassement de pile (Stack Overflow) si la profondeur de récursion atteint , consommant d’espace mémoire sur la pile d’exécution.
-
Approximation gloutonne et optimalité globale : Appliquer un algorithme glouton sans démonstration formelle de sa validité. De nombreux problèmes (comme le problème du sac à dos entier) sont NP-complets et les approches gloutonnes n’y garantissent pas l’optimalité globale.