Algorithme de Stoer-Wagner

Un article de Wikipédia, l'encyclopédie libre.
Une coupe minimale (de poids 4) d'un graphe pondéré [1]

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.

Algorithme de Stoer – Wagner[modifier | modifier le code]

Algorithme général[modifier | modifier le code]

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 | modifier le code]

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 | modifier le code]

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 | modifier le code]

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