用于括号匹配的二态图灵机


9

在大学里,我们一直在学习通用计算机和图灵机的计算理论。出色的理论结果之一是,以可能会变大的字母(符号)为代价,您可以将状态数减少到仅2个。

我一直在寻找不同图灵机的示例,并且提供的常见示例是括号匹配器/检查器。本质上,它检查一串括号(()()()))()()()是否是否平衡(例如,前面的示例将为不平衡返回0)。

尽我所能,我只能使它成为三态机。我想知道是否有人可以将其降低到理论上的最小值2,以及他们的方法/状态/符号是什么!

为了清楚起见,括号是“夹在”空白磁带之间的,因此在上面的示例中, - - - - - - - (()()()))()()() - - - - - - -将是磁带上的输入。该字母将包括()10-,和*halt*状态不能算作一个状态。

作为参考,我使用的三种状态方法如下:状态描述:

 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根据理论结果,可以将状态交换为字母,反之亦然。因此,将状态减少到两个意味着您很可能必须使用更大的字母。所以是的,简短的答案是字母表可以根据需要
任意

我认为,在两盘磁带TM中,可以做到这一点而无需额外的符号。
KarolisJuodelė2013年

@Four_FUN你来自麻省理工学院吗?

Answers:


8

只是Raphael回答的“源代码”纲要:这是一个使用相同技巧(在状态q1上)并且带有磁带字母的工作版本:(
_ ( ) [ { / \ 其中是初始空白符号)_

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:我只是为了好玩而编码,试图最小化磁带符号,并且它“似乎” :-)可以工作,所以我决定发布它。
2013年

@Vor。非常感谢您对这个问题的其他投入。这一切告诉我,我需要在这方面做更多的练习。感谢您不遗余力地发布源代码,即使我遵循的是理论。
Four_FUN 2013年

1
@Four_FUN:Rogozhin Universal TM(2,18)是标准的图灵机(即,除了输入内容外,其初始磁带仅包含空白符号),可模拟任意的2标签系统(这是通用模型)。2状态3符号之一是一台薄弱的图灵机(初始磁带需要填充图案的无限序列),并且通用性得以“达到”,模拟了元胞自动机规则110(已证明这是图灵完成的) )。有(声称?)证明标准TM(2,3)无法完成图灵处理。
2013年

7

愚蠢的答案:您的结果保证存在一台具有两种状态的通用图灵机。为Dyck语言构造任何 TM,计算其索引并将其硬编码到通用计算机中。

{X}一个^一个

  • q0

    一个一个^X^
    X^q1个

    ^^X
    ^

  • q1个^+X^X^


  1. 这是正确的,因为机器由内而外地匹配。在法律意见书中,只有X

如果您不介意我问,我的解决方案将如何保证具有两个状态的通用 TM?(顺便说一句,非常聪明的解决方案。请输入您的
心声

1
@Four_FUN:因为您在问题中说:“ ...一个伟大的理论结果是,以潜在的大字母(符号)为代价,您可以将状态数减少到仅2 ...”。 ..这样您还可以选择一台任意的Universal Turing机器并将状态数减少到2。并且,如果您做一些实验,您还将意识到,进行将任意TM转换为等效TM 的自动过程并不困难。2状态TM(如果您不关心最小化字母符号的数量)。
2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.