Probleme – La coupe maximale : le hasard, puis mieux
Exercice · niveau 3 (difficile) · informatique (MP2I/MPI), chapitre 25 — Algorithmes probabilistes, approximation, séparation et évaluation
Énoncé
Une coupe d'un graphe non orienté est une partition des sommets en deux parties ; sa valeur est le nombre d'arêtes joignant les deux parties. On cherche la coupe de valeur maximale.
- Montrer que placer chaque sommet à pile ou face est une -approximation.
- Montrer que la constante ne peut pas être améliorée par cet algorithme.
- Construire une -approximation déterministe par recherche locale, et prouver sa terminaison.
- Mesurer.
Corrigé
1. L'analyse tient en deux lignes. Une arête est coupée si et seulement si et tombent de part et d'autre, ce qui arrive dans deux cas sur quatre : la probabilité vaut . Par linéarité de l'espérance, sur arêtes,
la dernière inégalité venant de ce qu'aucune coupe ne peut dépasser le nombre total d'arêtes. C'est exactement l'argument de MAX2SAT, transposé — et comme lui, il n'exige aucune indépendance entre les arêtes, alors qu'elles partagent des sommets.
2. La borne est atteinte. Il suffit d'un graphe où l'optimum coupe toutes les arêtes, c'est-à-dire d'un graphe biparti. Sur — six sommets, neuf arêtes —, la coupe maximale vaut tandis que l'espérance vaut : le rapport est exactement .
Vérification sur graphes aléatoires : le rapport exact ne descend jamais sous , et vaut exactement dans cas — précisément ceux où le graphe est biparti.
3. La recherche locale. On part d'une coupe quelconque, et l'on fait basculer tout sommet qui a strictement plus de voisins de son côté que de l'autre.
(* Coupe de valeur au moins m/2, DETERMINISTE.
Entrees : g.(u) = liste des voisins de u, graphe non oriente.
Sortie : cote.(u) = true ou false, la partition.
Complexite : O(m^2) au pire -- au plus m basculements, chacun en O(m). *)
let coupe_locale g =
let n = Array.length g in
let cote = Array.make n true in (* tout le monde du meme cote *)
let bouge = ref true in
(* VARIANT : la valeur de la coupe, entiere, majoree par m, et qui augmente
d'au moins 1 a chaque basculement. *)
while !bouge do
bouge := false;
for u = 0 to n - 1 do
let memes = List.fold_left
(fun acc v -> if cote.(v) = cote.(u) then acc + 1 else acc) 0 g.(u) in
let autres = List.length g.(u) - memes in
if memes > autres then begin (* on gagne memes - autres *)
cote.(u) <- not cote.(u);
bouge := true
end
done
done;
cote
Terminaison. Le variant est la valeur de la coupe elle-même. Faire basculer fait entrer dans la coupe les memes arêtes de son côté et en sortir les autres : la valeur varie de , puisqu'on ne bascule que si et que ce sont des entiers. La valeur est un entier strictement croissant majoré par : il y a au plus basculements. C'est un variant qui croît vers un maximum — l'exact miroir du variant décroissant habituel, et il est tout aussi rigoureux.
Garantie. À l'arrêt, tout sommet vérifie , donc au moins la moitié de ses arêtes sont coupées. En sommant sur tous les sommets, chaque arête étant comptée deux fois :
d'où valeur . La même garantie que le tirage aléatoire, sans aucun tirage.
4. Les mesures, sur graphes aléatoires de à sommets, l'optimum étant calculé par énumération des partitions :
| rapport minimal observé | garantie prouvée | |
|---|---|---|
| Coupe aléatoire (espérance exacte) | ||
| Recherche locale |
Le nombre de basculements n'a jamais dépassé sur ces instances, très en deçà de la borne .
Ce que le problème enseigne. La méthode probabiliste a d'abord servi à prouver qu'il existe une coupe de valeur — pur argument d'existence. La recherche locale la trouve, sans hasard, et sa preuve de garantie est une conséquence de sa condition d'arrêt. C'est le même mouvement qu'au problème « MAX2SAT : du hasard au déterminisme » : le hasard découvre le résultat, un algorithme déterministe le réalise.
Et une mise en garde, pour ne pas surestimer la recherche locale : elle rend un optimum local, pas global. Sur les instances mesurées, elle atteint au pire, mais rien ne garantit mieux que — et l'algorithme le plus fort connu pour la coupe maximale, celui de Goemans et Williamson, n'atteint qu'au prix d'une relaxation par programmation semi-définie, très au-delà du programme.
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.