Escanee los vértices uno por uno. Para cada vértice, encuentre el color más pequeño que ninguno de sus vecinos ya haya tomado y aplíquelo a ese vértice.
Para un gráfico con vértices [matemáticos] n [/ matemáticos], este algoritmo simple toma pasos [matemáticos] n [/ matemáticos], donde cada paso está limitado por [mini] pasos de exploración [matemáticos] \ Delta + 1 [/ matemáticos] los colores disponibles ([matemática] \ Delta [/ matemática] es el grado máximo). Es tan lineal como vienen, y claramente no puedes hacerlo mejor que el lineal.
Editar: como Máté señala correctamente, estoy considerando que el tamaño de entrada aquí es [matemática] n [/ matemática], el número de vértices, en lugar del número de aristas o el número combinado de vértices y aristas. Aún así, el algoritmo es tan eficiente como uno puede esperar: tenemos que escanear todos los bordes, y este algoritmo escanea cada borde dos veces. Si el OP se pregunta sobre la optimización extrema de las constantes, la respuesta dependerá de la estructura de datos en la que se proporciona el gráfico y de otros factores no especificados.
- ¿Qué algoritmo en aprendizaje automático es el más adecuado para unir los datos entrantes nuevos con los datos existentes en la base de datos SQLite?
- ¿Cuáles son algunos buenos libros para aprender algoritmos y estructuras de datos usando Java?
- Cómo saber el orden de magnitud de un algoritmo
- ¿Cuál es la solución eficiente para SPOJ CCROSSX?
- ¿Cuál es el mejor libro sobre estructuras de datos y algoritmos en Java?