在上述问题的正确语法中,生成具有l≠m的字符串a l b m的导数的长度(从S开始的步数)是多少?
(A)最大(l,m)+ 2
(B) l + m + 2
(C) l + m + 3
(D)最大(l,m)+ 3答案: (A)
解释:
最后一个问题的正确语法是(D),即:
S -> AC|CB
C -> aCb|epsilon
A -> aA|a
B -> Bb|b
现在,最优化和直观的方式来生成形式A L B M将是第一次使用的字符串“C – > ACB |小量”的生产规则得到尽可能多的A和B就可以了,这将是分( l,m)。要获得字符串的其余部分,我们可以相应地使用后两个生产规则。从上述语法中正式得出一般格式为a l b m的字符串–
1. S -> AC
2. -> A(aCb)
3. -> ....
4. -> ....
5. -> A(am C bm)
6. -> A(am bm)
7. -> aA(am bm)
8. -> ....
9. -> ....
10. -> a(l-m-1)A(am bm)
11. -> al bm
从上面的一组推导步骤中,我们可以算出总步骤如下:
Production 1 took 1 step : 1 [using S->AC]
Production 2-5 took steps : min(l,m) [using C->aCb]
Production 6 took 1 step : 1 [using C->epsilon]
Production 7-11 took steps : max(l,m)-min(l,m) [using A -> aA|a or B -> Bb|b]
Total steps : max(l,m) + 2
因此,答案应为(A) :max(l,m)+ 2
该解释由Vineet Purswani提供。
这个问题的测验