通常の文法で受け入れられた単語を数える


26

通常の言語(NFA、DFA、文法、または正規表現)が与えられた場合、特定の言語で受け入れられる単語の数をどのようにカウントできますか?「ちょうどn文字」と「最大n文字」の両方が重要です。

Margareta Ackermanには、NFAによって受け入れられた単語を列挙するという関連するテーマに関する2つの論文がありますが、効率的に数えるためにそれらを修正することはできませんでした。

通常の言語の制限された性質がそれらを比較的簡単にカウントするように思えます-私はアルゴリズムよりも数式をほとんど期待しています残念ながら、これまでの検索では何も見つかりませんでしたので、間違った用語を使用する必要があります。


私はあなたが「サイズ受け入れ単語の」、またはそのような何かを意味すると思いますか?他に、のための受諾単語数何ですnΣ
スレシュヴェンカト

回答:


37

初期状態が状態であるDFAの場合、状態で終わる長さのワードの数は。ここで、はDFAの伝達行列(行および列の数は、状態から状態への遷移を引き起こすさまざまな入力シンボルの数です)。したがって、行列パワーを計算し、状態の受け入れに対応するエントリを追加するだけで、が適度に大きい場合でも、長さが正確に受け入れワードを簡単にカウントできます。0kiAk[0,i]Aijijkk

同じことは、長さが最大で単語を、わずかに異なる行列で受け入れる場合に機能します。行列の追加の行と列を追加します。行と列の両方にあるセルに1つ、初期状態の新しい行と列に1つ、他のすべてのセルに0を追加します。マトリックスに対するこの変更の効果は、各パワーで初期状態にもう1つのパスを追加することです。k

これはNFAでは機能しません。最善の方法は、DFAに変換してからマトリックスパワーアルゴリズムを適用することです。


2
完璧な答え:一度読んだだけで明らかです。
チャールズ

1
DFA以外の入力がある場合、このアプローチには指数関数的なワーストケースランタイムがあります。@Charles、これはあなたにとって問題ではありませんか?質問に正規表現、NFA、文法を含めているようで、効率的な方法を求めています。
ラファエル

17

LET(非決定性)有限状態始動と自動化すること、と。A=(Q={q1,,qn},Σ,δ,QF)q1QFQδQ×Σ×Q

LETで開始受け入れることができるすべての単語のための生成機能であり、その級数展開の番目の係数。Qi(z)qin[zn]Qi=|{w|w|=nw accepted from qi}|

明らかに:

Qi(z)=[qiQF]+(qi,a,qj)δxQj(z)

の結果の(線形)方程式システムを(Mathematicaまたは同様のツールを使用)。次に、が必要な量です。Q1[zn]Q1

これは、Chomsky andSchützenberger(1963)によって文法に導入された技術にまでさかのぼります。簡単に有限オートマトンに移行します。

編集: -transitions を考慮したい場合は、対応する遷移の合計で因子を省略します。同様に、「圧縮された」エッジがある場合、つまり、シンボル代わりに、トランジションの単語場合、を置き換えます。εxaΣwΣkxxk


歴史的なメモに感謝します!
チャールズ

1
えー、これは実際には多くの状況で本当にうまく機能する(そして、それを手に入れれば簡単です)メソッドです。たとえば、まったく同じ方法でCFGを実行できます。
ラファエル

1
わかりました、私は誤解しました。その場合、これを読みたいなら、C&Sの仕事よりもアクセスしやすいと思ったKuich(1970)をお勧めします。彼はまた、私が覚えていない彼の本でこれをカバーしています。
ラファエル

1
DFAを構築せずに、多項式時間で通常の言語の長さ単語をカウントできると言っていますか?:MO上でこの複雑についての質問 mathoverflow.net/questions/162186/...n
joro

1
@joro明確な文法の場合、これは本当だと思います、はい。
ラファエル14

7

これは難しいカウントの問題だと思います。このペーパーを参照してください。指定された長さの通常のシーケンスのサイズをカウントすることは#P-completeです。S。Kannan、Z。Sweedyk、およびSR Mahaney。通常の言語での文字列のカウントとランダム生成。ACM-SIAM Symposium on Discrete Algorithms(SODA)、ページ551〜557、1995年。


1
上記の投稿では、指定された長さが単項であると仮定しています。代わりに長さがバイナリである場合、問題はPSPACEハードです。これは、2つの正規表現の等価性を決定することがPSPACE困難であるという証拠に基づいて述べています。その削減では、1つの正規表現がすべての文字列を受け入れるように構築され、もう1つの正規表現は入力wでPSPACEマシンMの計算履歴を拒否する有効でないすべての文字列を受け入れるように構築されました。その2番目の正規表現とw上のMの計算履歴の長さを問題の問題への入力として使用すると、この他の問題もPSPACE困難になります。
ミハイルルドー16

3

以下:CMTVは、複雑度クラスを考慮します。これは(本質的に、しかしより一般的な設定では)入力語の非決定性有限オートマトンの受け入れ可能な計算数をカウントする関数のクラスです一定の長さ。CDLの結果としての決定論的ログスペースへの封じ込めなど、この複雑性クラスについて多くの結果が知られています。この設定ではオートマトンが固定されており、入力語が唯一の入力であることに注意してください。#NC1

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