La sous-structure optimale en défaut, sur un exemple de cinq arêtes
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 17 — Programmation dynamique
Énoncé
Le chapitre affirme que la sous-structure optimale est fausse pour les plus longs chemins simples. Construire le plus petit contre-exemple qu'on puisse dessiner, et dire ce qui casse exactement.
Corrigé
Quatre sommets, cinq arêtes non orientées : , , , et .
Énumération complète des chemins simples (aucun sommet répété), longueur en nombre d'arêtes :
plus long chemin simple 0 -> 2 : 3 aretes, 0-1-3-2 (et 0-3-1-2)
plus long chemin simple 0 -> 1 : 3 aretes, 0-3-2-1
Ce qui casse. Le plus long chemin simple de à est . Son préfixe de à est le chemin , de longueur . Or le plus long chemin simple de à est , de longueur . Un sous-chemin d'un plus long chemin simple n'est donc pas un plus long chemin simple : la sous-structure optimale est en défaut, et sur quatre sommets.
Pire : on ne peut pas non plus recoller. Le plus long () et le plus long () ne se composent pas — leur concaténation repasse par , et , et n'est plus un chemin simple.
La leçon, et elle est générale. La contrainte « simple » est globale : elle porte sur le chemin entier, pas sur ses morceaux. Or la programmation dynamique suppose que le sous-problème se pose indépendamment du reste. C'est cette indépendance qui manque, et c'est pourquoi aucune récurrence sur « le plus long chemin de à » ne peut être correcte. Pour la rendre correcte, il faudrait mettre l'ensemble des sommets déjà visités dans l'état — ce qui donne sous-problèmes, et c'est exactement l'idée du dernier problème de ce chapitre, sur le voyageur de commerce. La sous-structure ne s'obtient qu'en payant l'exponentielle.
Pour les plus courts chemins, au contraire, aucune contrainte globale n'intervient : un sous-chemin d'un plus court chemin est un plus court chemin (chapitre chap:parcours), et tout fonctionne.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.