Algorithme de Kernighan-Lin
L'algorithme de Kernighan–Lin est une heuristique pour réaliser un partitionnement de graphe. L'algorithme est notamment utilisé pour l'agencement des circuits intégrés et des composants pour l'intégration à très grande échelle (VLSI)[1],[2].
![](http://upload.wikimedia.org/wikipedia/commons/thumb/a/a7/Graph_bipart.png/220px-Graph_bipart.png)
Description
modifierL'algorithme prend en entrée un graphe non-orienté G = (V, E), défini par l'ensemble de nœuds V, l'ensemble de liens E et potentiellement les coûts des liens de E. L'objectif est de réaliser une partition de l'ensemble V en deux ensembles disjoints A et B de tailles proches ou égales, de manière à minimiser la somme T des poids du sous-ensemble de liens allant de A à B. Si le graphe est non-pondéré, l'algorithme cherche à minimiser le nombre de liens allant de A à B, ce qui est équivalent à assigner un poids unitaire à tous les liens.
L'algorithme tient à jour une partition et l'améliore à chaque itération en utilisant une méthode gloutonne. Le principe est d'apparier des nœuds de A à des nœuds de B, de manière qu'intervertir les ensembles auxquels appartiennent les nœuds appariés améliore la qualité du partitionnement. Après association des nœuds, l'algorithme réalise un sous-ensemble des paires choisies pour obtenir la valeur minimum de T. Pour un graphe à n nœuds, chaque itération de l'algorithme est réalisée en O(n2 log n).
Plus précisément, pour tout , on appelle le coût interne de a, c'est-à-dire la somme des coûts des liens entre a et les autres nœuds de A et le coût externe de a, c'est-à-dire la somme des coûts des liens entre a et les nœuds de B. On définit de manière analogue et pour tout . On pose
la différence entre les coûts externes et internes de x. Si a et b sont intervertis, alors la réduction de coût est:
où est le coût d'un potentiel lien entre a et b.
L'algorithme cherche à trouver une suite optimale d'interversions entre éléments de et de qui maximise puis met à jour le partitionnement du graphe en A et B en réalisant effectivement ces opérations[1].
Pseudocode
modifierSource[1]
fonction Kernighan-Lin(G(V, E)) déterminer une partition initiale des nœuds équilibrée entre les ensembles A et B faire calculer les valeurs D pour tout a dans A et tout b dans B soient L_g, L_a, et L_b des listes vides pour n := 1 à |V| faire trouver a dans A et b dans B tels que g = D[a] + D[b] − 2×c(a, b) est maximum on ne considère plus a et b dans la suite de cette itération ajouter g à L_g, a à L_a et b à L_b mettre à jour les valeurs D pour les éléments de A = A \ a et B = B \ b fin pour trouver k qui maximise g_max, la somme des L_g[1], ..., L_g[k] si g_max > 0 alors Mettre L_a[1], L_a[2], ..., L_a[k] dans B et L_b[1], L_b[2], ..., L_b[k] dans A jusqu'à (g_max ≤ 0) renvoyer A,B
Références
modifier- B. W. Kernighan et Shen Lin, « An efficient heuristic procedure for partitioning graphs », Bell System Technical Journal, vol. 49, , p. 291–307 (DOI 10.1002/j.1538-7305.1970.tb01770.x)
- C. P Ravikumar, Parallel methods for VLSI layout design, Greenwood Publishing Group, , 73 p. (ISBN 978-0-89391-828-6, lire en ligne)
- (en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « Kernighan–Lin algorithm » (voir la liste des auteurs).