Algorithme de Stoer-Wagner

En théorie des graphes, l'algorithme de Stoer-Wagner est un algorithme récursif pour trouver la coupe minimale dans des graphes pondérés non orientés avec des poids positifs, proposé par Mechthild Stoer et Frank Wagner en 1995. L'idée essentielle de cet algorithme est de réduire progressivement la taille du graphe en fusionnant des sommets par paire, jusqu'à ce que le graphe ne contienne que deux ensembles de sommets combinés[2]. À chaque étape, l'algorithme choisit deux sommets et , calcule la coupe minimale qui les sépare, puis (récursivement) la coupe minimale du graphe obtenu en les fusionnant, et renvoie le minimum des deux. Une coupe est une partition des sommets d’un graphe en deux sous-ensembles non-vides et et . Le poids de cette coupe est alors la somme des poids des arêtes qui relient un sommet de à un sommet de . Une coupe minimale est une coupe de poids minimum.

Une coupe minimale (de poids 4) d'un graphe pondéré [1]

Algorithme de Stoer – Wagner modifier

Algorithme général modifier

Soit   un graphe non orienté pondéré, et soit   et   deux sommets de  . Considérons alors une coupe minimale pour le graphe  . Dans cette coupe minimale, soit   et   sont dans la même partie, soit ils sont dans deux parties différentes.

Si   et   sont dans la même partie, alors on peut construire un graphe   dans lequel on a fusionné les sommets   et   en un sommet  . Une éventuelle arête   est retirée, et pour tout autre sommet  , on crée une arête   dont le poids est la somme des poids de   et de   (on utilise 0 lorsqu'une arête n'existe pas). La coupe minimale de   a alors exactement le même poids que la coupe minimale de  , et on peut repasser de l'une à l'autre (en remplaçant le sommet   par les deux sommets   et  ).

On note également que dans le cas général, la coupe minimale de   a le poids d'une coupe de  , et est donc de poids supérieur ou égal au poids d'une coupe minimale de  .

L'algorithme consiste alors à déterminer deux sommets   et   et une coupe minimale séparant   et  , et à renvoyer le minimum entre cette coupe et la coupe minimale de  , calculée récursivement (  possède un sommet de moins que  , et si   ne possède que deux sommets, alors la coupe minimale est obtenue trivialement en séparant ces deux sommets).

Détermination de s et t modifier

Comme cette méthode fonctionne pour tout couple  , l'algorithme de Stoer-Wagner choisit un couple   tel que la coupe minimale séparant   et   soit rapide à déterminer.

Dans un graphe   contenant   sommets, on part d'un ensemble   contenant un seul sommet quelconque, et on ajoute à   successivement le sommet le plus relié à   (somme des poids des arêtes de ce sommet à   maximale). Si on appelle les deux derniers sommets ajoutés   et  , alors une coupe minimale séparant   et   est  .

Pseudo-code modifier

CoupeMinEtape 
   
  Tant que  
    Ajouter à   le sommet le plus connecté à  
  Fin
  Retenir les deux derniers sommets s et t ajoutés à A.
  Retenir le poids de la coupe avec tous les sommets sauf t d'un côté, et t tout seul de l'autre. Cette valeur est la valeur d'une coupe minimale séparant s et t. 
  Remplacer   par   en fusionnant les deux sommets (s, t).

Coupe minimale  
  Tant que  
    Calculer CoupeMinEtape 
    Si le poids retenu est plus léger que la coupure minimale actuelle
      alors remplacer la coupure minimale actuelle par le poids retenu.

Références modifier

  1. « Boost Graph Library: Stoer–Wagner Min-Cut - 1.46.1 », www.boost.org (consulté le )
  2. « A Simple Min-Cut Algorithm »