Probleme – Le voyageur de commerce métrique
Exercice · niveau 3 (difficile) · informatique (MP2I/MPI), chapitre 25 — Algorithmes probabilistes, approximation, séparation et évaluation
Énoncé
On cherche le plus court circuit passant une fois par chacune des villes. Les distances vérifient l'inégalité triangulaire : .
- Montrer que le poids d'un arbre couvrant minimal minore l'optimum.
- En déduire une -approximation.
- La mesurer.
- Que se passe-t-il sans l'inégalité triangulaire ?
Corrigé
1. La minoration. Soit un circuit optimal, de longueur . En lui retirant une arête, on obtient un chemin passant par tous les sommets : c'est en particulier un arbre couvrant. Son poids vaut moins la longueur de l'arête retirée, donc . Comme l'arbre couvrant minimal est le plus léger de tous :
Vérification : sur nuages de points euclidiens de à villes, l'optimum étant calculé par énumération de toutes les permutations, l'inégalité n'a été violée aucune fois.
C'est le patron annoncé par le chapitre : on n'a pas calculé l'optimum, on l'a minoré par une quantité qu'on sait calculer — ici l'arbre couvrant minimal du chapitre chap:unir.
2. L'algorithme. On construit l'arbre couvrant minimal, on le parcourt en profondeur, et l'on visite les villes dans l'ordre de première rencontre.
(* Tournee approchee du voyageur de commerce metrique.
Entrees : n villes, d.(i).(j) une distance verifiant l'inegalite triangulaire.
Sortie : une tournee de longueur au plus 2 fois l'optimum.
Complexite : O(n^2 log n) -- Kruskal sur le graphe complet. *)
let tournee n d =
let arbre = acm n d in (* Kruskal, chapitre 23 *)
let vu = Array.make n false and ordre = ref [] in
let rec descendre u =
vu.(u) <- true;
ordre := u :: !ordre; (* ordre PREFIXE : premiere visite *)
List.iter (fun v -> if not vu.(v) then descendre v) arbre.(u)
in
descendre 0;
Array.of_list (List.rev !ordre)
La preuve du facteur , en trois pas.
- Un parcours en profondeur qui emprunte chaque arête deux fois — une en descendant, une en remontant — visite toutes les villes et revient au départ. Sa longueur vaut exactement .
- La tournée rendue est obtenue à partir de ce parcours en sautant les villes déjà visitées : au lieu de , on va directement de à . L'inégalité triangulaire garantit : chaque saut raccourcit, ou du moins n'allonge pas.
- Donc .
C'est l'inégalité triangulaire qui fait le pas 2, et elle seule.
3. Les mesures, sur nuages de points tirés uniformément dans un carré, l'optimum étant calculé exactement :
| Rapport moyen | |
|---|---|
| Rapport le pire observé | |
| Garantie prouvée |
L'algorithme est bien meilleur que sa garantie : d'écart en moyenne, jamais plus de . C'est le sort habituel des approximations, et cela ne diminue en rien l'intérêt de la garantie — celle-ci vaut sur toute instance, y compris celles qu'on n'a pas tirées.
4. Sans l'inégalité triangulaire, tout s'effondre, et pas seulement cette approximation-là. Le pas 2 de la preuve tombe : sauter une ville peut coûter arbitrairement cher. Mais il y a bien pire — on démontre que si , aucun algorithme polynomial n'est une -approximation du voyageur de commerce général, pour aucune constante .
L'idée de cette impossibilité mérite d'être esquissée, car elle éclaire ce qu'est une approximation. Étant donné un graphe à sommets, posons si est une arête de , et sinon. Si a un cycle hamiltonien, l'optimum vaut ; sinon, il vaut au moins . Une -approximation distinguerait donc les deux cas, et résoudrait le problème du cycle hamiltonien, qui est np-complet.
La morale. L'inégalité triangulaire n'est pas une hypothèse technique : c'est ce qui sépare un problème approchable d'un problème qui ne l'est pas du tout. Une garantie d'approximation dépend autant du problème que de l'algorithme.
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.