DFAはNFAよりも効率的だと言えますか?


13

計算理論について読み始めたところです。(文字列を受け入れる際に)より強力な方を比較すると、両方とも同じです。しかし、効率はどうですか?DFAは発信エッジを1つしか持たず、あいまいさがないため、DFAはNFAと比較して高速になります。ただし、NFAの場合は、考えられるすべてのケースを確認する必要があり、確実に時間がかかります。それで、DFAはNFAよりも効率的だと言えるでしょうか?

しかし、脳の他の部分は、NFAは理論上のみに存在すると考えているため、その効率をDFAと比較することはできません。

回答:


15

効率的な定義方法に応じて、2つの答えがあります。

表現のコンパクトさ

少ないリソースでより多くを伝える:NFAはより効率的です。

DFAからNFAへの変換は簡単で、表現のサイズは増加しません。

ただし、最小のDFAが最小のNFAよりも指数関数的に大きい標準言語があります。典型的な例は、のための固定します。 ka|bba|bkk

計算

高速で実行:DFAの方が効率的です。

現在使用しているコンピューターは、本質的に決定論的です。それは彼らを非決定論への対処が苦手にします。NFAを決定論的に扱うには、一般的に2つの方法があります。片側のバックトラッキング(かなりコストがかかる)、またはアクティブな状態の追跡、つまり各遷移が最大倍(はNFAのサイズ) 。NNN


コンパクトさに関しては、NFAの方が常に効率的ではありません!最小のDFAが最もコンパクトなNFAよりも指数関数的に大きい言語が存在するのは事実ですが、すべての言語のセットでそのような言語の割合は何ですか?
saadtaame

2
@saadtaame奇妙に思えるかもしれませんが、厳密な意味では、NFAは非決定的である必要はありません。DFAは特別な種類のNFAです。つまり、開始セットとしてシングルトンを持つNFAであり、遷移関数は、常に1つの状態のみがアクティブになるようなものです。
ハウル

2
-1「サイズを大きくする(多くの場合)」。リンクリストのコストをNFA状態の数で最大に保つことにより、一連のNFA状態をシミュレートします。一方、同等のDFAにはO 2 N状態がある場合があります。ONO2N
さまようロジック

@WanderingLogicそのとおりです。変換は明示的に行う必要はありません(大規模な形式ではなく、同等のDFAを引き続き使用しています)。ただし、これは同じサイズの DFA 実行するよりも倍の計算時間を必要とするため、依然として重要です。それを説明するために最後の段落を修正します。ON
ハウル

私の研究では、NFAの方が評価に適していると主張してきたので、この答えをありがとう。その点がより微妙であることがわかりました。NFAがDFAであるという特別なケースでは、スマートNFA評価アルゴリズムはDFA評価の複雑さと一致し、NFAはより簡潔である可能性があるため、全体として、NFAは固定言語に対して間違いなく優れています。ただし、非常に非決定的なNFAを作成するか、特定のアプリケーションで同じサイズの DFAを取得する賢い方法を見つけるかを選択する場合は、DFAの方が適しています。
6005

4

パワーに関しては、あなたが言ったように同等であり、NFAを同等のDFAに変換するアルゴリズム(サブセット構築)があります。アルゴリズムの名前からわかるように、NFAの状態のサブセットを構築します。NFAに状態がある場合、アルゴリズムは2 n個の状態を持つDFAを出力する場合がありますが、これは上限です。状態の数がまったく変化しないか、さらには減少する場合があります。したがって、実際には、どちらを使用するかは重要ではありません。n2n

DFAマッチングは、入力文字列のサイズが線形です。NFAマッチングにはバックトラッキングが含まれるため、NFAはより多くの作業を行います。したがって、DFAはより効率的です。


しかし、DFAの方が効率的だと言えますか?
avi

1
@avi質問を編集しました!ちなみに、NFAは理論だけでは存在しません。これを確認してください:swtch.com/~rsc/regexp/regexp1.html
saadtaame

@aviここでの問題は、NFAと同等のDFAが(多くの場合)はるかに大きくなることです。そのため、DFAをより迅速に確認できても、通常はより大きなDFAを確認する必要があります。
ピーター

@ Peter、DFAが大きいことは重要ではありません。それは、遷移関数を与える配列が大きいことを意味するだけです。
フォンブランド

1
@Khaur、本当。しかし、そのような問題に陥ると、膨大なDFAが発生します。
フォンブランド

2

上記の回答に追加するだけです:

NFA 、並列プロセッサでシミュレートできるという意味で、DFAよりも計算的に効率的です。

ところで:NFAは現実には存在できないと言っている人がいます。失礼ですが同意できません。多数のプロセッサを搭載したコンピューターは、多くのタスクを並行して実行でき、非決定的なマシンと見なすことができます。計算の各ブランチを新しいプロセッサに割り当て、それらのいずれかが受け入れるたびにすべてを停止できます。


1
DFAもNFAも現実には存在せず、どちらも数学的な関係にすぎず、アルゴリズムでシミュレートできます。
jmite


1

他の人が指摘したように、「効​​率」の意味を定義する必要があります。これを説明するために、別の答えの合理的なモデルを示します。

オートマトンモデルのみを見ると、特に実際のマシンでそれらを実装する方法を無視しているため、明らかな効率性の尺度は「(最短の)受け入れ実行で行われた遷移の数」です。

ε


1

技術的に言えば、NFAは非決定性を使用する必要がないため、DFAよりも一般的な概念です。つまり、すべてのDFAはNFAです。この観点から、あなたが好むどんな効率測定に対しても、少なくとも最も効率的なDFAと同じくらい効率的なNFAがすべての言語にあります。

これ以外に、Raphaelは、あなたが効率と実装に何を意味するかに非常に依存していることに同意します。


-3

Automata、つまり人力なしで、または人の直接参加なしでアクションを実行できるマシンについて知っています。例:洗濯機。有限オートマトンとは、1回押すと2回押すとオフになるように機械でタスクを実行する状態を知っているため、有限オートマトンと呼ばれる状態が2つしかないことを意味します。次に、DFA、つまり決定論的有限オートマトンに来てください。正式には、あいまいさのない状態を簡単に判断できることを意味し、非公式には1つのシンボルで許可される遷移が1つだけ必要です。NFA:非決定性有限オートマトン。実際の状態を計算するのにより多くの時間が必要であり、あいまいさがあり、1つのシンボルに複数の許可された遷移があると非公式に述べられています。宛先NFAに到達するまでに時間がかかる場合、DFAよりも時間がかかりますが、NFAはDFAよりも多くのデータをロードできます。* DFAとNFAには、文字列を認識する同じ力があります。ありがとう。.ディーパリ・カウシク


1
有限オートマトンは洗濯機とは何の関係もありません。
デビッドリチャービー

2
@DavidRicherby。「何もない」というフレーズが少し強いかもしれません。結局のところ、洗濯機の状態は準備完了洗浄すすぎ、および状態間の適切な遷移を伴う回転があると言えます。しかし、より良いメタファーは、コイン式のソーダ自動販売機です。
リックデッカー

1
@RickDeckerは同意しましたが、わずかな関連性について時間をかけて議論することは、Wikipediaが「過度の重み」と呼んでいる例です。そして、いずれにせよ、私が話している答えの一部は、オートマトンを計算デバイスではなく、自己動力のマシンとして議論することです。
デビッドリチャービー

1
この答えが質問に価値のあるものを追加するとは思わない。特に、効率の測定については不明確であり、いくつかの懸念事項が混在しているようです。
ラファエル

他の答えは言うべきすべてをほとんど使い果たしており、残念ながらあなたの答えは少し混乱しています。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.