括弧マッチングのための2状態チューリングマシン


9

大学では、一般的な計算理論とチューリングマシンについてより具体的に学びました。優れた理論上の結果の1つは、潜在的に大きなアルファベット(記号)を犠牲にして、状態の数を2つまで減らすことができるということです。

私はさまざまなチューリングマシンの例を探していましたが、提示された一般的な例は括弧カッチャー/チェッカーです。基本的に、括弧などの文字列(()()()))()()()がバランスしているかどうかをチェックします(前の例では、バランスが取れていない場合は0を返します)。

私がこれを3つの状態のマシンにしかできない場合があるので、試してください。私は誰かがこれを理論上の最小値の2に減らすことができるかどうか、そして彼らのアプローチ/状態/シンボルが何であったかを知りたいです!

明確にするために、括弧は空白のテープの間に「挟まれている」ため、上記の例 - - - - - - - (()()()))()()() - - - - - - -ではテープ上の入力になります。アルファベットが含まれるであろう()10-、および*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 -

これらすべてを書き留める非公式な方法は許してください。私はまだこの背後にある理論的な構造を学んでいます。


より大きなアルファベットを使用できますか?
ラファエル

@Raphael理論上の結果によれば、状態をアルファベットに交換したり、その逆を行ったりできます。したがって、状態を2つに減らすということは、おそらくより大きなアルファベットを使用する必要があることを意味します。だからはい、簡単な答えは次のとおりですアルファベットは必要なだけ大きくすることができます
Four_FUN

2テープのTMでは、これは余分な記号なしで実行できると思います。
KarolisJuodelė2013

@Four_FUN MIT出身ですか?

回答:


8


_ ( ) [ { / \ _

q0:  _ -> accept  // accept on empty string and on balanced parenthesis
     ( -> {,R,q1  // mark the first open "(" with "{" and goto q1
     ) -> reject  // reject if found unbalanced ")"
     \ -> /,L,q0  // go left
     / -> \,R,q0  // go right

q1:  ( -> [,R,q1  // replace "(" with "[" and continue ...
     ) -> /,L,q1  // ... until first ")", replace it with "/" and goto left
     [ -> \,R,q1  // found matching "(" bracket, goto right and search for another ")"
     _ -> reject  // no ")" found for the first "{", reject
     { -> \,R,q0  // this must be the last match, goto q0 and check if it is true
     \ -> /,L,q1  // go left
     / -> \,R,q1  // go right

チューリングマシンのオンラインシミュレーターを使用すると、作業中にそれを確認できます。ソースコードは次のとおりです。

0 _ Y r halt
0 ( { r 1
0 ) N r halt
0 \ / l 0
0 / \ r 0
1 ( [ r 1
1 ) / l 1
1 [ \ r 1
1 _ N r halt
1 { \ r 0
1 \ / l 1
1 / \ r 1

最後の注記:この手法を限界まで押し上げる方法を知りたい場合は、「小さなユニバーサルチューリング」のY. Rogozhinによる2つの状態と18のシンボルを持つユニバーサルチューリングマシンの構造を読んで(そして理解してみてください:-) マシン」


ソースコードのみを表示する回答は、コンピューターサイエンスにとって適切ではないと判断しましたか?;)
ラファエル

1
@Raphael:私はあなたに同意しますが、私のものはあなたの補遺のように見ることができます(詳細を確認していなくても問題ないようです)。これについてのメモを追加します。
2013

1
@Raphael:テープシンボルを最小限に抑えるために、単に楽しみのためにコード化しましたが、動作するように見えます:-)なので、投稿することにしました。
Vor

@Vor。この問題について追加のご意見をいただき、誠にありがとうございます。このことからわかることは、これについてはもっと練習が必要だということです。理論は私が求めていたものでしたが、それでもソースコードを投稿していただきありがとうございます。
Four_FUN

1
@Four_FUN:Rogozhin Universal TM(2,18)は、任意の2タグシステム(ユニバーサルモデル)をシミュレートする標準のチューリングマシンです(つまり、入力とは異なり、最初のテープには空白記号のみが含まれています)。2状態3シンボル1は弱いチューリングマシンであり(最初のテープはパターンの無限シーケンスで満たされる必要があります)、セルオートマトンルール110(チューリング完了であることが証明されています)をシミュレートして、普遍性が「到達」します)。標準のTM(2,3)はチューリング完全ではないという(主張された?)証拠があります。
Vor

7

ばかげた答え:あなたの結果は、2つの状態を持つユニバーサルチューリングマシンがあることを約束します。構築するディック言語のためのTMを、そのインデックスを計算し、ユニバーサルマシンにそれをハードコーディング。

{#,(,),x}a^a

  • q0

    )aa^)x^
    )x^q1

    (^(^x
    )^#

  • q1(^+x^#x^


  1. x

あなたが私に尋ねても構わないとしても、私の解決策はどのように正確に2つの状態を持つユニバーサル TMを約束しますか?(非常にスマートなソリューションです。入力を受け付けます)
Four_FUN

1
@Four_FUN:あなたの質問で言うので:「...大きな理論上の結果の1つは、潜在的に大きなアルファベット(記号)を犠牲にして、状態の数を2つだけに減らすことができるということです...」。 ..そのため、任意のUniversal Turingマシンを選択して、状態の数を2つだけに減らすこともできます。さらに、いくつかの実験を行うと、任意のTMを同等のTMに変換する自動手順を作成することは難しくないことにも気付くでしょう。2状態TM(アルファベット記号の数の最小化を気にしない場合)。
Vor
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.