非常に大きなNFAをDFAに変換するアルゴリズム


12

非常に大きな非決定的有限オートマトンがあり、それをDFAに変換する必要があります。

概して、40 000以上の州を意味します。これまでにいくつかの実験を行い、テーブルを検索するデフォルトのアルゴリズムをプログラムしました(ここで説明します)が、最適化後でも非常に遅く、非常にメモリを消費します。州の数が指数関数的に増加する可能性があるという事実を知っていますが、最小化後、結果のDFAには約9000の州があり、耐えられます。

だから私の質問は、より高速またはよりメモリフレンドリーなアルゴリズムがありますか?


ビデオは明らかに標準の決定アルゴリズムに基づいています。例:確定なしのNFA最小化、stackoverflow
vzn

単純なNFA-> DFA変換(製品構成を使用)を行う場合、結果のDFAはどれくらいの大きさですか?(最小化前)
DW

2
DFAで何をしたいですか?包含チェックに興味があるなら、それを直接行うアルゴリズムがあります。
ヴィジェイD

非常に迅速な回答をありがとうございます。サイズについては、RAMが使い果たされたので正確にはわかりませんが、質問を拡張するよりも詳しく見ていきます。私がやりたいことについては、私が公然とチャットできるかどうかはわかりません。それは私の確かなノウハウのほんの一部です。ただし、結果のDFAが実際に必要であると断言できます。
ジェンダ

1
メンバーシップおよび等価クエリからDFAを学習するためのAngluinのアルゴリズムを実行してみましたか?メンバーシップ部分は簡単です(必要な文字列でDFAを実行するだけです)。同等の場合は、たくさんのランダムな文字列を描画するか、特定の長さまでのすべての文字列を試すことができます。これはヒューリスティックなもので、いつ完了するかはわからないのですが、このトリックは実際にうまく機能することがわかりました
...-Aryeh

回答:


6

Brzozowskiのアルゴリズムを試しましたか?最悪の場合の実行時間は指数関数ですが、特にDFAに変換して最小化するNFAで開始する場合、非常に優れたパフォーマンスを発揮することを示唆する参考文献がいくつかあります。

以下の論文が関連しているようです:

NFAから始めてDFAに変換して最小化したい状況への適用など、DFA最小化のためのさまざまなアルゴリズムを評価します。

NFAの強連結成分(SCC)分解(有向グラフとして考慮)はどのように見えますか?どのコンポーネントも大きすぎない多くのコンポーネントを持っていますか?もしそうなら、単一のコンポーネントを取り、それをNFAからDFAに変換し、最小化してから元の新しい確定バージョンで置き換える分割統治アルゴリズムを考案することが可能かどうか疑問に思います。これは、単一エントリコンポーネント(そのコンポーネントへのすべてのエッジが単一の頂点、エントリ頂点につながる場合)で可能になるはずです。任意のNFAに対してこのようなことを行うことができるかどうかはすぐにはわかりませんが、SCCの構造がどのように見えるかを確認すると、この種の方向が探索する価値があるかどうかを判断できる場合があります。


Brzozowskiのアルゴリズムは有望と思われますが、分割統治法はさらに優れています!私の場合、これは非常に簡単であり、大きなコード変更を必要としません。私はそれを行い、それがうまくいけば、あなたの答えを受け入れます。
ジェンダ

2
私が来た、私は尋ねた、私は分割した、私は征服した
ジェンダ

2

これは明らかに、「DFAに決定する/ DFAを最小化する」という元の/長年の戦略以外の既知/使用可能なアルゴリズムの意味で、非常によく研究された問題ではありません。決定ステップが問題のあるステップであることを示しているように見えますが、これは当然、指数空間/時間の最悪のケースがあることを考えると典型的です。平均してパフォーマンスが大幅に変化する可能性のあるDFA最小化アルゴリズムがいくつかあることに注意してください。

より非公式には、「決定性のないNFA最小化」としても知られています。この論文に示されているように、P = Pspaceでない限り、基本的に近似アルゴリズムさえないという意味で難しいことが知られています。

ただし、このペーパーでは、決定されたDFA 1stの検出に基づいていない、一般にめったに探索されないいくつかのアルゴリズムのケースを考慮しています。

非決定的オートマトンの状態と遷移の数を減らすためのさまざまな手法を紹介します。これらの手法は、左右の言語の包含に関連する、状態のセットに対する2つの事前注文に基づいています。それらの正確な計算はNP困難であるため、NFAの削減をすべて可能にする多項式近似に注目します。

一般に可能な限り効率的に大規模なNFA / DFA変換/最小化などを処理できる公開パッケージ/実装がAT&T FSMライブラリであることに注意してください。

fsmcompact時々十分な戦略があります:

トランスデューサーまたは重み付きアクセプターを決定できない場合や非常に大きくなる場合は、別の最適化が役立つ場合があります— fsmcompact。この操作は、入力ラベル、出力ラベル、およびコストの各トリプルを単一の新しいラベルにエンコードし、古典的な(重み付けされていないアクセプター)決定および最小化を実行し、エンコードされたラベルを元の値にデコードします。これには、常に定義され、出力ラベルまたはコストをパスに沿って移動しないという利点があります。結果には、決定論的でも最小でもないという欠点があります。


NFAの削減についても参照してください
。Ilie
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.