问题描述
这是一个旧的硬件问题,我必须找出每个给定字符串访问 q\loop 状态的次数:
bb: 5
阿巴:0
阿爸:8
巴巴布:11
我了解第一个字符串如何访问状态5次而第二个字符串不被接受,但我不知道第3个和第4个字符串的过程。如果有人能走遍第三或第四个字符串访问过的州,我将不胜感激,因为我一直被卡住
解决方法
这个PDA匹配回文。它是如何做到的?它在堆栈中查找 P
并将其替换为 aPa
或 bPb
,然后将堆栈中的 a
与输入中的 a
进行匹配。 b
也是如此。它不确定地替换 P
。
让我们来看看#3。我们将重点关注 Q_loop
,为了简单起见,我将其称为 L
。堆栈的顶部将是最右边的字符。
- 我们第一次到达
L
时,输入是abba
,堆栈是$P
。我们将不确定地遵循e,P->a
转换。 - 输入为
abba
,栈为$aPa
。我们将遵循a,a->e
过渡。 - 输入:
bba
,堆栈:$aP
。关注e,P->b
。 - 输入:
bba
,堆栈:$abPb
。关注b,b->e
。 - 输入:
ba
,堆栈:$abP
。关注e,P->e
。 - 输入:
ba
,堆栈:$ab
。关注b,b->e
。 - 输入:
a
,堆栈:$a
。关注a,a->e
。 - 输入:e,堆栈,
$
。遵循e,$->e
并在下一个状态接受。