Aller au contenu
studuel

NSI · Terminale · Algorithmique

Programmation dynamique

Ne jamais calculer deux fois la même chose.

En bref

La programmation dynamique s’applique aux problèmes dont les sous-problèmes se recouvrent : les mêmes calculs y reviennent un grand nombre de fois.

La programmation dynamique s’applique aux problèmes dont les sous-problèmes se recouvrent : les mêmes calculs y reviennent un grand nombre de fois. L’idée est de les mémoriser.

Les deux conditions

ConditionCe qu’elle signifie
Sous-structure optimaleLa solution optimale se construit à partir des solutions optimales des sous-problèmes
Chevauchement des sous-problèmesLes mêmes sous-problèmes réapparaissent

Si la première seule est vérifiée, diviser pour régner suffit. C’est la seconde qui justifie la programmation dynamique.

Les deux façons de faire

Descendante (mémoïsation)Ascendante (tabulation)
L’écritureOn garde la récursivité naturelleOn remplit un tableau, sans récursivité
Le mécanismeRanger chaque résultat dans un dictionnaire avant de le renvoyerAller des plus petits sous-problèmes vers les plus grands
L’avantageLe code change à peinePlus rapide, aucun risque de dépassement de pile
La contrainteLa pile reste limitéeIl faut déterminer soi-même le bon ordre de remplissage

L’exemple de Fibonacci

VersionCoûtAppels pour le 30ᵉ terme
NaïveExponentielplus d’un million
Avec mémoïsationLinéairetrente

Le même algorithme, plus un dictionnaire, change de classe de complexité. C’est l’illustration la plus nette du chapitre.

Le rendu de monnaie

Rendre une somme avec le moins de pièces possible.

MéthodeSon résultat
L’algorithme gloutonOptimal avec le système européen, mais il échoue ailleurs
La programmation dynamiqueToujours l’optimum

Avec des pièces de 1, 3 et 4, rendre 6 : le glouton donne 4 + 1 + 1 (trois pièces) au lieu de 3 + 3 (deux).

La méthode dynamique calcule le nombre minimal de pièces pour chaque somme de 0 jusqu’à la somme visée, en réutilisant les résultats précédents.

Deux autres problèmes classiques

Le sac à dos — choisir des objets de valeurs et de poids donnés sans dépasser une capacité — et l’alignement de séquences en bio-informatique se traitent de la même façon, par un tableau à deux dimensions.

Le compromis

On échange de la mémoire contre du temps. Un tableau de taille n coûte de la place, mais évite un nombre exponentiel de recalculs.

Le signal à repérer : dans l’arbre des appels récursifs, le même argument revient plusieurs fois. Dès qu’on le voit, un dictionnaire suffit.

Teste-toi

6 questions pour vérifier

Touche une réponse : la correction s’affiche tout de suite.

  1. 1.Quelles sont les deux conditions d’application de la programmation dynamique ?

  2. 2.Qu’est-ce que la mémoïsation ?

  3. 3.Quelle est l’approche ascendante de la programmation dynamique ?

  4. 4.Quel est le coût de Fibonacci calculé avec mémoïsation ?

  5. 5.L’algorithme glouton donne toujours l’optimum pour le rendu de monnaie.

  6. 6.Que troque-t-on en programmation dynamique ?

0 / 6 questions

Dans l’app, ce chapitre a son quiz complet, chronométré, et tes erreurs reviennent au bon moment pour ne plus les refaire.

Continuer dans l’app
Aperçu flouté de la fiche de révision

La fiche de révision, sur une page

Tout « Prog. dynamique » sur une seule page A4 illustrée : l’essentiel, les pièges et un mini-test. Elle se débloque dans l’app avec des gemmes — et ton compte gratuit en offre assez pour tes trois premières fiches.

Débloquer la fiche dans l’app

Dans le même thème

NSI en terminale : passe à l’entraînement.

Le quiz complet, les exercices corrigés, les duels contre des élèves de ton niveau et un coach IA qui t’explique ce qui bloque.

Commencer gratuitement