Algorithme de Stoer-Wagner

Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus.
Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus.

La mise en forme de cet article est à améliorer ().

La mise en forme du texte ne suit pas les recommandations de Wikipédia : il faut le « wikifier ».

Page d’aide sur l’homonymie

Pour les articles homonymes, voir Wagner.

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 s {\displaystyle s} et t {\displaystyle t} , 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 A {\displaystyle A} et B {\displaystyle B} . Le poids de cette coupe est alors la somme des poids des arêtes qui relient un sommet de A {\displaystyle A} à un sommet de B {\displaystyle B} . Une coupe minimale est une coupe de poids minimum.

Algorithme de Stoer – Wagner

Algorithme général

Soit G = ( V , E , w ) {\displaystyle G=(V,E,w)} un graphe non orienté pondéré, et soit s {\displaystyle s} et t {\displaystyle t} deux sommets de V {\displaystyle V} . Considérons alors une coupe minimale pour le graphe G {\displaystyle G} . Dans cette coupe minimale, soit s {\displaystyle s} et t {\displaystyle t} sont dans la même partie, soit ils sont dans deux parties différentes.

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

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

L'algorithme consiste alors à déterminer deux sommets s {\displaystyle s} et t {\displaystyle t} et une coupe minimale séparant s {\displaystyle s} et t {\displaystyle t} , et à renvoyer le minimum entre cette coupe et la coupe minimale de G ~ {\displaystyle {\tilde {G}}} , calculée récursivement ( G ~ {\displaystyle {\tilde {G}}} possède un sommet de moins que G {\displaystyle G} , et si G ~ {\displaystyle {\tilde {G}}} 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

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

Dans un graphe G ( V , E , w ) {\displaystyle G(V,E,w)} contenant n {\displaystyle n} sommets, on part d'un ensemble A {\displaystyle A} contenant un seul sommet quelconque, et on ajoute à A {\displaystyle A} successivement le sommet le plus relié à A {\displaystyle A} (somme des poids des arêtes de ce sommet à A {\displaystyle A} maximale). Si on appelle les deux derniers sommets ajoutés s {\displaystyle s} et t {\displaystyle t} , alors une coupe minimale séparant s {\displaystyle s} et t {\displaystyle t} est ( V { t } , { t } ) {\displaystyle (V\backslash {}\{t\},\{t\})} .

Pseudo-code

CoupeMinEtape
  
    
      
        (
        G
        ,
        w
        ,
        a
        )
      
    
    {\displaystyle (G,w,a)}
  

  
  
    
      
        A
        
        
          {
          a
          }
        
      
    
    {\displaystyle A\gets \left\{a\right\}}
  

  Tant que 
  
    
      
         
        A
        
        V
      
    
    {\displaystyle \ A\neq V}
  

    Ajouter à 
  
    
      
        A
      
    
    {\displaystyle A}
  
 le sommet le plus connecté à 
  
    
      
        A
      
    
    {\displaystyle A}
  

  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 
  
    
      
        G
      
    
    {\displaystyle G}
  
 par 
  
    
      
        
          
            
              G
              ~
            
          
        
      
    
    {\displaystyle {\tilde {G}}}
  
 en fusionnant les deux sommets (s, t).

Coupe minimale 
  
    
      
        (
        G
        ,
        w
        ,
        a
        )
      
    
    {\displaystyle (G,w,a)}
  

  Tant que 
  
    
      
        
          |
        
        V
        
          |
        
        >
        1
      
    
    {\displaystyle |V|>1}
  

    Calculer CoupeMinEtape
  
    
      
        (
        G
        ,
        w
        ,
        a
        )
      
    
    {\displaystyle (G,w,a)}
  

    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

  1. « Boost Graph Library: Stoer–Wagner Min-Cut - 1.46.1 », www.boost.org (consulté le )
  2. « A Simple Min-Cut Algorithm »
v · m
Algorithmes sur les graphes
Recherche
Plus court chemin
  • Bellman-Ford
  • Dijkstra
  • Floyd-Warshall
  • Johnson
Arbre couvrant minimum
Flot maximum
Coupe minimum
Composantes fortement connexes
Coloration
  • icône décorative Portail des mathématiques