Es bastante fácil cambiar el tiempo por el espacio, de la siguiente manera.
Convierta la expresión regular en un NFA: para concretar la comparación de algoritmos, asumiremos que es el número de estados NFA, de modo que su tiempo limitado para simular directamente el NFA es válido y su espacio destinado a ejecutar el DFA convertido también es válido siempre que trabaje en una RAM que pueda ocupar tanta memoria.O ( r s ) O ( 2 r )rO(rs)O(2r)
Ahora, divida los estados de la NFA (arbitrariamente) en subconjuntos de como máximo estados cada uno. Dentro de cada subconjunto , podemos indexar los subconjuntos de por números del al .S i ⌈ r / k ⌉ S i A i S i 0 2 ⌈ r / k ⌉ - 1kSi⌈r/k⌉SiAiSi02⌈r/k⌉−1
Construya una tabla donde y están en el rango de 0 a , es un símbolo de entrada y es (el índice numérico de) un subconjunto de . El valor almacenado en la tabla es (el índice numérico de) un subconjunto de : un estado está en si y solo si pertenece a y hay un estado en que transita a en el símbolo de entrada .i j k - 1 c A i S i S j y T [ i , j , c , A i ] y S j A i y cT[i,j,c,Ai]ijk−1cAiSiSjyT[i,j,c,Ai]ySjAiyc
Para simular el NFA, mantenga índices, uno para cada , especificando el subconjunto de los estados en que puede alcanzarse mediante algún prefijo de la entrada. Para cada símbolo de entrada , use las tablas para buscar, para cada par , el conjunto de estados en que se puede alcanzar desde un estado en mediante una transición en , y luego use un binario u operación bit a bit los índices numéricos de estos conjuntos de estados para combinarlos en un solo subconjunto de estados de . Entonces, cada paso de la simulación lleva tiempo , y el tiempo total para la simulación esS i A i S i c i , j S j A i c S j O ( k 2 ) O ( s k 2 )kSiAiSici,jSjAicSjO(k2)O(sk2) .
El espacio requerido es el espacio para todas las tablas, que es . El análisis de tiempo y espacio es válido en cualquier RAM que pueda direccionar tanta memoria y que pueda realizar operaciones binarias en palabras que sean lo suficientemente grandes como para direccionar tanta memoria.O(k22r/k)
La compensación tiempo-espacio que obtienes de esto no coincide perfectamente con la simulación NFA, debido a la dependencia cuadrática de . Pero entonces, soy escéptico de que sea el momento adecuado para la simulación de NFA: ¿cómo simular un solo paso de la NFA más rápido que mirar todas las transiciones (posiblemente cuadráticamente muchas) permitidas desde una actividad actualmente activa? estado a otro estado? ¿No debería ser ?O ( r s ) O ( r 2 s )kO(rs)O(r2s)
En cualquier caso, al permitir que varíe, puede obtener límites de tiempo en un continuo entre los límites de DFA y NFA, con menos espacio que el DFA.k