On va voir, qu'un choix judicieux des arcs sortants permet d'éliminer tout risque
de cyclage.
Théorème (Linear Programming de Vasek Chvátal p. 308)
On fixe un noeud quelconque comme racine pour toutes les itérations. Si lors
de chaque situation dégénérée l'arc entrant n'est pas dirigé vers la racine,
alors l'algorithme ne cycle pas.
Démonstration
On appelle Ti l'i-ième arbre solution. Soit r la racine
de tous les Ti. On note z(T) le coût de l'arbre solution T. Enfin on
définit f(T) par la formule suivante :
Dans un premier temps, considérons l'arbre Ti et supposons que l'i-ème
itération est dégénérée.
Soit
c = c[b] - c[a] - c(a,b) si (a,b) est l'arc entrant. Notons c'[k] le
coût relatif du noeud k dans l'arbre Ti + 1. Alors on a :
c'[k] =
c[k] - c si k appartient au sous-arbre de racine b et c[k] sinon. Donc :
f(Ti + 1) < f(Ti)
À présent, on suppose par l'absurde qu'il existe i et j tel que
Ti = Tj. Donc
z(Ti) = z(Tj). Les étapes
i, i + 1, ...,j - 1 sont
dégénérées. Donc d'après ce que l'on a vu précédemment :
f(Tj) < f(Tj - 1)
< ... < f(Ti). Ceci contredit l'hypothèse Ti = Tj. Donc le théorème est
vérifié.
Définition
Appelons bon arbre, un arbre dont aucun arc de poids zéro n'est dirigé vers la
racine.
Corollaire évident du théorème
Si on se fixe une racine, et si durant l'algorithme tous les arbres sont bons,
alors il n'y a pas cyclage.
Tactique pour éviter le cyclage de W. H. Cunningham (1976)
On part d'un bon arbre. Ensuite, il faut choisir correctement l'arc sortant
pour chaque itération.
On appelle J le noeud du cycle de plus faible profondeur, c'est à dire le
noeud le plus "proche" de la racine. J peut éventuellement être la racine.
Cas non dégénéré
En considérant la figure 2.2, l'arc sortant est l'arc candidat à la sortie le
plus haut dans la partie gauche du cycle.
Cas dégénéré
En considérant la figure 2.3, l'arc sortant est l'arc nul le plus bas dans la
partie droite du cycle.