La idea es decidir de manera no determinista al principio cuánto se cicla la palabra, y tener una copia del autómata para cada caso. En términos del autómata, eso significa que adivinamos en qué estadoD habría sido después de consumir el prefijo de una palabra (que es un sufijo de nuestra entrada), y comenzar en ese estado.
Ahora la construcción. Para cada estadoq∈Qseparado D en dos partes A1 y A2. A1 contiene los estados desde los cuales q es accesible y A2 los estados a los que se puede llegar desde q:
[ fuente ]
Tenga en cuenta que cualquier nodo dado puede estar contenido en ambos A1 y A2. Por lo tanto, el número de estados puede duplicarse si hacemos explícito este paso.
Ahora volvemos a cablear este autómata para que acepte todas las palabras para las cuales q marca el "punto de ciclo":
[ fuente ]
Obtenemos |Q|autómatas de esta forma; crear un nuevo estado inicial que tieneε-transiciones a todos sus estados iniciales. El autómata resultante aceptacycle(L). En total, llegamos a lo más|Q|⋅(2|Q|+1)+1 estados, solo |Q| más estados que las reclamaciones de referencia son posibles.
Puedes lograr 2|Q|2+1estados modificando un poco el autómata componente; eliminar todoq0 reemplazando el entrante ε-transiciones con copias de sus transiciones salientes. Es decir, para cada par de transiciones.(q1,ε,q0),(q0,a,q2), introduce una transición (q1,a,q2).
La construcción rigurosa y la prueba de corrección permanecen como ejercicio.