La programmation dynamique est une méthode utilisée en informatique pour résoudre des problèmes complexes en les décomposant en sous-problèmes plus simples. Elle est particulièrement efficace pour les problèmes d'optimisation et les problèmes liés aux sous-problèmes qui se chevauchent et à la sous-structure optimale.

Techniques de programmation dynamique

Il existe deux approches principales de la programmation dynamique : la mise en haut et la mise en bas. L'approche de la mise en haut utilise la mémorisation pour stocker les résultats des sous-problèmes pendant la récursion, en évitant les calculs redondants. L'approche de la mise en bas construit des solutions itératives à partir des plus petits sous-problèmes, remplissant une table pour atteindre la réponse finale.

Calculs et mise en œuvre

La mise en oeuvre de la programmation dynamique nécessite la définition de l'état, qui représente un sous-problème, et de la transition, qui décrit comment calculer la solution pour un état à partir des états précédents. Typiquement, une table ou un tableau est utilisé pour stocker les résultats intermédiaires.

Cas d'utilisation courante

  • Les algorithmes de chemin les plus courts, comme Dijkstra , Floyd-Warshall
  • Variantes des problèmes de Knapsack
  • Alignement des séquences en bioinformatique
  • Arbres de recherche binaires optimaux
  • Problème de changement de pièce