この[おかしい]質問を念頭に置いています。入力の遷移を定義するときに、非決定的有限オートマトンが非決定的と呼ばれるのはなぜですか。まあ、複数のイプシロン遷移がありますが、それらは定義されています。つまり、マシンはそれらの遷移に対して決定論的です。つまり、決定論的です。
この[おかしい]質問を念頭に置いています。入力の遷移を定義するときに、非決定的有限オートマトンが非決定的と呼ばれるのはなぜですか。まあ、複数のイプシロン遷移がありますが、それらは定義されています。つまり、マシンはそれらの遷移に対して決定論的です。つまり、決定論的です。
回答:
「確定的」とは、「システムを同じ状況に2回設定すると、同じ選択を2回行うことが保証される」ことを意味します。
「非決定的」とは、「非決定的」、つまり「システムを同じ状況に2回設定すると、両方とも同じ選択を行う場合としない場合」を意味します。
非決定性有限オートマトン(NFA)は、状態からの複数の遷移を持つことができます。これは、その状況でできることについて複数のオプションがあることを意味します。常に同じものを選択する必要はありません。1つの入力で最初の遷移を選択し、別の入力で同じ遷移を選択する場合があります。
ここでは、「状況」を「入力から次に読み取られる記号と一緒に、NFAの状態」と考えることができます。これらの両方が同じ場合でも、NFAには、その状態から取り出すことができる複数の一致する遷移が存在する可能性があり、どちらを選択するかを任意に選択できます。対照的に、DFAにはその状況で実行できる一致する遷移が1つしかないため、選択の余地はありません。その状況にあるときは常に同じ遷移に従います。
たとえば、このオートマトンはNFAであり、文字列受け入れます。より面白くするために、10で終わる文字列を受け入れます。
確認するには、受け入れ状態に到達するかどうかを確認するだけです。
今、赤い線で別の可能性は、第二の読んでいるときに、そこにいた私はとどまることができるのq 0、その後に滞在qは0最後の読み取り時に0を。Automataにはメモリがないため、状態を「保存」して、文字列が10で終わるかどうかを後で確認する方法はありません。これは、このNFAのように、文字列が許容可能な状態に分岐する前に10で終わるかどうかを推測しています ここでの非決定性は、多くの選択を行い、常に正しい選択をすることです。
DFAを構築するよりもNFAを構築する方が簡単です。良い点は、両方が同等であることです。
NFAの遷移関数は、任意の時点で許可される遷移を指定します。複数のオプションが存在する可能性があり、NFAは最終的に受け入れ状態に到達することを目的として、非決定的に遷移を選択します。
おそらく、非決定的チューリングマシンについて学ぶまで待つ必要があります。非決定論は、両方の場合で同じことを意味します。
有限オートマトンから始めます。状態と受け入れ状態および遷移があります。
ここで、各状態の複数の遷移規則を指定し、入力文字列が与えられて受け入れ状態に至るという事実の後に選択された遷移規則のセットが存在する場合、それを受け入れると言います。
入力文字列を取得すると、その文字列を受け入れるために(一度に1つずつ)通過する具体的な遷移と状態の固定セットがあります。しかし、選択する遷移は、文字列の最後でのみ選択されます。文字列が読み取られている間、どのパスを取るかは決定されません。
非決定的です。入力を読み取るときではなく、問題全体をグラフに渡した後、グラフ内のパスを選択します。
さて、私たちはこれをこの思考実験とは異なる方法で定式化しますが、これはなぜそれがその名前を得たのかという動機を与えます。
これは、そもそも名前の由来を説明しています。はい、完全に決定的な方法でNDFAをモデル化できますが、名前はスティッキーです。ボブに電話をかけたら、アリスと呼んだときにあなたが話していることを誰も知らないので、それを他の名前に変更するには通信コストがかかります。
NFAとDFAは、特定の文字列を認識するために使用されます。
非決定論的有限オートマトンは、その決定に影響を与えたように機能します。パスをたどるか、たどらないかを「選択」できます。
上の画像で、文字列 "00111"を処理しているとき、最初の "1"に遭遇したとき、2つの可能な方法があることに注意してください。「p」のままにするか、「q」に移動できます。オートマトンが "q"に移動する場合、文字列は受け入れられません( "q"から出てくるエッジがないため)。しかし、このオートマトンは、最後の1だけで "q"に移動し、他のすべての "p"にとどまることで文字列を受け入れることができます(そしてそれが起こっています)。
NFAは、それがオートマトンのように見え、先にあるものを「認識」し、それに応じて選択します。
もちろんそうではありません。DFAとNFAは消費電力の点では同等です(NFAをDFAに削減し、NFAを使用して(おそらく)シンプルにすることができます)が、NFAは便利です。短くて読みやすい。
そこにランダムなものは何もありません。非決定論的な部分は、「選択」が必要であるという事実に重点を置いていますが、真実は、オートマトンが決定を行わないことです。
ここに、本[Peter Linz 4Eによる形式言語とオートマトンの紹介]と私の理解からのいくつかのコンテンツのミックスがあります。
マシンが次の動き(三目並べなど)を決定する必要があるゲームプログラムを考えてみましょう。複数の移動が可能なため、各移動を決定的に選択し、移動を評価して最適な移動を選択します。選択プロセスは決定論的であり、多くの可能な動きがありましたが、行われた最終的な動きは単一のものであり、試行されたすべての移動計算を敵から隠しながら最良の動きとして選択されました。[ここでは、可能性のある各移動の評価プロセスが敵から隠されていると仮定しています]。
したがって、選択は1つだけで、相手には動きが非決定的であるような錯覚が与えられます。
最良の動きがいくつかの決定論的計算の積であるとまだ確信していない場合は、完全にランダムな動きをするマシンを検討する必要があります(マシンが緩んでいるかもしれませんが、NFAです)。