Encontrar un ciclo de cualquier incluso longitud puede encontrarse en $O(n^2)$ tiempo, que es menor que cualquier límite conocido en $O(M(n))$ . Por ejemplo, un ciclo de longitud cuatro puede encontrarse en $O(n^2)$ tiempo mediante el siguiente procedimiento sencillo:
Supongamos que el conjunto de vértices es $\{1,...,n\}$ . Prepare un $n$ x $n$ matriz $A$ que inicialmente es todo ceros. Para todos los vértices $i$ y todos los pares de vértices $j, k$ que son vecinos de $i$ comprobar $A[j,k]$ para un $1$ . Si tiene un $1$ salida cuatro ciclos en caso contrario $A[j,k]$ ser $1$ . Cuando este bucle finaliza, la salida sin cuatro ciclos .
El algoritmo anterior se ejecuta como máximo en $O(n^2)$ tiempo, ya que para cada triple $i,j,k$ damos la vuelta a $0$ a $1$ en $A$ o nos detenemos. (Suponemos que el grafo está en representación de lista de adyacencia, por lo que es fácil seleccionar pares de vecinos de un vértice).
El caso general es tratado por Raphy Yuster y Uri Zwick en el documento:
Raphael Yuster, Uri Zwick: Finding Even Cycles Even Faster. SIAM J. Discrete Math. 10(2): 209-222 (1997)
En cuanto a encontrar ciclos de longitud impar, es tal y como dice David Eppstein: no se sabe nada mejor que $O(M(n))$ incluido el caso en que $k=3$ .
Sin embargo, si desea detectar caminos de longitud $k$ en lugar de ciclos, puede obtener $O(m+n)$ tiempo, donde $m$ es el número de aristas. No estoy seguro de si el documento original de codificación por colores puede proporcionar este límite de tiempo, pero sí sé que el siguiente documento de algún empollón que se cita a sí mismo al azar lo consigue:
Ryan Williams: Finding paths of length k in O*(2^k) time. Inf. Process. Lett. 109(6): 315-318 (2009)