¿Cuáles son los algoritmos más rápidos para colorear los bordes en un gráfico con max_degree + 1 colores?

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.

El algoritmo de Welsh-Powell: clasifique los vértices en orden decreciente de sus grados, y para cada vértice en orden, asígnele el color más pequeño que aún no esté asignado a uno de sus vecinos. Se ejecuta en tiempo lineal en el número de aristas si usa una ordenación de conteo.