PDA接受包含比b更多的字符串的语言

时间:2012-03-29 17:06:59

标签: automata formal-languages pushdown-automaton

  

制作PDA以识别以下语言:包含多于b的字符串的语言

我几天来一直在努力解决这个问题,我似乎已经完成了一个完整的心理障碍。是否有人能够为我如何解决这个问题提供一些指导或指导?

5 个答案:

答案 0 :(得分:6)

你可以通过PDA解决“比b更多”的问题。

您所要做的就是:

  • 当输入为a并且堆栈为空或顶部有a时,请在堆栈上按a; pop b,如果b是顶部。

  • 当输入为b并且堆栈为空或顶部有b时,请在堆栈上按b; pop a,如果a位于顶部。

  • 最后,当字符串结束时,如果a位于堆栈顶部,则转到具有空输入的最终状态。否则,ab更多{{1}}。

答案 1 :(得分:0)

我假设您指的是a^nb^m形式的字符串,其中n> m

这个想法相对容易,因为a你把它推到堆栈上(在循环中),对于b你切换到一个单独的循环来从堆栈中弹出a。如果堆栈是空的,则放弃失败。如果在第一个循环中你得到ab以外的任何内容,或者在第二个循环中得到b以外的任何内容,那么你就放弃了失败。

最后你尝试弹出另一个a,如果堆栈是空的,你就放弃了失败(即你至少有b a的{​​{1}}在堆栈上,可能更多)。如果没有,成功。

编辑:作为旁注,我不相信这是这个问题的正确网站,对程序员来说可能会更好。不确定但不投票结束。

答案 2 :(得分:0)

关于as和bs的数量,我想出了一个更通用的解决方案,见下图:

PDA for relations between as and 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)

交易的基本信息如下图所示。 enter image description here

这是完整的交易。

  

其中є等于NULL。   $符号在字符串的开头被压入堆栈,并在结尾处弹出,以确定字符串已被完全读取并现在结束。 qo是开始状态,q5是最终状态

这是非确定性下推自动机(NPDA)。因此,由于NPDA,拒绝字符串的事务未显示在其中。 enter image description here

答案 4 :(得分:0)

PDA接受的a大于b的

enter image description here