在大学里,我们一直在学习通用计算机和图灵机的计算理论。出色的理论结果之一是,以可能会变大的字母(符号)为代价,您可以将状态数减少到仅2个。
我一直在寻找不同图灵机的示例,并且提供的常见示例是括号匹配器/检查器。本质上,它检查一串括号(()()()))()()()
是否是否平衡(例如,前面的示例将为不平衡返回0)。
尽我所能,我只能使它成为三态机。我想知道是否有人可以将其降低到理论上的最小值2,以及他们的方法/状态/符号是什么!
为了清楚起见,括号是“夹在”空白磁带之间的,因此在上面的示例中,
- - - - - - - (()()()))()()() - - - - - - -
将是磁带上的输入。该字母将包括(
,)
,1
,0
,-
,和*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年