Coloreo de vértices Definiciones: I Un coloreo (válido) de los vértices de un grafo G = (V , X ) es una asignación f : V → C , tal que f (v ) 6= f (u) ∀(u, v ) ∈ E . I Los elementos de C son llamados colores. Muchas veces los colores son enteros positivos. I Para todo entero positvo k, un k-coloreo de G es un coloreo de los vértices de G que usa exactamente k colores. I Un grafo G se dice k-coloreable si existe un k-coloreo de G . I El número cromático de G , χ(G ), es el menor número de colores necesarios para colorear los nodos de G . I Un grafo G se dice k-cromático si χ(G ) = k. Coloreo de Grafos Algoritmos y Estructuras de Datos III Coloreo de nodos Cotas para χ Proposición: Si H es un subgrafo de G entonces χ(H) ≤ χ(G ). Ejemplos: I χ(Kn ) = n. I Si G es un grafo bipartito con m > 0, entonces χ(G ) = 2. I Si H2k es un circuito simple par, entonces χ(H2k ) = 2. I Si H2k+1 es un circuito simple impar, entonces χ(H2k+1 ) = 3. Definición: Una clique en un grafo es un subgrafo completo maximal. El número clique ω(G ) de un grafo es el número de nodos de una clique máxima de G . Proposición: Para cualquier grafo G , χ(G ) ≥ ω(G ). I I ¿Existen grafos para los cuales χ(G ) > ω(G )? ¿Qué pasa si χ(G ) = ω(G )? u2 χ(G ) ≤ 3 u1 u3 ω(G ) ≥ 3 u5 I u4 χ(G ) = 3 ¿Cuán grande puede ser la diferencia entre estos dos parámetros? Grafos de Mycielski Grafos de Mycielski v2 M4 Definición (por inducción): v2 M3 u2 M2 1. M1 = K1 v1 v2 v1 u1 v1 u1 u3 2. M2 = K2 w 3. Para i ≥ 2, Mi+1 se construye a partir de Mi de la siguiente forma: I I Si Mi tiene p nodos, v1 , . . . , vp , Mi+1 tendrá 2p + 1 nodos, v1 , . . . , vp , u1 , . . . , up , w , donde ui es copia de vi . El conjunto de aristas de Mi+1 tendrá todas las aristas de Mi , las aristas uniendo ui con los vecinos de vi en Mi y las aristas uniendo w con cada ui . Cotas para χ u2 u5 w v5 ¿Cuál es el número cromático de Mi ? χ(Mi ) = i ¿Cuál es la clique máxima de Mi ? ω(Mi ) = 2 u4 v4 Cotas para χ Proposición: Si ∆(G ) es el grado máximo de G entonces χ(G ) ≤ ∆(G ) + 1. Teorema (Brooks): Sea G un grafo conexo que no es un circuito impar ni un grafo completo. Entonces χ(G ) ≤ ∆(G ). I I I ¿Existen grafos para los cuales χ(G ) = ∆(G )? ¿Existen grafos para los cuales χ(G ) < ∆(G )? ¿Cuán grande puede ser la diferencia entre estos dos parámetros? u2 K1,5 u1 u3 u u5 u4 Lema 1: En todo ∆(G )-coloreo de G − v , los vecinos de v en G usan todos los colores y dG (v ) = ∆(G ) ∀v ∈ V . Sean N(v ) = {v1 , . . . , v∆(G ) } los vecinos de v y consideremos un ∆(G )-coloreo de G − v donde el nodo vi es pintado con color i. Para i 6= j, sea Hij el subgrafo inducido por los nodos de G − v pintados con colores i o j en ese ∆(G )-coloreo. Lema 2: vi y vj pertenecen a la misma componente conexa de Hij χ(K1,n ) = 2 Lema 3: Si Pij es la componente conexa de Hij que contiene a vi y a vj , entonces Pij es un camino en Hij . ∆(K1,n ) = n Lema 4: Pij ∩ Pik = {vi }, para colores i 6= j 6= k. v3 Problema de los cuatro colores Teorema de los 4 colores (Appel, Haken, 1976): Si G es un grafo planar, entonces χ(G ) ≤ 4. Teorema (Heawood, 1890): Si G es un grafo planar, entonces Algoritmos para coloreo de grafos I Problema “difı́cil”, computacionalmente no resuelto. I No se conocen algoritmos polinomiales para calcular χ(G ) dado un grafo general G . I Existen muchos enfoques algorı́tmicos para este problema: I χ(G ) ≤ 5. I I Algoritmo (heurı́stica) secuencial (S) Heurı́sticas y metaheurı́sticas. Algoritmos basados en backtracking (por ejemplo: DSATUR, Brelaz, 1979). Algoritmos exactos basados en programación lineal entera. Algoritmo secuencial (S) Definimos Entrada: Un grafo G con un orden en los nodos v1 , . . . , vn . uS (G , v1 , v2 , . . . , vn ) = máx mı́n{i, d(vi ) + 1}. 1≤i≤n f (v1 ) := 1 para i = 2, 3, . . . , n hacer f (vi ) = mı́n{h / h ≥ 1 y Proposición: Si χS (G ) es el número de colores usado por el algoritmo secuencial para colorear G cuando los nodos son considerados en el orden v1 , . . . , vn , entonces χ(G ) ≤ χS (G ) ≤ uS (G , v1 , v2 , . . . , vn ). f (vj ) 6= h ∀(vj , vi ) ∈ E , 1 ≤ j ≤ i − 1} retornar coloreo definido por f ¿Importa el orden de los vértices? Algoritmo secuencial (LFS) Algoritmo secuencial Orden Largest First (LF): los nodos son ordenados de mayor grado a menor grado, d(u1 ) ≥ d(u2 ) ≥ . . . ≥ d(un ). Proposición: Si uLF (G ) = uS (G , u1 , u2 , . . . , un ) donde u1 , u2 , . . . , un están ordenados según LF. Entonces uLF (G ) ≤ mı́n uS (G , v1 , v2 , . . . , vn ) Definición: Si Gi es el sugrafo inducido por v1 , v2 , . . . , vi , entonces uS0 (G , v1 , v2 , . . . , vn ) = 1 + máx {dGi (vi )} 1≤i≤n donde dGi (vi ) es el grado del nodo vi en Gi . Ejercicio: Para cualquier orden de los vértices donde el mı́nimo está tomado sobre todos los ordenes posibles, v1 , . . . , vn . ¿Esto implica que siempre el algoritmo secuencial da un resultado mejor si se usa LF? Algoritmo secuencial (SLS) uS0 (G , v1 , v2 , . . . , vn ) ≤ uS (G , v1 , v2 , . . . , vn ) y cota para el número de colores usados por el algoritmo secuencial con orden v1 , v2 , . . . , vn . Algoritmo secuencial - Cotas Orden Smallest Last (SL): 1. poner como vn el nodo de mı́nimo grado de G . 2. para i = n − 1, . . . , 1 poner como vi el nodo de grado mı́nimo en el subgrafo de G inducido por V \ {vn , vn−1 , . . . , vi+1 }. Definimos uSL (G ) = 1 + máx mı́n {dGi (vj )} 1≤i≤n 1≤j≤i donde dGi (vj ) es el grado del nodo vj en el grafo inducido por V \ {vn , vn−1 , . . . , vi+1 }. Se puede demostrar (ejercicio) que: I χSL (G ) ≤ uSL (G ). I uSL (G ) ≤ uLF (G ). I SLS colorea un grafo planar con 6 colores o menos. Algoritmo secuencial con intercambio (SI) I Supongamos que tenemos un coloreo parcial de G , donde los vértices v1 , . . . , vi−1 ya han sido coloredos y es el turno de colorear a vi . Si todos los colores ya utilizados están en la vecindad de vi , será necesario utilizar un nuevo color. I Si existen p y q dos colores utilizados en el coloreo parcial, tal que en todas las componenetes conexas de Hpq los vértices adyacentes a vi tienen el mismo color, podemos intercambiar los colores p y q en las componentes de Hpq con vértices adyacentes a vi con color p. De esta manera, obtendremos un coloreo parcial de G con el color p no utilizado en la vecindad de vi . I Este procedimiento se llama p, q-intercambio. Algoritmo secuencial con intercambio (SI) ¿Es siempre mejor el algoritmo SI que el algoritmo S? No, generando grafos al azar se han encontrado algunos ejemplos complicados donde SI usa más colores que S. Se puede demostrar que: I SI colorea un grafo bipartito con 2 colores (ejercicio). I SI con el ordenamiento SL colorea un grafo planar con 5 colores como máximo. Algoritmo secuencial con intercambio (SI) f (v1 ) := 1, k := 1 para i = 2, 3, . . . , n hacer g := mı́n{h/h ≥ 1 y f (vj ) 6= h ∀(vj , vi ) ∈ E , 1 ≤ j ≤ i − 1} si g ≤ k entonces f (vi ) := g sino si existen 1 ≤ p < q ≤ k, tales que un p, q-intercambio libera p entonces realizar el p, q-intercambio f (vi ) := p sino f (vi ) := g , k := k + 1 Algoritmo secuencial con bracktracking (exacto) I v1 , v2 , . . . , vn ordenamiento de los vértices de G . I Ui = conjunto de colores posibles para el vértice vi , una vez que han sido coloreados v1 , v2 .......vi−1 . I Si li−1 es el máximo color usado para v1 , . . . , vi−1 y sólo buscamos coloreos óptimos, evitando coloreos equivalentes, ∀j ∈ Ui se verifica que: I j no es color asignado a un vecino de vi ya coloreado I j ≤ mı́n{i, d(vi ) + 1} I 1 ≤ j ≤ li−1 + 1 I si ya se encontró un coloreo del grafo con q colores entonces j ≤q−1 Algoritmo secuencial con bracktracking (exacto) I I Con estas restricciones se hace una búsqueda completa. En el árbol de búsqueda se abre una rama a partir de cada vértice (correspondiente a un coloreo de v1 , . . . , vi−1 ), para cada elemento de Ui . Se avanza por las ramas coloreando los siguientes vértices hasta que ocurre alguna de las siguientes situaciones: 1. se llegó a un vértice con Ui = ∅: a partir de esta situación se hace backtracking a partir de vi−1 . 2. se coloreó vn : se encontró un nuevo coloreo del grafo, hay que actualizar q y hacer backtracking. Algoritmo secuencial con bracktracking (exacto) f (v1 ) := 1, q := n + 1, k := 1, l := 1 avanzar := VERDADERO repetir si avanzar k := k + 1, lk := l, determinar Uk si Uk = ∅ avanzar := FALSO, k := k − 1, l := lk sino j := mı́n Uk , Uk := Uk \ {j}, f (vk ) := j si j > l entonces l := l + 1 si k < n entonces avanzar := VERDADERO sino almacenar la nueva solución encontrar el menor i tal que f (vi ) = l borrar l, l + 1, . . . , q − 1 de U1 , . . . , Ui−1 q := l, l := q − 1, k := i − 1 avanzar := FALSO hasta k = 1 o q = cotaInf Algoritmo secuencial con bracktracking (exacto) I q: cantidad de colores usados en la mejor solución encontrada hasta el momento. I k: vértice siendo considerado. I l: cantidad de colores utilizados en la solución parcial actual. I lk : l para el vértice vk . I cotaInf : cota inferior para el número cromático del grafo. Coloreo de aristas Definiciones: I Un coloreo válido de las aristas de un grafo G es un asignación de colores a las mismas en la cual dos aristas que tienen un vértice en común no tengan el mismo color. I El ı́ndice cromático χ0 (G ) de un grafo G es el menor número de colores con que se pueden colorear las aristas de un grafo. Teorema de Vizing: Para todo grafo G se verifica que ∆(G ) ≤ χ0 (G ) ≤ ∆(G ) + 1.