📘 Fiche de cours
L'essentiel du cours
La programmation dynamique (PD) est une méthode algorithmique utilisée pour résoudre des problèmes d'optimisation en décomposant le problème en sous-problèmes plus simples. Contrairement à "diviser pour régner", la PD s'applique quand les sous-problèmes se chevauchent (sont calculés plusieurs fois). Deux conditions nécessaires :
- Sous-structure optimale : La solution optimale du problème global contient les solutions optimales des sous-problèmes.
- Sous-problèmes chevauchants : Les mêmes sous-problèmes sont résolus de manière répétée.
Méthodes à maîtriser
- Approche Top-Down (Mémoïsation) : On utilise la récursivité et on stocke le résultat dans un tableau (ou dictionnaire) dès qu'il est calculé.
- Approche Bottom-Up (Tabulation) : On remplit un tableau de manière itérative, en commençant par les cas de base jusqu'à atteindre la solution finale.
Exemples corrigés
Exemple : Suite de Fibonacci
- Récursif simple : $F(n) = F(n-1) + F(n-2)$ avec $F(0)=0, F(1)=1$. Complexité $O(2^n)$.
- PD (Tabulation) : Créer un tableau
Tde taille $n+1$.T[0]=0; T[1]=1; pour i de 2 à n: T[i] = T[i-1] + T[i-2]. Complexité $O(n)$.
Erreurs fréquentes
- Oublier d'initialiser le tableau de mémoïsation (ex: mettre -1 pour indiquer "non calculé").
- Confondre PD et algorithme glouton (le glouton ne garantit pas l'optimalité globale).
- Ne pas définir correctement l'état de la récurrence.