Programme

NSI (Spé) — Algorithmique

Programmation dynamique et recherche textuelle

Principe de la programmation dynamique, mémoïsation, exemples classiques, algorithme de recherche textuelle naïve

Résumé synthétiqueFiche en 4 sectionsQuiz de 10 questionsGratuit, sans pub

Résumé

Calculer fib(50) naïvement peut prendre… des minutes, alors que la valeur tient en un instant : le programme recalcule sans cesse les mêmes choses. La programmation dynamique corrige ce gaspillage. Son idée : découper un problème en sous-problèmes qui se chevauchent, puis mémoriser chaque résultat pour ne le calculer qu'une fois. Sur Fibonacci, on passe ainsi de $O(2^n)$ (exponentiel, ingérable) à $O(n)$ (linéaire). Deux variantes : top-down (récursif + mémoïsation) et bottom-up (itératif, on remplit un tableau). Le rendu de monnaie illustre qu'une approche gloutonne peut échouer là où la programmation dynamique trouve l'optimum. On termine par la recherche textuelle : repérer un motif dans un texte, en $O(n \times m)$ pour la méthode naïve.

S'entraîner

Ce thème dans une autre classe

Questions fréquentes

Les points clés à retenir sur Programmation dynamique et recherche textuelle, extraits du quiz de révision.

La programmation dynamique s'applique quand les sous-problèmes :
Réponse :
Se chevauchent (les mêmes apparaissent plusieurs fois)
La programmation dynamique est utile quand les sous-problèmes se chevauchent : les mêmes calculs reviennent plusieurs fois. La mémoïsation évite de les refaire.
Quelle est la complexité du calcul récursif naïf de Fibonacci ?
Réponse :
O(2ⁿ)
L'appel récursif naïf de fib(n) engendre un arbre d'appels de taille exponentielle O(2ⁿ), car fib(n) appelle fib(n-1) et fib(n-2), et ces appels se dédoublent.
La mémoïsation consiste à :
Réponse :
Stocker les résultats déjà calculés pour ne pas les recalculer
La mémoïsation stocke les résultats des sous-problèmes dans une structure (dictionnaire, tableau) pour les réutiliser directement si le même sous-problème se présente.
Avec la mémoïsation, quelle est la complexité du calcul de fib(n) ?
Réponse :
O(n)
Avec la mémoïsation, chaque valeur fib(k) n'est calculée qu'une seule fois et stockée. Il y a n valeurs à calculer, d'où une complexité O(n).