Il est assez facile d'échanger du temps contre de l'espace, comme suit.
Convertissez l'expression régulière en NFA - pour plus de concret dans la comparaison des algorithmes, nous supposerons que est le nombre d'états NFA, de sorte que votre temps lié à la simulation directe du NFA soit valide et votre espace lié à l'exécution du DFA converti est également valide chaque fois que vous travaillez dans une RAM qui peut traiter autant de mémoire.rO(rs)O(2r)
Maintenant, partitionnez (arbitrairement) les états du NFA en sous-ensembles d'au plus états chacun. Dans chaque sous-ensemble , nous pouvons indexer les sous-ensembles de par des nombres de à .kSi⌈r/k⌉SiAiSi02⌈r/k⌉−1
Construisez une table où et sont compris entre 0 et , est un symbole d'entrée et est (l'indice numérique de) un sous-ensemble de . La valeur stockée dans le tableau est (l'index numérique de) un sous-ensemble de : un état est dans si et seulement si appartient à et il y a un état dans qui transite à sur le symbole d'entrée .T[i,j,c,Ai]ijk−1cAiSiSjyT[i,j,c,Ai]ySjAiyc
Pour simuler le NFA, maintenez indices, un pour chaque , en spécifiant le sous-ensemble des états dans qui peuvent être atteints par un préfixe de l'entrée. Pour chaque symbole d'entrée , utilisez les tableaux pour rechercher, pour chaque paire , l'ensemble des états dans qui peuvent être atteints à partir d'un état dans par une transition sur , puis utilisez un binaire au niveau du bit ou une opération sur les indices numériques de ces ensembles d'états pour les combiner en un seul sous-ensemble d'états de . Ainsi, chaque étape de la simulation prend le temps , et le temps total pour la simulation estkSiAiSici,jSjAicSjO(k2)O(sk2) .
L'espace requis est l'espace pour toutes les tables, qui est . L'analyse de temps et d'espace est valide sur toute RAM qui peut traiter autant de mémoire et qui peut effectuer des opérations binaires sur des mots suffisamment grands pour traiter cette quantité de mémoire.O(k22r/k)
Le compromis temps-espace que vous obtenez ne correspond pas parfaitement à la simulation NFA, en raison de la dépendance quadratique de . Mais alors, je suis sceptique sur le fait que soit le bon moment pour la simulation NFA: comment simuler une seule étape de la NFA plus rapidement que de regarder toutes les transitions (éventuellement quadratiques) autorisées à partir d'un système actuellement actif état à un autre état? Cela ne devrait-il pas être ?kO(rs)O(r2s)
Dans tous les cas, en laissant varier, vous pouvez obtenir des limites de temps sur un continuum entre les limites DFA et NFA, avec moins d'espace que le DFA.k