特殊なケースでのDFA交差の効率的なアルゴリズムに興味があります。つまり、交差するDFAが特定の構造に従うか、制限されたアルファベットで動作する場合です。そのような場合のアルゴリズムを見つけることができるソースはありますか?
質問が広すぎないようにするために、次の構造が特に重要です。交差するすべてのDFAは2進アルファベット(0 | 1)で動作し、do n't care記号も使用できます。さらに、遷移が2つしかない最大でK個の特別な状態を除いて、すべての状態には1つの遷移しかありません(これらの遷移は常に0または1ですが、気にしないでください)。Kは整数で、実用上は10未満です。また、単一の受け入れ状態があります。さらに、交差は常に「ストリップ」の形式のDFAであることがわかっています。つまり、次の画像のように分岐はありません。
編集:おそらく、入力DFAの制約の説明はあまり明確ではありません。この段落でそれを改善しようと思います。入力としてT DFAがあります。これらのDFAはそれぞれ、バイナリアルファベットでのみ動作します。それらのそれぞれには、最大でN個の状態があります。DFAごとに、それぞれの状態は次のいずれかです。
1)受け入れ状態(1つだけであり、それから他の状態への遷移はありません)
2)同じターゲット状態への2つの遷移(0と1)がある状態(状態の大部分はこの種類です)
3)異なるターゲット状態への2つの遷移(0と1)がある状態(最大でこの種類のK)
受け入れ状態は1つしかなく、各入力DFAにはタイプ(3)の状態が最大でK個あることが保証されています。また、すべての入力DFAの交差DFAが「ストリップ」(上記のとおり)であり、サイズがN未満であることも保証されています。
EDIT2: DWのコメントで要求されているいくつかの追加の制約:
- 入力DFAはDAGです。
- コメントのDW定義に従って、入力DFAは「平準化」されます。つまり、すべての遷移が整数uから整数vに移行するように、すべての状態に異なる整数を割り当てることができます(u + 1 = vなど)。
- 各入力DFAの受け入れ状態の数はKを超えません。
何か案は?ありがとう。
a DFA in form of "strip", i.e., no branches
?あなたの場合、標準のアルゴリズムよりもうまくいくと信じる理由がありますか?