Programmation Dynamique

Une technique puissante pour résoudre des problèmes complexes en les décomposant en sous-problèmes plus simples.

Qu'est-ce que la Programmation Dynamique ?

La programmation dynamique est une technique d'optimisation qui résout des problèmes complexes en les décomposant en sous-problèmes plus simples. Elle est particulièrement utile lorsque les sous-problèmes se chevauchent, c'est-à-dire lorsque la solution d'un sous-problème est utilisée plusieurs fois dans la résolution du problème global.

Caractéristiques principales

  • Sous-problèmes qui se chevauchent : Les mêmes sous-problèmes sont résolus plusieurs fois.
  • Sous-structure optimale : La solution optimale du problème contient les solutions optimales des sous-problèmes.
  • Mémorisation des résultats : Les résultats des sous-problèmes sont stockés pour éviter les recalculs.

Approches de la Programmation Dynamique

Mémoïsation

Concept

Stockage des résultats des sous-problèmes pour éviter les calculs redondants

Exemples courants :

  • Fibonacci
  • Coefficients binomiaux

Avantages :

  • Évite les calculs répétés
  • Approche descendante (top-down)
  • Calcule uniquement les sous-problèmes nécessaires

Tabulation

Concept

Construction de la solution de manière ascendante en remplissant un tableau

Exemples courants :

  • Sac à dos
  • Plus court chemin

Avantages :

  • Approche ascendante (bottom-up)
  • Pas de récursion
  • Meilleure utilisation du cache

Conseils d'Optimisation

1Identifiez les sous-problèmes qui se chevauchent

2Choisissez entre mémoïsation et tabulation selon le contexte

3Optimisez l'espace en réutilisant la mémoire quand possible

4Commencez par écrire la solution récursive avant d'optimiser