Introduction à la programmation dynamique

La programmation dynamique, à ne pas confondre avec la programmation dynamique de la mémoire, qui implique l’utilisation de new et malloc pour créer et détruire à volonté des variables dans la mémoire dynamique. La programmation dynamique quant à elle est dans un niveau d’abstraction plus élevé, ça veut dire que le langage de programmation choisi ou la manière d’implémenter les programmes ça relève du détail et ce n’est plus si important, mais c’est plutôt la manière de résoudre les problèmes qui compte. La programmation dynamique a une réputation d’être difficile à apprendre et à enseigner, d’ailleurs il vaut mieux bien maîtriser les techniques de programmation dans un langage donné pour se lancer dans celle-ci, et même dans les cursus d’enseignement en informatique celle-ci est généralement enseignée en deuxième cycle, s’assurant que l’étudiant a une maîtrise approfondie des techniques de programmation. La vidéo en bas donne une bonne introduction et explication de ce qu’est précisément la programmation dynamique.

Introduction à la programmation dynamique

L’exemple typique pour faire apprendre la programmation dynamique est sans doute la célèbre suite de Fibonacci, et à partir de la vidéo on peut voir que cette suite est utilisée pour nous donner une idée globale de ce qu’est la programmation dynamique, l’idée est que la programmation dynamique est une manière d’optimiser l’exécution d’un programme pour une famille de problèmes bien particulaire, des problèmes qui sont généralement de nature récursive, dans lesquels il existerait de la répétition dans le calcul si la récursivité est faite d’une manière cru et sans optimisation. Deux techniques sont utilisées dans la programmation dynamique, qui sont la méthode de haut en bas et la méthode de bas en haut. Il existe aussi un bon article sur le sujet (voici son lien) qui donne une bonne introduction sur le domaine. Il est aussi important de rappeler que toujours la même règle qui s’applique pour l’apprentissage de n’importe quelle discipline réputée difficile, c’est de s’exercer et de faire beaucoup d’exercices.

La récursivité comme solution pour le jeu du Sudoku

Le jeu du Sudoku est un jeu de puzzle populaire sur certains journaux et magazines, il est représenté sur l’image en bas, globalement il se constitue d’une grille de 9×9 cases partiellement remplies par des chiffres de 1 à 9, la grille est aussi subdivisée en 3×3 carré de 3×3 chiffres, le joueur doit remplir le reste des cases vides restantes en respectant la règle qu’il ne doit pas y avoir de répétition d’un chiffre sur une colonne, sur une ligne ou sur le carré 3×3.

Une grille vide de Sudoku

Les règles sont simples mais le casse-tête demande beaucoup de temps à l’humain pour le résoudre, et pourtant c’est déconcertant comment un programme d’une poignée de lignes de code arrive à résoudre le problème sur ordinateur en une fraction de seconde, dans la vidéo qui suit l’enseignant s’exulte de la magie de la récursivité, et c’est d’autant plus vrai que la récursivité est une technique de programmation réputée difficile à apprendre mais très efficace une fois maîtrisée. Il n’était par rare dans les examens d’algorithmique que j’ai eu à corriger de tomber sur des problèmes difficiles à résoudre par les méthodes conventionnelles (par boucles et tests) alors qu’ils devenaient très simples en récursivité.

résoudre le sudoku par récursivité