Adloun

informatique (MP2I/MPI) · Chapitre 25 · Application directe du cours

Problème — La coupe maximale : le hasard, puis mieux

Algorithmes probabilistes, approximation, séparation et évaluation · niveau 3 (difficile)

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

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre