Aprendizaje Interactivo de Teoría de Grafos
Aprendizaje Interactivo de Teoría de Grafos
Guest User
Using app without sign in
Solucionador de coloración y número cromático
Asigna colores a los vértices de modo que no haya dos adyacentes con el mismo color
Selecciona un algoritmo y genera pasos para comenzar la visualización
La coloración de grafos asigna colores a los vértices de modo que dos vértices adyacentes no compartan color, usando el menor número posible de colores. El mínimo necesario es el número cromático, y calcularlo es NP-difícil para grafos generales.
El algoritmo voraz ordena los vértices y da a cada uno el menor color no usado por sus vecinos ya coloreados, garantizando a lo sumo un color más que el grado máximo. Órdenes como Welsh-Powell (por grado decreciente) o DSatur (por saturación, el número de colores vecinos distintos) suelen usar muchos menos colores en la práctica. La coloración exacta usa retroceso con poda, factible solo para grafos pequeños.
La coloración programa exámenes para que ningún estudiante tenga dos a la vez, asigna registros de CPU en compiladores, reparte frecuencias de radio sin interferencia y colorea mapas para que regiones vecinas difieran. El teorema de los cuatro colores para grafos planos es uno de los resultados más célebres de las matemáticas. La comprobación de bipartición es exactamente la 2-coloreabilidad.
La coloración voraz son tres líneas y siempre produce una coloración válida. Lo que no produce necesariamente es una mínima, y el orden de los vértices decide cuánto se acerca.
ColoracionVoraz(grafo, orden):
color = {}
para cada vértice v en orden:
usados = { color[n] : n vecino de v, ya coloreado }
c = el menor entero positivo que no esté en usados
color[v] = c
devolver color
// Welsh-Powell: ordenar por grado descendente
// DSatur: elegir repetidamente el vértice sin colorear con
// más colores distintos entre sus vecinos (saturación),
// desempatando por gradoEl voraz nunca usa más de grado máximo más uno colores, porque al llegar a un vértice este tiene a lo sumo esa cantidad de vecinos y por tanto esa cantidad de colores prohibidos. Es una garantía real, pero puede quedar muy lejos del número cromático verdadero. DSatur es la mejora práctica: elegir a continuación el vértice más restringido es exactamente la heurística que evita acorralarte.
Colorea un ciclo de cinco vértices de forma voraz en orden alfabético y después contrasta el resultado con el número cromático real.
Grafo de ejemplo: Ciclo no dirigido A-B, B-C, C-D, D-E y E-A.
La coloración es A 1, B 2, C 1, D 2, E 3, con tres colores, y la fuerza bruta confirma que el número cromático de un ciclo de cinco es efectivamente 3. Aquí el voraz resultó óptimo. La razón de que hagan falta tres es que el ciclo tiene longitud impar: los colores deben alternarse alrededor de un ciclo, y un ciclo impar te devuelve al inicio necesitando un color distinto del que ya está. Todo ciclo par se conforma con 2.
Tiempo: O(V + E) el voraz, NP-difícil exacto · Espacio: O(V)
La coloración voraz examina cada vértice una vez e inspecciona cada arista dos veces, una desde cada extremo, así que es O(V + E) con O(V) de espacio para el vector de colores. Ese coste compra una coloración válida que usa a lo sumo grado máximo más uno colores, nunca un mínimo garantizado. Calcular el número cromático real es NP-difícil, e incluso aproximarlo dentro de un factor de V elevado a 1 menos épsilon es NP-difícil, lo cual es inusualmente fuerte: para la mayoría de problemas existe alguna aproximación decente, y para la coloración esencialmente ninguna. Decidir la 2-coloreabilidad es la excepción y es fácil, ya que es exactamente la prueba de bipartición con O(V + E). Decidir la 3-coloreabilidad ya es NP-completo.
Elige según cuántos colores esperes necesitar y si exiges el mínimo verdadero.
| Alternativa | Prefiérela cuando | Coste |
|---|---|---|
| Comprobación de bipartición | Solo necesitas saber si bastan 2 colores. Un problema distinto y mucho más fácil. | O(V + E) |
| DSatur | La opción práctica por defecto. Elige el vértice más saturado y suele ser óptimo o casi en grafos reales. | O(V^2) |
| Welsh-Powell | Quieres algo mejor que un orden arbitrario casi sin código extra. Ordena por grado descendente. | O(V^2) |
| Ramificación y acotación exacta | Necesitas de verdad el número cromático y el grafo es pequeño. | exponencial |
| Clique maximal | Quieres una cota inferior. Un clique de tamaño k obliga a usar al menos k colores. | O(3^(V/3)) |
Leer el artículo completo: The Graph Coloring Problem
Algoritmos relacionados: Comprobación de Grafo Bipartito, Cliques Maximales, Prueba de Cordalidad