DFAから正規表現に移行する既知のアルゴリズム


28

DFA から開始し、L A= L r )のような正規表現rを構築する「より良い」(どのような意味で説明する)アルゴリズムがあるのか​​疑問に思っていましたHopcroft and Ullman(1979)による本。そこでは、集合R k i jを使用して、kよりも大きい番号の状態を経由せずに状態q iからq jに DFAを取る文字列のセットを表します。この構造は、明らかに正確で非常に便利ですが、かなり技術的です。ArL(A)=L(r)Rijkqiqjk

私は代数オートマトン理論についてのモノグラフを書いているので、あまりにも多くの技術的詳細で聴衆の注意をそらしたくはありません(少なくとも、表示したい結果とは無関係な詳細では)。完全を期すためのDFAと正規表現の等価性の証明。記録のために、私はGlushkovオートマトンを使用して、正規表現からDFAに移行しています。それは遷移よりも直感的であるように見えました。ε

DFAから正規表現に移行することが知られている他のアルゴリズムは何ですか?効率よりも単純さ(この場合は「より良い」)を重視していますが、それは要件ではありません。

よろしくお願いします!


1
別のアルゴリズムではありませんが、アルゴリズムは、適切な代数の正規表現の行列のk乗を使用して代数的に表現できます。おそらく、このよりエレガントで簡潔なものを見つけるでしょう。参考資料を探しています。Rijkk
最大

1
、あなたがこれらのキーワードを検索することによって、行列乗算の面でプレゼンテーションを見つけることができますので、このアルゴリズムは、基本的にすべてのペア-最短経路問題のためのフロイド・ウォーシャルアルゴリズムの変形です。Rijk
ヤンヨハンセン

2
私は同意します。基本的には、Floyd-Warshallアルゴリズムです。また、標準の動的プログラミング手法を使用して派生させることもできます(Floyd-Warshallができるように)。
デビッド

前にこのような質問に答えたはずですが、見つけられません。
ラファエル

@Max参照を見つけることができますか?私は行列表現に興味があります。実際は代数論者にとってより魅力的です。
ジャノマ

回答:


17

さらに2つの構成:Brzozowski-McCluskey別名状態消去[1]、およびArdenの補題を使用した方程式系でのガウス消去。これらに関する最良の情報源は、おそらくJacques Sakarovitchの本です[2]。

[1] J. Brzozowski、E。McCluskey Jr.、シーケンシャルサーキットステートダイアグラムのシグナルフローグラフテクニック、IEEE Transactions on Electronic Computers EC-12(1963)67–76。

[2] J. Sakarovitch、オートマトン理論の要素。ケンブリッジ大学出版局、2009年。


2
アーデンの補題を使用して方程式を解くアプローチは、最も簡単で説明が簡単であることがわかりました。そのため、この方法を導入理論クラスで提示します。
ヤンヨハンセン

方程式系の方法は素晴らしいように聞こえます。残念ながら、私の大学の図書館には、あなたが言及した本(Sakarovitch)がありませんが、他の場所を見ていきます。
ジャノマ

4
構造の比較は、Sakarovitchの論文「The Language、the Expression and the(small)Automaton」、CIAA 2005、LNCS 3845、Springer(2006)15-30にも記載されています。infres.enst.fr/~jsaka/PUB/Files/LESA.pdf
Hermann Gruber

2
また、状態が処理される順序は、結果の正規表現のサイズに大きく影響する可能性があることに注意してください。これは常に当てはまります。アーデンの補題、マクノート・ヤマダ、州の除去、または別のバリアントでそれを行うかどうか。適切な消去順序を選択するためのいくつかの単純なヒューリスティックが利用可能です。
ヘルマングルーバー

15

Kozenの本「Automata&Computability」は、このFloyd-Warshallアルゴリズムのエレガントな一般化に言及しています。代数論者にアピールすることを述べたので、あなたはそれが役に立つと思うかもしれません。そのテキストの58〜59ページにあります。(Googleブックにはプレビューがあると思います。)

2×2

[abcd]=[(a+bdc)(a+bdc)bd(d+cab)ca(d+cab)]

i,jijます。

n×na,b,c,dm×mm×(nm)(nm)×m(nm)×(nm)2×2「スカラー」エントリの代わりにマトリックスマイナーを使用した上記のルール。(規則に基づいてどのように正規行列乗算を再帰的に定義できるかに類似2×2。)

nTfF(T)s,fsTは、上記の定義を使用して再帰的に評価できます。

m=1Rijkアルゴリズムに。

行列上のクリーネ代数構造の別の導出は、Kleene代数の完全性定理とKozenの定期イベントの代数にあります。


12

私が見た中で最も素晴らしい手順は、Sylvainが言及した手順です。特に、他の表現よりも簡潔な表現が得られるようです。

昨年の夏、学生向けの方法を説明するこのドキュメントを書きました。特定の講義に直接関連しています。言及されているリファレンスは、正規表現の典型的な定義です。アーデンの補題の証拠が含まれています。メソッドの正確さのための1つがありません。講義でそれを学んだように、悲しいことに、私は参照を持っていません。


私もその証拠を好みます。エレガントで説明しやすいと思います。アーデンの補題でさえ難しくありません。これがドキュメントに含める方法になると思います。
ジャノマ

@Raphaelはcs.stackexchangeの例を見て、表記にいくらかの違いがあることを発見しました。両方を使用しました+ そして 文書で、しかしあなただけを使用しました 上記のドキュメントで。私は両方が同じことを意味したと思います。表記の一貫性のために、それを変更することを検討できます。とにかく、その文書は私の一日を救った:)。このようなドキュメントを作成し、オープンライセンスでリリースしていただきありがとうございます。
user3162
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.