Problema nº: 3

Anuncio
Problema nº: 3
Nombre: MINIMUM GRAPH COLORING
URLSs:
• http://www.nada.kth.se/~viggo/wwwcompendium/node15.html
• http://citeseer.nj.nec.com/article/benson99approximating.html
1. Descripción
Dado un grafo no dirigido, el cual denota un conjunto de sectores o áreas separadas por
un conjunto de aristas, se debe determinar el mínimo conjunto de colores capaces de
pintar los sectores de un grafo, con la restricción de que dos colores iguales no pueden
ser utilizados en sectores adyacentes.
Este problema es también conocido como “Minimum Chromatic Number”.
2. Formato de entrada
La estructura central de entrada se basa en una matriz binaria de adyacencia, basada en
sectores, donde se indica cuando dos sectores son adyacentes. Esta matriz se puede
cargar desde una fuente externa (un archivo, por ejemplo) en un formato basado en
listas de pertenencia, por ejemplo:
Fuente externa de matrices
1: 2 3 5
2: 5 1
…
Establece que el sector 1 es adyacente con los sectores 2, 3 y 5. El sector 2 es adyacente
con los sectores 5 y 1, etc.
Paralelamente, se debe contar con un listado de colores, también en un esquema de
fuente externa (un archivo, por ejemplo)
rojo
azul
blanco
…
3. Formato de salida (descripción de la solución a la instancia)
La solución debe ser expresada como un listado impreso en pantalla o en un archivo
indicando el sector y el color que este debe posee:
1: rojo
2: azul
3: blanco
…
4. Casos de prueba
Considérese el siguiente grafo no dirigido:
1
4
3
2
6
5
Entrada
1: 2 3
2: 1 3
3: 1 2 4 5
4: 3 6
5: 3 6
6: 4 5
Salida
1: rojo
2: blanco
3: azul
4: blanco
5: blanco
6: azul
rojo
blanco
azul
verde
amarillo
naranja
5. Indicaciones generales
Lo relevante de este problema es el grafo de adyacencia mas allá de especificar
información respecto a los nodos del grafo o algún “costo” para sus aristas. Si bien es
cierto existen adaptaciones para este problema considerando estos factores, estas
capacidades quedan fuera de la ámbito de esta versión del problema.
Se recomienda la utilización de un esquema voraz o exhaustivo, tomando el problema
de tamaño N ( N = Número de sectores) y asignando el primer color a un sector inicial,
luego repetir el procedimiento para un problema de tamaño N − 1 hasta resolver
completamente el problema
Esto se logra en forma recursiva en forma simple, principalmente utilizando
programación funcional.
6. Indicaciones para Scheme
En Scheme, resulta natural expresar la adyacencia como una lista conformada por pares
que considera el sector y una lista de sectores adyacentes, por ejemplo (considerando el
caso de prueba presentado en la sección 4):
((1 (2 3)) (2 (1 3)) (3 (1 2 4 5)) (4 (3 6)) (5 (3 6)) (6
(4 5)))
De esta forma, se debe implementar una función denominada MGC que reciba una lista
de adyacencia y una lista de colores. La salida debe ser una lista de asignaciones entre
sector y color:
1 => (MGC (rojo blanco azul verde amarillo naranja) ((1 (2
3)) (2 (1 3)) (3 (1 2 4 5)) (4 (3 6)) (5 (3 6)) (6 (4 5))))
Value: ((1 rojo) (2 blanco) (3 azul) (4 blanco) (5 blanco)
(6 azul))
7. Indicaciones para Prolog
Similar es el caso de Prolog donde resulta simple expresar este problema con una
noción de listas, de esta manera se debe implementar un predicado MGC que reciba tres
parámetros (lista de colores, lista de adyacencia y resultado) y asigne una lista de
asociación al tercer parámetro:
?- MGC ([rojo, blanco, azul, verde, amarillo, naranja],
[[2, [1, 3]],[3, [1, 2, 4, 5]], [4, [3, 6]], [5, [3, 6]],
[6, [4, 5]]], S).
Y “retorna” una lista que representa la asignación:
S = [[1, rojo], [2, blanco], [3, azul], [4, blanco], [5,
blanco], [6, azul]];
Descargar