制作PDA以识别以下语言:包含多于b的字符串的语言
我几天来一直在努力解决这个问题,我似乎已经完成了一个完整的心理障碍。是否有人能够为我如何解决这个问题提供一些指导或指导?
答案 0 :(得分:6)
你可以通过PDA解决“比b更多”的问题。
您所要做的就是:
当输入为a
并且堆栈为空或顶部有a
时,请在堆栈上按a
; pop b
,如果b
是顶部。
当输入为b
并且堆栈为空或顶部有b
时,请在堆栈上按b
; pop a
,如果a
位于顶部。
最后,当字符串结束时,如果a
位于堆栈顶部,则转到具有空输入的最终状态。否则,a
比b
更多{{1}}。
答案 1 :(得分:0)
我假设您指的是a^nb^m
形式的字符串,其中n
> m
。
这个想法相对容易,因为a
你把它推到堆栈上(在循环中),对于b
你切换到一个单独的循环来从堆栈中弹出a
。如果堆栈是空的,则放弃失败。如果在第一个循环中你得到a
或b
以外的任何内容,或者在第二个循环中得到b
以外的任何内容,那么你就放弃了失败。
最后你尝试弹出另一个a
,如果堆栈是空的,你就放弃了失败(即你至少有b
a
的{{1}}在堆栈上,可能更多)。如果没有,成功。
编辑:作为旁注,我不相信这是这个问题的正确网站,对程序员来说可能会更好。不确定但不投票结束。
答案 2 :(得分:0)
关于as和bs的数量,我想出了一个更通用的解决方案,见下图:
其中a> b表示比bs更多,因此< bs更多。 b,a = b。
Z表示堆栈的底部,A / B是堆栈符号。
我很兴奋,因为这个PDA分离了3种不同的状态。在你的问题中,你可以设置一个> b表示最终状态,让a = b为开始状态。
如果你想更进一步,你可以使用这个PDA轻松生成一个> = b,a - b> = 1,2< = a - b< = 3等的PDA,这是迷人。
答案 3 :(得分:0)
这是完整的交易。
其中є等于NULL。 $符号在字符串的开头被压入堆栈,并在结尾处弹出,以确定字符串已被完全读取并现在结束。 qo是开始状态,q5是最终状态
答案 4 :(得分:0)