Algoritmos para coloreo

A Natalia le parecen interesantes los problemas de coloreo, y la verdad es que lo son, tal vez para salir un poco de la rutina de los que ya tenemos: Euler, Hamilton, mínimo árbol generador y camino más corto.

Tal vez agregar el tema de coloreos sea demasiado, o al revés, es posible que traiga variedad a los problemas que vemos.

Tenemos que tener en cuenta que de incluir el tema deberíamos dar un algoritmo (“receta”) para resolver el problema.

Como ya mencioné, como en el caso del ciclo de Hamilton, no se conocen algoritmos eficientes para resolver el problema del coloreo para grafos en general, y hay que recurrir a herramientas más allá de lo que queremos.

No habría problemas en proponer un algoritmo en Python que funcione razonablemente bien para un grafo con pocos vértices, y podemos ponerlo como “caja cerrada para apretar botones”, y también, como en el caso del viajante, podemos proponer una heurística del estilo “codicioso” o ”voraz” (“greedy” en inglés).

El algoritmo voraz más usado para este problema consiste en dar un orden a los vértices, dar un color al primero y continuar dando el primer color no usado por los vecinos a cada vértice que procesamos. Para más claridad, incluyo el ejemplo que aparece en un artículo de la FCEIA.


Comentarios

  1. En los problemas de coloreo de grafos con poca cantidad de vértices se me ocurre que también se puede hacer lo siguiente (como para que no haga todo el algoritmo en Python):
    Encontrar primero el número de Clique (otro NP Completo!!!, oh no!) del grafo y luego usarlo como cota, es decir, usar el teorema que dice que el número cromático de un grafo es mayor o igual al número de clique de un grafo. Pero acá tengo una duda: ¿existe algún algoritmo eficiente para número de clique en grafos con pocos vértices?
    Por ejemplo el problema del deposito de sustancias yo lo resolví de esa forma, primero busqué el número de clique que me dió 3 (a ojo), y luego intenté usar 3 colores para colorear el grafo, cosa que logré hacer. Por supuesto que lo del algoritmo en Python me parece bárbaro!

    Bueno, son ideas...



    ResponderEliminar

Publicar un comentario