他のテーマがいくつか挟まり間が開きましたが、有限オートマトンの続きです。
前回*1紹介したのは、今の状態と入力に対し次の状態がただ一つ決まる有限オートマトンでした。これを決定性有限オートマトンと言います。これに対し、次の状態が二つ以上ある、あるいは一つもないように拡張した、非決定性有限オートマトンがあります。例を示しましょう。「最初がa、次にaかbが好きなだけ続き(一つもなくても良い)、最後は必ずbで終わる」記号列の集まりを考えます。正規表現 a(a+b)*b で表される記号列の集まりでもあります。この特徴を「素直に」状態遷移図に表現すると

こんな状態遷移図ができます。最初のaは見たままですね。状態q1に来て次の入力もbなら行き先がq1とq2の二通りあります。これが非決定性です。この例では「最初がa」←→ q0 から q1への遷移、「aかbが好きなだけ続く」←→ q1の所にあるループ、「最後は必ずbで終わる」←→ q1からq2への遷移かつq2はただ一つの受理状態、と対応しています。状態遷移図の特徴と受理する記号列の特徴がよく一致し、正規表現ともよく対応していることに注意しましょう。
このように非決定性を導入すると物事が単純に表現できることがよくあります。しかしながら、コンピュータは決定的に動作します。ある命令をある条件下で実行すると結果(計算結果と次に実行する命令)は一つです。その時々で異なる結果が出ると困ります。幸い有限オートマトンの世界では決定性と非決定性に能力の違いがないことがわかっています。つまり、非決定性有限オートマトンが受理できる記号列の集合を受理する(状態遷移図は違うが)決定性有限オートマトンがあるということです。ここで決定性・非決定性に関するよくある疑問を、この例に即していくつか挙げていきます。
- 質問: いきなりbが入力されるとどうなるか。
回答: 初期状態q0から入力bで行き先がないので、次の状態はありません。この入力は受理されません。 - 質問: 今の状態がq2 で入力がaだとどうなるか。
回答: 入力a (bでも)行き先がないので次の状態はない。ただし、初期状態から今の状態がq2だけという様相に至ることはなく、必ずq1とq2になっているので、入力aでは次の状態はq1になります。 - 質問: abaと入力されると一度受理状態に行っているが受理しないのか。
回答: 入力が終了した時受理状態にいるかどうかで判定します。上で述べた通りこの場合はq1にいるので受理しません。
非決定性有限オートマトンを決定性に変換するアルゴリズムは「オートマトン」が書名にある本なら必ずでていますからここでは省略します。上の例では

の状態遷移図で表されるオートマトンになります。決定性にすると「aとbが任意回続く」ことや「最後が必ずbで終わる」ことがわかりにくいかもしれません。また、q2は失敗状態になり、ひとたびq2に行くと抜け出すことができません。それでは決定性と非決定性の動きの違いを解説した動画へのリンクを貼ります。
*1:2024年8月7日