Adloun

informatique (MP2I/MPI) · Chapitre 17 · Exercice de TD

La sous-structure optimale en défaut, sur un exemple de cinq arêtes

Programmation dynamique · niveau 2

É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.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre