# Algorithme de Christofides

L'algorithme de Christofides est un algorithme d'approximation pour le problème du voyageur de commerce, dans le cas métrique, et que l'inégalité triangulaire est respectée. L'analyse de cet algorithme est due à Nicos Christofides and Anatoliy I. Serdyukov, qui l'ont découvert indépendamment en 1976$^,$$^,$.

## Problème du voyageur de commerce métrique

Le problème du voyageur de commerce (dans sa version optimisation) est le problème suivant : étant donné un ensemble de villes reliées entre elles par des routes, trouver l'itinéraire le plus court passant par chaque ville une et une seule fois. En termes de graphe, on cherche le cycle hamiltonien le plus court. C'est un problème d'optimisation NP-difficile classique.
Plusieurs cas particuliers ont été étudiés, notamment le cas dit « métrique » où les arêtes respectent l'inégalité triangulaire c'est-à-dire que pour tout triplet de sommet $u,v,w$, on a $w(u,v)+w(v,w)\geq w(u,w)$.

## Algorithme

Dans le cas général, cet algorithme est en fait une heuristique, cependant dans le cas métrique, on peut montrer que la solution est au plus 3/2 fois plus longue que l'optimal. On dit que le facteur d'approximation est de 3/2.
L'algorithme résout deux sous-problèmes considérés «faciles», car appartenant à la classe P : le problème de l'arbre couvrant de poids minimal et celui du couplage de poids minimum.

### Pseudo-code

En pseudo-code :
* Calculer un arbre couvrant de poids minimal $T$ de $G$ ;
* Soit $I$ l'ensemble des sommets de degré impair dans $T$, calculer un couplage parfait $M$ de poids minimum dans le sous-graphe induit par les sommets de $I$ ;
* On définit un multigraphe $H$ à partir des arêtes issues de $M$ et $T$ ;
* Trouver un cycle eulérien dans $H$ (H est eulérien car il est connexe et tous les sommets sont de degré pair) ;
* Transformer le cycle eulérien en un cycle hamiltonien en supprimant les éventuels passages en double sur certains sommets.

### Exemple

* Étant donné un graphe $G=\left(V,E\right)$ dont les poids respectent l'inégalité triangulaire.
* Calculer un arbre couvrant de poids minimum $T$.
* Calculer l'ensemble $I$ des sommets de degrés impairs dans $T$.
* Considérer le graphe induit par $I$ ($G|_{I}$).
* Calculer un couplage de poids minimum $M$ dans $G|_{I}$.
* Faire l'union du couplage et de l'arbre couvrant ($T\cup M$).
* Calculer le tour eulérien sur $T\cup M$ : (A-B-C-A-D-E-A).
* Enlever les sommets qui apparaissent deux fois : (A-B-C-D-E-A). Ce cycle est la sortie de l'algorithme.

### Facteur d'approximation dans le cas métrique

Soit $U$ le cycle hamiltonien de poids minimum, et $c(U)$ son poids.
L'arbre couvrant de poids minimum $T$ est de poids inférieur ou égal au poids de U (c'est-à-dire $c(T)\leq c(U)$), car en enlevant une arête au cycle on obtient un arbre couvrant.
Le couplage trouvé par l’algorithme est de poids inférieur ou égal à $0.5c(U)$. En effet, si on considère le cycle hamiltonien de poids minimum sur le sous graphe induit par les sommets de degré impair, on a un poids inférieur ou égal à $c(U)$ du fait de l'inégalité triangulaire, et en prenant une arête sur deux de ce cycle (qui est de longueur paire puisque constitué d'un nombre pair de sommets) on obtient un couplage qui est de poids inférieur à la moitié du poids du cycle (si ce n'est pas le cas on peut prendre le complémentaire).
D'où un poids final majoré par $c(T)+0,5c(U)\leq 3/2c(U)$ : noter que la transformation du cycle eulérien en cycle hamiltonien ne peut pas faire croître le poids grâce à l'inégalité triangulaire.

### Complexité de l'algorithme

L'algorithme a une complexité cubique.

## Variantes

Pour le problème du chemin hamiltonien (Path TSP), qui est la variante du problème du voyageur de commerce où un départ et une arrivée sont imposées, des variantes de l'algorithme de Christofides sont utilisées pour obtenir de bonnes approximations$^,$.

## Contexte et historique

Le problème dans le cas métrique est APX-difficile, même avec des poids 1 ou 2, ce qui empêche l'existence d'un schéma d'approximation en temps polynomial. Le facteur de 3/2 est en fait le meilleur facteur connu.
Dans son article, Christofides a amélioré le facteur d'approximation du problème de 2 à 3/2. Il a en fait affiné l'algorithme précédent qui consistait à construire un arbre couvrant minimal et à le parcourir.
Depuis les années de 2010, une nouvelle approche basée sur l'algorithme, appelée best-of-many, a permis de faire avancer certains cas particuliers et se révèle plus efficace dans la pratique. Elle consiste schématiquement à utiliser l'algorithme de Christofides, sur plusieurs instances définies à partir d'une solution à la relaxation de Held et Karp.