Numérique et sciences informatiques (spécialité) · TerminaleBac
Quiz de programmation dynamique : entraînement de Terminale NSI
Publié le 7 novembre 2026 · Mis à jour le 7 novembre 2026 · Signaler une erreur
L'essentiel
- La programmation dynamique résout un problème en le décomposant en sous-problèmes, résolus des plus petits aux plus grands, en mémorisant les résultats intermédiaires 6.
- Elle devient utile quand les mêmes sous-problèmes reviennent plusieurs fois, ce qui rend la méthode diviser pour régner inefficace 6.
- Le travail consiste à définir les sous-problèmes, trouver la relation de récurrence, puis écrire l'algorithme en méthode ascendante ou descendante 64.
- Ce quiz couvre le vocabulaire, le principe d'optimalité, l'exemple de Fibonacci, le rendu de monnaie et le sac à dos.
Avant de commencer
Ce quiz t'entraîne sur la programmation dynamique, chapitre d'algorithmique de la spécialité NSI en Terminale 1. Il suit le cours sur la méthode diviser pour régner et le tri fusion : tu y retrouveras l'idée de découper un problème, mais avec une différence décisive que les questions vont te faire manipuler.
Les questions couvrent plusieurs thèmes : l'idée générale et son histoire 6, la comparaison avec diviser pour régner 6, l'exemple de la suite de Fibonacci 6, le problème du rendu de monnaie 2 et les applications classiques comme le sac à dos 6. Certaines demandent un calcul : fais-le sur papier, avec un tableau, avant de répondre.
Quiz
16 questions · correction immédiate · ton score reste sur ton appareil.
-
La programmation dynamique consiste à décomposer le problème en sous-problèmes, à les résoudre du plus petit au plus grand et à conserver les résultats intermédiaires 6. Le parcours exhaustif sans mémoire est l'inverse de l'idée. La dichotomie suppose des données triées et ne concerne pas cette méthode. Et la récursivité seule ne suffit pas : sans mémorisation, on peut recalculer les mêmes choses des milliers de fois.
-
C'est exact : le concept date du début des années 1950, il est dû à Richard Bellman, et « programmation » avait alors le sens de planification et d'ordonnancement 6. L'erreur tentante est de croire que le terme renvoie à l'écriture de code informatique, ce qui est un contresens historique.
-
La méthode diviser pour régner est inefficace quand on doit résoudre plusieurs fois le même sous-problème 6. Pour Fibonacci, le calcul de appelle et , mais appelle lui aussi : ce terme est recalculé. Le problème ne vient ni de la parité de , ni de la boucle, ni du nombre de morceaux.
-
On construit les termes un par un, comme le fait une méthode ascendante : , , , , , . L'erreur fréquente est de s'arrêter un rang trop tôt (8) ou trop tard (21) en se trompant dans le décalage : rappelle-toi que et sont les deux premiers termes, donc est le huitième de la liste.
-
Note le nombre d'appels : et . On obtient , , , . Pour calculer seulement six valeurs ( à ), la version naïve fait 15 appels : c'est le gaspillage que la mémorisation supprime. Répondre 6 serait oublier que les sous-problèmes sont recalculés.
-
Chaque terme de à demande exactement une addition, soit additions. L'erreur tentante est de répondre 10 ou 11 en comptant et , qui sont des valeurs de départ et ne coûtent aucune addition. Comparé aux appels de la version naïve, le gain est considérable.
-
Le paradigme consiste à définir des sous-problèmes, écrire une relation de récurrence, puis donner un algorithme en méthode ascendante ou descendante 6 ; côté ressources de cours, on retrouve la même consigne : trouver la relation, c'est-à-dire écrire la formule de récurrence 4. Trier les données n'est pas une étape générale de la méthode : certains problèmes n'ont aucun tri à faire.
-
C'est faux. Ce sont les algorithmes diviser pour régner qui partitionnent le problème en sous-problèmes indépendants, résolus récursivement puis combinés 6. La programmation dynamique, elle, sert justement quand des sous-problèmes se répètent ou se recoupent, ce qui impose de mémoriser leurs résultats. Confondre les deux méthodes est l'erreur la plus courante sur ce chapitre.
-
Les deux approches se ressemblent beaucoup : chacune évite de refaire un calcul dont on possède déjà le résultat 5. En pratique, la mémoïsation garde en mémoire (dans un dictionnaire par exemple) les résultats d'une fonction récursive, ce qui correspond à une approche descendante ; la méthode ascendante remplit un tableau du plus petit au plus grand sous-problème 6. Dire qu'elles sont « identiques » est trop fort, et dire que la mémoïsation interdit la récursivité est faux.
-
Cette ligne figure dans le programme récursif d'une ressource Éduscol sur la programmation dynamique 2. Elle exprime la récurrence : le nombre minimal de pièces pour
sommeest le minimum, sur chaque piècex, de le nombre minimal poursomme - x. Ce n'est pas une stratégie gloutonne : lemincompare toutes les possibilités, il ne se contente pas de la plus grande pièce. -
Note le minimum pour la somme : , , , , , (4+1), puis (3+3). L'erreur tentante est de répondre 3 en prenant d'abord la plus grande pièce : 4 + 1 + 1 donne bien 6, mais avec trois pièces.
-
C'est faux. Pour la somme 6, le glouton prend 4, puis 1, puis 1, soit trois pièces, alors que la solution optimale est 3 + 3, soit deux pièces. La programmation dynamique, qui compare toutes les décompositions grâce à la récurrence, trouve l'optimum. Cet exemple est construit pour illustrer le principe d'optimalité : combiner des solutions optimales de sous-problèmes 6 impose d'examiner tous les choix, pas seulement le premier qui paraît bon.
-
Le sac à dos est un problème classique de recherche opérationnelle, NP-difficile, mais résolu de manière pseudo-polynomiale par un algorithme de programmation dynamique 6. Dans ce problème, on dispose de objets, chacun avec un poids et une valeur 4. « Impossible » est donc faux : la méthode fonctionne, son coût dépend simplement de la capacité du sac et pas seulement du nombre d'objets.
-
Les ressources Éduscol montrent qu'on peut réécrire un programme de programmation dynamique en n'utilisant qu'une ligne de mémoire pour le tableau 2. Pour Fibonacci, la relation 6 montre que seuls les deux derniers termes servent : deux variables suffisent. Recalculer depuis le début ferait perdre le bénéfice de la mémorisation, et doubler le tableau ne réduit rien.
-
Dans l'exemple du rendu de monnaie, l'instruction
g[s] = s - xretient d'où l'on vient 2. Le premier tableau donne le nombre minimal de pièces ; ce second tableau permet de remonter le chemin et de retrouver quelles pièces composent la solution. Il ne remplace pas la récurrence, qui reste nécessaire pour remplir le premier tableau. -
La recherche de la plus longue sous-chaîne commune est abordée avec la programmation dynamique dans une ressource Éduscol 2. Le sac à dos est résolu de manière pseudo-polynomiale de cette façon, et la méthode la plus utilisée pour la détection de ruptures est elle aussi la programmation dynamique 6. Une simple addition n'a aucun sous-problème qui se répète : aucun intérêt à mémoriser.
Les questions qu'on se pose
Quelle différence entre programmation dynamique et diviser pour régner ?
Les deux méthodes combinent des solutions de sous-problèmes. Mais diviser pour régner partitionne le problème en sous-problèmes indépendants, et devient inefficace si le même sous-problème est résolu plusieurs fois 6. La programmation dynamique mémorise les résultats intermédiaires pour ne les calculer qu'une fois 6. Pour savoir laquelle choisir, demande-toi : « mes sous-problèmes se répètent-ils ? »
Comment savoir si un problème relève de la programmation dynamique ?
Cherche d'abord une relation de récurrence exprimant la solution à partir de solutions de sous-problèmes plus petits 4. Si ces sous-problèmes reviennent plusieurs fois dans le calcul, et si une solution optimale se construit à partir de solutions optimales des sous-problèmes (principe d'optimalité de Bellman 6), la méthode s'applique. Fibonacci et le rendu de monnaie sont de bons modèles à garder en tête.
Faut-il choisir la méthode ascendante ou descendante au bac ?
Les deux sont acceptables : le paradigme demande de donner un algorithme en méthode ascendante ou descendante 6. La méthode ascendante remplit un tableau des petits aux grands sous-problèmes ; la descendante est une récursion qui mémorise ses résultats. Choisis celle dont tu maîtrises le mieux les indices, et justifie toujours la récurrence sur laquelle ton programme repose.
Sources
Programme visé : Programme de l'enseignement de spécialité de numérique et sciences informatiques de la classe terminale de la voie générale · Bulletin officiel de l'Éducation nationale
- Programme de l'enseignement de spécialité de numérique et sciences informatiques de la classe terminale de la voie générale, Bulletin officiel de l'Éducation nationale. Consulté le 7 novembre 2026.
- Ressource Éduscol - Programmation dynamique (Terminale NSI), eduscol.education.gouv.fr. Consulté le 7 novembre 2026.
- Programmes et ressources en numérique et sciences informatiques - voie générale, eduscol.education.gouv.fr. Consulté le 7 novembre 2026.
- Recherche Opérationnelle - Programmation Dynamique, CNRS (Université Lyon). Consulté le 7 novembre 2026.
- Programmation dynamique et mémoïsation, CNRS. Consulté le 7 novembre 2026.
- Programmation dynamique, Wikipédia. Consulté le 7 novembre 2026.
Les numéros dans le texte renvoient à ces sources. Une source qui ne dit pas ce qu'on lui fait dire ? Signale-le.