Programmation dynamique
1. Introduction La programmation dynamique est un paradigme de conception qu’il est possible de voir comme une amélioration ou une adaptation de la méthode diviser et régner. Ce concept a été introduit par Bellman, dans les années 50, pour résoudre typiquement des problème d’optimisation. Pour la petite histoire, Bellman a choisi le terme programmation dynamique dans un souci de communication : son supérieur ne supportait ni le mot « recherche » ni celui de « mathématique ». Alors il lui a semblé que les termes « programmation » et « dynamique » donnaient une apparence qui plairait à son supérieur. En réalité, le terme programmation signifiait à l’époque plus planification et ordonnancement que la programmation au sens qu’on lui donne de nos jours. En un mot, la programmation dynamique est un ensemble de règles que tout un chacun peut suivre pour résoudre un problème donné. La programmation dynamique est similaire à la méthode diviser et régner en ce sens que, une solution d’un problème dépend des solutions précédentes obtenues des sous-problèmes. La différence significative entre ces deux méthodes est que la programmation dynamique permet aux sous-problemes de se superposer. Autrement dit, un sous-problèmes peut être utilisé dans la solution de deux sous-problèmes différents. Tandis que l’approche diviser et régner crée des sous-problèmes qui sont complètement séparés et peuvent être résolus indépendamment l’un de l’autre. Une illustration de cette différence est montrée par la Figure 5.1. Dans cette figure, le problème à résoudre est à la racine, et les descendants sont les sous-problèmes, plus faciles à résoudre. Les feuilles de ce graphe constituent des sous-problèmes dont la résolution est triviale. Dans la programmation dynamique, ces feuilles constituent souvent les données de l’algorithme. La différence fondamentale entre ces deux méthodes devient alors claire: les sous-problèmes dans la programmation dynamique