Aprendizaje Interactivo de Teoría de Grafos
Aprendizaje Interactivo de Teoría de Grafos
Guest User
Using app without sign in
Buscador de cliques máximos
Enumera todos los subgrafos completos maximales mediante Bron-Kerbosch
Selecciona un algoritmo y genera pasos para comenzar la visualización
Un clique es un conjunto de vértices todos conectados entre sí por pares. Un clique maximal no puede extenderse añadiendo otro vértice, y hallar todos los cliques maximales, o el mayor de todos, es un problema NP-difícil fundamental del análisis de redes.
El algoritmo de Bron-Kerbosch enumera todos los cliques maximales por retroceso recursivo sobre tres conjuntos: el clique actual R, los candidatos P conectados a todo R y los vértices excluidos X ya cubiertos. Elegir un buen pivote poda drásticamente la recursión, y procesar los vértices en orden de degeneración da la mejor cota de enumeración conocida, O(3 elevado a n/3), que coincide con el máximo número posible de cliques maximales.
La detección de cliques halla comunidades muy cohesionadas en redes sociales, complejos de interacción de proteínas en biología, activos correlacionados en finanzas y grupos de productos comprados juntos en sistemas de recomendación. Los problemas de clique son también el vehículo estándar para enseñar reducciones de NP-completitud.
Bron-Kerbosch explora con tres conjuntos: R es el clique construido hasta ahora, P contiene los candidatos que aún podrían extenderlo, y X contiene los vértices ya probados. Un clique es maximal exactamente cuando P y X están ambos vacíos.
BronKerbosch(R, P, X):
si P y X están ambos vacíos:
informar de R como clique maximal
devolver
para cada vértice v en P:
BronKerbosch(R + {v},
P intersección vecinos(v),
X intersección vecinos(v))
P = P - {v}
X = X + {v}
// Con pivote: elegir un pivote u de P unión X y ramificar
// solo sobre los v de P que NO sean vecinos de uX es la parte que la gente omite, y sin ella el algoritmo informa de cliques que no son maximales. Cuando un vértice ya ha sido explorado en este nivel pasa a X, de modo que cualquier clique que pudiera haberlo incluido se rechaza por no ser maximal. El refinamiento del pivote reduce después el factor de ramificación de forma drástica: todo clique maximal debe contener al pivote o a alguno de sus no vecinos, así que ramificar sobre el resto es trabajo desperdiciado.
Enumera todos los cliques maximales de un grafo de seis aristas que contiene dos triángulos solapados y una arista colgante.
Grafo de ejemplo: Aristas no dirigidas A-B, A-C, B-C, B-D, C-D y D-E.
Los cliques maximales son {A, B, C}, {B, C, D} y {D, E}. El clique máximo, es decir el mayor, tiene tamaño 3 y hay dos de ellos. Fíjate en que maximal y máximo son distintos: {D, E} es maximal porque nada puede extenderlo, pero está lejos de ser máximo. Fíjate también en que B y C aparecen cada uno en dos cliques maximales, lo cual es normal y explica que el número de cliques maximales pueda superar con mucho al número de vértices.
Tiempo: O(3^(V/3)) · Espacio: O(V^2)
La cota procede del teorema de Moon-Moser: un grafo de V vértices puede tener a lo sumo 3 elevado a V/3 cliques maximales, y esa cota es ajustada, alcanzada por un grafo multipartito completo de V/3 triángulos. Dado que el algoritmo debe como mínimo imprimir cada uno de ellos, ningún algoritmo de enumeración puede superarla en el peor caso, y Bron-Kerbosch con pivote la iguala. Merece la pena interiorizarlo: el algoritmo es óptimo, pero el problema en sí es exponencial. Hallar solo el clique más grande es NP-difícil, e incluso aproximarlo dentro de cualquier factor razonable resulta difícil. En la práctica, el pivote y una ordenación por degeneración hacen tratables los grafos dispersos reales de decenas de miles de vértices, porque los grafos dispersos tienen muchos menos cliques maximales que el peor caso.
Decide primero si quieres todos los cliques maximales o solo el mayor, porque son problemas distintos con herramientas distintas.
| Alternativa | Prefiérela cuando | Coste |
|---|---|---|
| Bron-Kerbosch con pivote | Quieres todos los cliques maximales. La opción estándar y óptima en el peor caso. | O(3^(V/3)) |
| Variante con orden de degeneración | Grafos dispersos reales. Ordenar por degeneración d da una cota práctica mucho mejor. | O(d·V·3^(d/3)) |
| Ramificación y acotación para clique máximo | Solo necesitas el clique más grande, no la enumeración completa. Las cotas por coloración podan mucho. | exponencial, mucho más rápido en la práctica |
| Complemento más conjunto independiente | Tu problema trata realmente de vértices mutuamente no adyacentes. Un clique en G es un conjunto independiente en el complemento de G. | equivalente |
| Enumeración de triángulos | Solo te importan los cliques de tamaño 3, un caso particular mucho más fácil. | O(E^1.5) |
Leer el artículo completo: Applications of Graph Theory in the Real World
Algoritmos relacionados: Coloración de Grafos, Prueba de Cordalidad, Comprobación de Grafo Bipartito