Algorithme de Karger - Karger's algorithm

Un graphique et deux de ses coupes. La ligne pointillée en rouge est une coupe à trois bords croisés. La ligne pointillée en vert est une coupe minimale de ce graphique, ne croisant que deux arêtes.

En informatique et en théorie des graphes , l'algorithme de Karger est un algorithme aléatoire pour calculer une coupe minimale d'un graphe connecté . Il a été inventé par David Karger et publié pour la première fois en 1993.

L'idée de l'algorithme est basée sur le concept de contraction d'une arête dans un graphe non orienté . De manière informelle, la contraction d'une arête fusionne les nœuds et en un seul, réduisant le nombre total de nœuds du graphe de un. Toutes les autres arêtes se connectant soit ou sont "rattachées" au nœud fusionné, produisant effectivement un multigraphe . L'algorithme de base de Karger contracte de manière itérative les arêtes choisies au hasard jusqu'à ce qu'il ne reste plus que deux nœuds ; ces nœuds représentent une coupure dans le graphe d'origine. En itérant cet algorithme de base un nombre suffisant de fois, une coupe minimale peut être trouvée avec une probabilité élevée .

Le problème de la coupe minimale globale

Une coupure dans un graphe non orienté est une partition des sommets en deux ensembles disjoints non vides . Le cutset d'une coupe se compose des bords entre les deux parties. La taille (ou poids ) d'une coupe dans un graphe non pondéré est la cardinalité de la coupe, c'est-à-dire le nombre d'arêtes entre les deux parties,

Il existe des manières de choisir pour chaque sommet s'il appartient à ou à , mais deux de ces choix font ou vident et ne donnent pas lieu à des coupures. Parmi les choix restants, permuter les rôles de et ne change pas la coupe, donc chaque coupe est comptée deux fois ; par conséquent, il y a des coupes distinctes. Le problème de la coupe minimale est de trouver une coupe de plus petite taille parmi ces coupes.

Pour les graphiques pondérés avec des poids d'arête positifs, le poids de la coupe est la somme des poids des arêtes entre les sommets dans chaque partie

ce qui est conforme à la définition non pondérée de .

Une coupe est parfois appelée une « coupe globale » pour la distinguer d'une « coupe - » pour une paire de sommets donnée, qui a l'exigence supplémentaire que et . Chaque coupe mondiale est un - coupe pour certains . Ainsi, le problème de la coupe minimum peut être résolu en temps polynomial par itérer sur tous les choix de et résoudre le minimum résultant - problème de coupe à l' aide du théorème min-cut max-débit et un algorithme polynomial pour un débit maximal , tel que le push-relabel algorithme , bien que cette approche ne soit pas optimale. De meilleurs algorithmes déterministes pour le problème de coupe minimale globale incluent l' algorithme de Stoer-Wagner , qui a un temps d'exécution de .

Algorithme de contraction

L'opération fondamentale de l'algorithme de Karger est une forme de contraction des bords . Le résultat de la contraction du bord est un nouveau nœud . Chaque arête ou pour les extrémités de l'arête contractée est remplacée par une arête vers le nouveau nœud. Enfin, les nœuds contractés et avec tous leurs bords incidents sont supprimés. En particulier, le graphe résultant ne contient pas d'auto-boucles. Le résultat de la contraction du bord est noté .

Le bord marqué est contracté en un seul nœud.

L'algorithme de contraction contracte à plusieurs reprises des arêtes aléatoires dans le graphe, jusqu'à ce qu'il ne reste plus que deux nœuds, auquel cas il n'y a qu'une seule coupe.

L'idée clé de l'algorithme est qu'il est beaucoup plus probable que les bords non coupés au minimum que les bords coupés au minimum soient sélectionnés au hasard et perdus par contraction, car les bords coupés au minimum sont généralement largement surpassés en nombre par les bords non coupés au minimum. Par la suite, il est plausible que les bords min-cut survivent à toute la contraction des bords, et l'algorithme identifiera correctement le bord min-cut.

Exécution réussie de l'algorithme de Karger sur un graphe à 10 sommets. La coupe minimale a la taille 3.
   procedure contract():
   while 
       choose  uniformly at random
       
   return the only cut in 

Lorsque le graphique est représenté à l'aide de listes d'adjacence ou d'une matrice d'adjacence , une opération de contraction de bord unique peut être implémentée avec un nombre linéaire de mises à jour de la structure de données, pour un temps d'exécution total de . Alternativement, la procédure peut être considérée comme une exécution de l'algorithme de Kruskal pour construire l' arbre couvrant minimum dans un graphique où les arêtes ont des poids selon une permutation aléatoire . La suppression du bord le plus lourd de cet arbre entraîne deux composants qui décrivent une coupe. De cette façon, la procédure de contraction peut être implémentée comme l'algorithme de Kruskal en temps .

Les choix d'arêtes aléatoires dans l'algorithme de Karger correspondent à une exécution de l'algorithme de Kruskal sur un graphe avec des rangs d'arêtes aléatoires jusqu'à ce qu'il ne reste que deux composants.

Les implémentations les plus connues utilisent respectivement le temps et l'espace, ou le temps et l' espace.

Probabilité de succès de l'algorithme de contraction

Dans un graphe avec des sommets, l'algorithme de contraction renvoie une coupe minimale avec une probabilité polynomiale faible . Chaque graphique a des coupes, parmi lesquelles au plus peuvent être des coupes minimales. Par conséquent, la probabilité de succès de cet algorithme est bien meilleure que la probabilité de choisir une coupe au hasard, qui est au plus de .

Par exemple, le graphe de cycle sur les sommets a exactement des coupes minimales, données par chaque choix de 2 arêtes. La procédure de contraction trouve chacun d'eux avec une probabilité égale.

Pour établir davantage la limite inférieure de la probabilité de succès, notons les bords d'une coupe minimale spécifique de taille . L'algorithme de contraction retourne si aucune des arêtes aléatoires n'appartient à l'ensemble de coupe de . En particulier, la contraction du premier bord évite , ce qui arrive avec probabilité . Le degré minimum de est au moins (sinon un sommet de degré minimum induirait une coupe plus petite où l'une des deux partitions ne contient que le sommet de degré minimum), donc . Ainsi, la probabilité que l'algorithme de contraction sélectionne une arête est

La probabilité que l'algorithme de contraction sur un graphe à sommets évite satisfait la récurrence , avec , qui peut être développée comme

Répéter l'algorithme de contraction

10 répétitions de la procédure de contraction. La 5ème répétition trouve la coupe minimale de la taille 3.

En répétant les temps de l' algorithme de contraction avec des choix aléatoires indépendants et en retournant la plus petite coupe, la probabilité de ne pas trouver de coupe minimale est

Le temps d'exécution total pour les répétitions d'un graphe avec des sommets et des arêtes est de .

Algorithme de Karger-Stein

Une extension de l'algorithme de Karger due à David Karger et Clifford Stein permet une amélioration d'un ordre de grandeur.

L'idée de base est d'effectuer la procédure de contraction jusqu'à ce que le graphe atteigne les sommets.

   procedure contract(, ):
   while 
       choose  uniformly at random
       
   return 

La probabilité que cette procédure de contraction évite une coupure spécifique dans un graphe à sommets est

Cette expression est approximative et devient inférieure à environ . En particulier, la probabilité qu'un bord de soit contracté augmente vers la fin. Cela motive l'idée de passer à un algorithme plus lent après un certain nombre de pas de contraction.

   procedure fastmincut():
   if :
       return mincut()
   else:
       
        contract(, )
        contract(, )
       return min {fastmincut(), fastmincut()}

Une analyse

La probabilité que l'algorithme trouve un cutset spécifique est donnée par la relation de récurrence

avec solution . Le temps d'exécution de fastmincut satisfait

avec solution . Pour obtenir une probabilité d'erreur , l'algorithme peut être répété plusieurs fois, pour un temps d'exécution global de . Il s'agit d'une amélioration d'un ordre de grandeur par rapport à l'algorithme original de Karger.

Amélioration liée

Pour déterminer une coupe minimale, il faut toucher chaque arête du graphique au moins une fois, c'est-à-dire le temps dans un graphique dense . L'algorithme de coupe minimale de Karger-Stein prend le temps d'exécution de , qui est très proche de celui-ci.

Les références

  1. ^ un b Karger, David (1993). "Global Min-cuts dans RNC et autres ramifications d'un algorithme simple Mincut" . Proc. 4e Symposium annuel ACM-SIAM sur les algorithmes discrets .
  2. ^ Stoer, M.; Wagner, F. (1997). « Un algorithme de coupe minimale simple ». Journal de l'ACM . 44 (4) : 585. doi : 10.1145/263867.263872 .
  3. ^ Patrignani, Maurizio; Pizzonia, Maurizio (2001), "La complexité du problème d'appariement", in Brandstädt, Andreas ; Le, Van Bang (eds.), Graph-Theoretic Concepts in Computer Science: 27th International Workshop, WG 2001, Boltenhagen, Allemagne, 14-16 juin 2001, Proceedings , Lecture Notes in Computer Science, 2204 , Berlin: Springer, pp 284-295, doi : 10.1007/3-540-45477-2_26 , MR  1905640.
  4. ^ Karger, David R. ; Stein, Clifford (1996). "Une nouvelle approche du problème de coupe minimale" (PDF) . Journal de l'ACM . 43 (4) : 601. doi : 10.1145/234533.234534 .