大学では、一般的な計算理論とチューリングマシンについてより具体的に学びました。優れた理論上の結果の1つは、潜在的に大きなアルファベット(記号)を犠牲にして、状態の数を2つまで減らすことができるということです。
私はさまざまなチューリングマシンの例を探していましたが、提示された一般的な例は括弧カッチャー/チェッカーです。基本的に、括弧などの文字列(()()()))()()()
がバランスしているかどうかをチェックします(前の例では、バランスが取れていない場合は0を返します)。
私がこれを3つの状態のマシンにしかできない場合があるので、試してください。私は誰かがこれを理論上の最小値の2に減らすことができるかどうか、そして彼らのアプローチ/状態/シンボルが何であったかを知りたいです!
明確にするために、括弧は空白のテープの間に「挟まれている」ため、上記の例
- - - - - - - (()()()))()()() - - - - - - -
ではテープ上の入力になります。アルファベットが含まれるであろう(
、)
、1
、0
、-
、および*halt*
状態が状態としてカウントされません。
参考までに、私が持っている3つの状態のアプローチは次のとおりです。状態の説明:
State s1: Looks for Closing parenthesis
State s2: Looks for Open parenthesis
State s3: Checks the tape to ensure everything is matched
Symbols: ),(,X
次のようにリストされた遷移:
Action: State Symbol NewState WriteSymbol Motion
// Termination behavior
Action: s2 - *halt* 0 -
Action: s1 - s3 - r
//Transitions of TM
Action: s1 ( s1 ( l
Action: s1 ) s2 X r
Action: s1 X s1 X l
Action: s2 ( s1 X l
Action: s2 X s2 X r
Action: s3 ( *halt* 0 -
Action: s3 X s3 X r
Action: s3 - *halt* 1 -
これらすべてを書き留める非公式な方法は許してください。私はまだこの背後にある理論的な構造を学んでいます。