Aprendizaje Interactivo de Teoría de Grafos
Aprendizaje Interactivo de Teoría de Grafos
Guest User
Using app without sign in
Verificador de grafo cordal
Comprueba si todo ciclo de cuatro o más vértices tiene una cuerda
Selecciona un algoritmo y genera pasos para comenzar la visualización
Un grafo es cordal cuando cada ciclo de cuatro o más vértices tiene una cuerda, una arista que conecta dos vértices no consecutivos del ciclo. Los grafos cordales son una clase bien comportada donde muchos problemas NP-difíciles, incluidos la coloración y el clique máximo, se vuelven resolubles en tiempo polinómico.
La cordalidad se comprueba con BFS lexicográfica (Lex-BFS), que ordena los vértices en O(V + E). Un grafo es cordal exactamente cuando el inverso de ese orden es un orden de eliminación perfecto, es decir cada vértice junto con sus vecinos posteriores forma un clique, condición comprobable en tiempo lineal. El mismo orden produce luego de forma voraz la coloración óptima y los cliques máximos.
Los grafos cordales permiten una eliminación gaussiana eficiente con relleno mínimo para matrices dispersas, la inferencia exacta en modelos gráficos probabilísticos mediante árboles de unión, la filogenia perfecta en biología computacional y la asignación de registros para programas estructurados. Son una puerta de entrada a la teoría de grafos perfectos.
Probar la cordalidad directamente, buscando un ciclo largo sin cuerdas, es caro. La vía estándar es indirecta: hallar un candidato a orden de eliminación perfecta y después verificarlo.
// Paso 1: búsqueda de cardinalidad máxima
peso[v] = 0 para todo v; orden = []
repetir V veces:
elegir el v sin numerar de mayor peso
orden.anteponer(v)
para cada vecino n de v sin numerar: peso[n]++
// Paso 2: verificar que es un orden de eliminación perfecta
para cada v en orden, en la posición i:
posteriores = vecinos de v que aparecen tras i
si posteriores está vacío: continuar
w = el vértice más temprano de posteriores
si algún u de posteriores no es adyacente a w:
devolver NO cordal
devolver cordalUn orden de eliminación perfecta es aquel en el que cada vértice, junto con sus vecinos posteriores, forma un clique. Un grafo es cordal exactamente cuando existe tal orden. La búsqueda de cardinalidad máxima siempre produce uno si el grafo es cordal, así que el paso de verificación es lo que convierte un orden heurístico en una demostración, y es también lo que detecta el fallo cuando ese orden no existe.
Prueba la cordalidad de un ciclo de cuatro vértices, después añade una cuerda y vuelve a probar.
Grafo de ejemplo: Primero el ciclo de 4 A-B, B-C, C-D, D-A. Después el mismo grafo con la cuerda A-C añadida.
El ciclo de 4 puro no es cordal; añadir la única cuerda A-C lo vuelve cordal. Esto es la definición hecha concreta: un grafo es cordal cuando todo ciclo de cuatro o más vértices tiene una arista que une dos vértices no consecutivos de ese ciclo. El ciclo de 4 es el contraejemplo más pequeño posible, y por eso es el caso de prueba estándar.
Tiempo: O(V + E) · Espacio: O(V + E)
La búsqueda de cardinalidad máxima corre en O(V + E) cuando se implementa con cubetas de vértices por peso, de modo que seleccionar el máximo e incrementar los vecinos sean ambos de coste amortizado constante. La pasada de verificación examina cada vértice una vez y cada uno de sus vecinos posteriores una vez, lo que totaliza O(V + E) siempre que las consultas de adyacencia sean de tiempo constante mediante un conjunto hash. Así que toda la prueba es lineal, lo cual es un resultado genuinamente sorprendente: el enfoque ingenuo de enumerar ciclos y comprobar si cada uno tiene cuerda es exponencial, e incluso un método basado en ciclos más astuto sería mucho peor. La BFS lexicográfica es una alternativa a MCS con la misma cota.
La cordalidad suele ser una puerta de entrada: una vez que se sabe que un grafo es cordal, varios problemas NP-difíciles pasan a ser lineales sobre él.
| Alternativa | Prefiérela cuando | Coste |
|---|---|---|
| Clique máximo en grafo cordal | El grafo es cordal. NP-difícil en general, pero lineal aquí mediante el orden de eliminación. | O(V + E) |
| Coloración en grafo cordal | Los grafos cordales son perfectos, así que colorear de forma voraz en orden de eliminación inverso es exactamente óptimo. | O(V + E) |
| Descomposición en árbol | Quieres aprovechar un ancho de árbol bajo. Los grafos cordales son exactamente los de ancho de árbol igual al clique máximo menos 1. | O(V + E) si es cordal |
| BFS lexicográfica | Alternativa a MCS para producir el orden candidato. Misma complejidad, distintos factores constantes. | O(V + E) |
Leer el artículo completo: Graph Algorithms and Their Complexity
Algoritmos relacionados: Coloración de Grafos, Cliques Maximales, Búsqueda en Anchura