我的朋友问了一个关于下推自动机的问题。 abacaa。我正在看一些类似的问题,但所有问题包含偶数,就像0 ^ a 1 ^ a但现在我有3个值。我发现了an example但我无法将此问题转换为此。
aabbabcc:
read a push 1
read a push 1
read b pop 1
read b pop 1
stack is empty so push 0
read a push 1
read b pop 1
top of stack is 0 so push 0
read c pop 0
read c pop 0
我如何转换abacaa?
答案 0 :(得分:0)
我知道这已经有一段时间了,但万一有人正在寻找类似的问题......为什么要重复这个?
基本思路是这样的:下推自动机有一个堆栈。因此,尽可能多地读入一个,每次都将额外的“a”推送到堆栈。然后阅读b并转到下一个状态。
现在再次阅读尽可能多的内容,再将所有内容推入堆栈。然后读c并转到下一个状态。
现在,只要您正在查看堆栈顶部的“a”,就读取一个。当您查看堆栈底部符号时,请转换到最终接受状态。
如果你有更多的,没有转换,你的字符串不被接受(你没有完成阅读,你无处可去,所以你“崩溃”机器)。否则,如果您在之前的状态中用完了,则永远不会使其进入最终状态,并且不接受您的字符串。 只有当你刚刚阅读了前两次的数量时,你最终会处于接受状态而没有更多的输入要读取,并且字符串被接受。