次のように、時間とスペースをトレードオフするのは簡単です。
正規表現をNFAに変換します—アルゴリズムの比較を具体的にするために、がNFA状態の数であると仮定します。そのため、NFAを直接シミュレートするためのO (r s )時間は有効で、O (2 r)変換されたDFAを実行するためにバインドされたスペースは、その量のメモリに対応できるRAMで作業している場合にも有効です。rO(rs)O(2r)
今、に仕切りNFA(任意)の状態を部分集合は、S Iせいぜいの⌈ R / kが⌉それぞれを述べています。各サブセット内のS 私は、我々は、インデックスサブセット缶A IのS Iからの番号で0へ2 ⌈ R / K ⌉ - 1。kSi⌈r/k⌉SiAiSi02⌈r/k⌉−1
テーブルここで、iとjは0〜k − 1の範囲にあり、cは入力シンボルであり、A iはS iのサブセット(の数値インデックス)です。。テーブルに格納される値は、S jのサブセット(数値インデックス)です。状態yは、次の場合にのみT [ i 、j 、c 、A i ]にありますT[i,j,c,Ai]ijk−1cAiSiSjyT[i,j,c,Ai]は S jに属し、入力シンボル cでyに遷移する状態が A iにあります。ySjAiyc
NFAをシミュレートするには、各S iに 1つのインデックスを維持し、入力のプレフィックスによって到達できるS iの状態のサブセットA iを指定します。各入力シンボルcについて、テーブルを使用して、各ペアi 、jについて、cの遷移によってA iの状態から到達できるS jの状態のセットを検索し、ビット単位のバイナリまたはこれらの状態のセットの数値インデックスを操作して、それらをS jの状態の単一のサブセットに結合するkSiAiSici,jSjAicSj。したがって、シミュレーションの各ステップには時間がかかり、シミュレーションの合計時間はO (s k 2)です。O(k2)O(sk2)
必要なスペースは、すべてのテーブルのスペースであり、です。時間と空間の分析は、その量のメモリをアドレス指定でき、その量のメモリをアドレス指定するのに十分な大きさのワードに対してバイナリ演算を実行できるRAMで有効です。O(k22r/k)
これから得られる時間と空間のトレードオフは、 2次依存性のため、NFAシミュレーションと完全には一致しません。しかし、その後、私はO (r s )がNFAシミュレーションの適切な時間制限であることに懐疑的です:現在から許可されているすべての(おそらく二次的に)遷移を見るよりも速くNFAの単一ステップをどのようにシミュレートしますかアクティブ状態から別の状態へ?O (r 2 s )であってはいけませんか?kO(rs)O(r2s)
いずれの場合でも、変化させることで、DFAよりも少ないスペースで、DFAとNFAの境界の間の連続体に時間の境界を取得できます。k