L = {a ^ n b ^ n c ^ n | n> = 1}
这种语言非常严格,例如a bs总是会出现在b&#39之前。
我遇到的另一种类型是可以是任何订单的语言。
L = {a,b} *其中a的数量> b的数量
这种语言可以是任何一种语言的顺序,而且它不会卡在原地。
For the languages that are structured this machine conveys the general idea
但我找不到机器的模式,因为它可以是任何字符顺序。
例如
L = {a,b,c} * | a等于b和c的最小值
这些语言的模式是什么?什么是设计这些的真正有用的技术?
答案 0 :(得分:0)
你的#a>的例子#b是一种用于无上下文语言的经典语言,由下推自动机识别。这些设备仅沿输入移动一次并具有下推式存储(堆栈)。基本思路是为输入中读取的每个字符串添加一个a;对于你,你删除一个。找到一种处理前缀的方法,其中b比a更多。然后,在读完整个输入后,你确切地接受了在堆栈上有一些左边的东西。
如果允许使用辅助磁带,可以在图灵机中轻松实现。只需使用一个作为堆栈。如果您在上一个示例中涉及更多数字,请使用更多辅助磁带。
如果没有辅助磁带,则必须使用读写磁头进行更多操作。例如,使用结构:
input%stack1%stack2%stack3%
其中%是在其他任何地方都不会出现的分隔符号。另一种选择是不属于下推自动机的方法:标记符号。例如,#a> #B:
这些是您可以用于这些计数问题的两种标准技术。当然,正如人们已经评论过的那样,对于每种语言,你都必须调整你的解决方案。