Apprentissage interactif de la théorie des graphes
Apprentissage interactif de la théorie des graphes
Guest User
Using app without sign in
Détecteur de cliques maximales
Trouve les cliques maximales en utilisant l'algorithme de Bron-Kerbosch
Sélectionnez un algorithme et générez les étapes pour commencer la visualisation
Une clique est un ensemble de sommets tous reliés deux à deux. Une clique maximale ne peut pas être étendue en ajoutant un autre sommet, et trouver toutes les cliques maximales, ou la plus grande, est un problème NP-difficile fondamental de l'analyse de réseaux.
L'algorithme de Bron-Kerbosch énumère toutes les cliques maximales par backtracking récursif sur trois ensembles : la clique courante R, les candidats P reliés à tout R et les sommets exclus X déjà couverts. Choisir un bon pivot élague fortement la récursion, et traiter les sommets dans l'ordre de dégénérescence donne la meilleure borne d'énumération connue, O(3 puissance n/3), correspondant au nombre maximal possible de cliques maximales.
La détection de cliques trouve des communautés très soudées dans les réseaux sociaux, des complexes d'interaction de protéines en biologie, des actifs corrélés en finance et des groupes de produits achetés ensemble dans les systèmes de recommandation. Les problèmes de clique sont aussi le vecteur standard pour enseigner les réductions de NP-complétude.
Bron-Kerbosch explore avec trois ensembles: R est la clique construite jusqu'ici, P contient les candidats susceptibles de l'étendre encore, et X contient les sommets déjà essayés. Une clique est maximale exactement lorsque P et X sont tous deux vides.
BronKerbosch(R, P, X):
si P et X sont tous deux vides:
signaler R comme clique maximale
retourner
pour chaque sommet v dans P:
BronKerbosch(R + {v},
P inter voisins(v),
X inter voisins(v))
P = P - {v}
X = X + {v}
// Avec pivot: choisir un pivot u dans P union X et ne
// brancher que sur les v de P qui NE sont PAS voisins de uX est la partie que l'on omet volontiers, et sans elle l'algorithme signale des cliques qui ne sont pas maximales. Dès qu'un sommet a été exploré à ce niveau, il passe dans X, si bien que toute clique qui aurait pu le contenir est rejetée comme non maximale. Le raffinement par pivot réduit ensuite fortement le facteur de branchement: toute clique maximale doit contenir le pivot ou l'un de ses non-voisins, brancher sur le reste est donc du travail perdu.
Énumère toutes les cliques maximales d'un graphe à six arêtes contenant deux triangles qui se chevauchent et une arête pendante.
Graphe d'exemple: Arêtes non orientées A-B, A-C, B-C, B-D, C-D et D-E.
Les cliques maximales sont {A, B, C}, {B, C, D} et {D, E}. La clique maximum, c'est-à-dire la plus grande, est de taille 3 et il en existe deux. Note que maximale et maximum diffèrent: {D, E} est maximale car rien ne peut l'étendre, mais elle est loin d'être maximum. Note aussi que B et C figurent chacun dans deux cliques maximales, ce qui est normal et explique que le nombre de cliques maximales puisse dépasser largement le nombre de sommets.
Temps: O(3^(V/3)) · Espace: O(V^2)
La borne provient du théorème de Moon et Moser: un graphe à V sommets peut posséder au plus 3 puissance V/3 cliques maximales, et cette borne est atteinte, notamment par un graphe multiparti complet formé de V/3 triangles. Comme l'algorithme doit au minimum toutes les afficher, aucun algorithme d'énumération ne peut faire mieux au pire cas, et Bron-Kerbosch avec pivot l'égale. Cela mérite d'être intégré: l'algorithme est optimal, mais le problème lui-même est exponentiel. Trouver seulement la plus grande clique est NP-difficile, et même l'approcher à un facteur raisonnable près reste difficile. En pratique, le pivot et un ordre de dégénérescence rendent traitables les graphes creux réels de plusieurs dizaines de milliers de sommets, car les graphes creux comptent bien moins de cliques maximales que le pire cas.
Décide d'abord si tu veux toutes les cliques maximales ou seulement la plus grande, car ce sont des problèmes distincts avec des outils distincts.
| Alternative | À préférer quand | Coût |
|---|---|---|
| Bron-Kerbosch avec pivot | Tu veux toutes les cliques maximales. Le choix standard, optimal au pire cas. | O(3^(V/3)) |
| Variante avec ordre de dégénérescence | Graphes creux réels. Un ordre par dégénérescence d donne une bien meilleure borne pratique. | O(d·V·3^(d/3)) |
| Séparation et évaluation pour clique maximum | Tu n'as besoin que de la plus grande clique, pas de l'énumération complète. Les bornes par coloration élaguent fortement. | exponentiel, bien plus rapide en pratique |
| Complément plus ensemble indépendant | Ton problème porte en réalité sur des sommets deux à deux non adjacents. Une clique dans G est un ensemble indépendant dans le complément de G. | équivalent |
| Énumération de triangles | Seules les cliques de taille 3 t'intéressent, un cas particulier bien plus facile. | O(E^1.5) |
Algorithmes associés: Coloration de Graphe, Vérification de Chordalité, Vérification Bipartite