La mayor parte de lo siguiente es de Parsing Theory de Sippu y Soisalon-Soininen.
Sea el conjunto de estados del DFA. Deje T ser el alfabeto de entrada. Dejar | M | = O ( | T | ⋅ | Q | ) sea el tamaño de la máquina. El ejercicio 3.40 proporciona un algoritmo O ( | T | ⋅ | Q | 2 ) para minimizar el estado. Como describe Wikipedia , el algoritmo de Hopcroft tiene un tiempo de ejecución de O ( | T | ⋅ | Q | ⋅ logQT|M|=O(|T|⋅|Q|)O(|T|⋅|Q|2) y el algoritmo de Moore tiene un tiempo de ejecución de O ( | T | 2 ⋅ | Q | ) .O(|T|⋅|Q|⋅log|T|)O(|T|2⋅|Q|)
El teorema 3.30 establece que la construcción del subconjunto se puede hacer en produciendo un autómata de tamaño O ( 2 | T | + log | Q | ) (en realidad, si el el autómata resultante tiene | T ′ | estados, el tiempo de ejecución es ( | T ′ | + | T | ⋅ | MO(2|T|+log|T|+log|Q|)O(2|T|+log|Q|)|T′|) Por lo tanto, las dos reversiones y la segunda determinación son intrascendentes en el tiempo de ejecución, por lo que el tiempo de ejecución asintótico del algoritmo de Brzozowski es el mismo que el de la construcción del subconjunto.(|T′|+|T|⋅|M|)⋅|Q|
Esto significa que, en el peor de los casos, el algoritmo de Brzozowski es exponencialmente más lento que los otros tres algoritmos. Tenga en cuenta que el peor de los casos realmente ocurre: el ejemplo clásico de NFA para el lenguaje tiene estados k + 1 y su DFA mínimo correspondiente tiene estados O ( 2 k ) , mientras que el reverso de NFA es determinista, por lo que ejecutar el algoritmo de Brzozowski en este NFA invertido desencadena el peor de los casos.(a|b)∗akk+1O(2k)
Sin embargo, si la construcción del subconjunto produce un autómata de tamaño , entonces su tiempo de ejecución también es O ( | T | 2 ⋅ | Q | 2 ) , que suele ser el caso en las entradas de la vida real. Además, si se tiene el cuidado adecuado al calcular el cierre de un estado, esto puede hacerse mucho más rápido en la mayoría de los casos (es decir, casos en los que el cierre es pequeño), ahorrando un factor | T ||T′|=O(|T|)O(|T|2⋅|Q|2)|T|en la práctica (esencialmente por la misma razón por la que los cierres transitivos se pueden calcular con bastante rapidez en ejemplos del mundo real). Además, si la entrada y los autómatas intermedios son escasos, lo que significa que los estados tienen pocas transiciones, entonces un factor se guarda, lo que da un tiempo de ejecución O ( | T | ⋅ | Q | ) en las entradas 'buenas'.|Q|O(|T|⋅|Q|)
Desafortunadamente, no estoy lo suficientemente familiarizado con los algoritmos de Hopcroft o Moore para dar un análisis de sus tiempos de ejecución en casos típicos. Wikipedia habla sobre un tiempo de ejecución en algunos casos, lo que haría que los tres algoritmos fueran comparables.O(|T|loglog|T|)