【发布时间】:2012-03-29 17:06:59
【问题描述】:
制作一个 PDA 来识别以下语言:a 多于 b 的字符串语言
我这几天一直在为这个问题苦苦挣扎,我似乎已经完全陷入了精神障碍。谁能提供一些指导或指导我如何解决这个问题?
【问题讨论】:
标签: automata formal-languages pushdown-automaton
制作一个 PDA 来识别以下语言:a 多于 b 的字符串语言
我这几天一直在为这个问题苦苦挣扎,我似乎已经完全陷入了精神障碍。谁能提供一些指导或指导我如何解决这个问题?
【问题讨论】:
标签: automata formal-languages pushdown-automaton
PDA 可以解决“a 多于 b”的问题。
你所要做的就是:
当输入为a且堆栈为空或顶部有a时,将a压入堆栈;弹出b,如果b 是顶部。
当输入为b且堆栈为空或顶部有b时,将b压入堆栈;弹出a,如果a 在顶部。
最后,当字符串完成时,如果a 位于堆栈顶部,则以空输入进入最终状态。否则,a 的数量不会多于 b 的数量。
【讨论】:
我假设您的意思是a^nb^m 形式的字符串,其中n>m。
这个想法相对简单,对于a,你将它压入堆栈(在一个循环中),对于b,你切换到一个单独的循环以从堆栈中弹出a。如果堆栈是空的,你放弃失败。如果在第一个循环中得到a 或b 以外的任何内容,或者在第二个循环中得到b 以外的任何内容,则放弃失败。
最后,您尝试弹出另一个a,如果堆栈为空,您将放弃失败(即,您在堆栈上的b 至少与a 一样多,可能更多)。如果没有,成功。
编辑:作为旁注,我不相信这是解决这个问题的正确网站,可能对程序员更好。不确定,所以不投票结束。
【讨论】:
a 和 b 之间明确区分(或者如果你会像abbaa一样,你会在第三个字符上堆积下溢,你不知道你是否有足够的a来)。