|
上下文无关文法CFG G是否派生某个串W。采用动态规划(Dynamic Programming)设计一个一个多项式时间的验证算法。 实验方法: 编写一个算法/程序,对于给定的输入,可以在多项式时间内判定ACFG。 实验结果: 交一个程序验证。 |
Input |
输入第一行为一个正整数n,接下来n行为一个满足乔姆斯基范式的文法描述。然后一个正整数m,接下来m行为m个小写字母组成的字符串(长度小于100) 表示m个待测试的串。 |
Output |
对于每一个测试串返回"yes"或者"no",表示该串是否能被文法派生出来。 |
Sample Input |
4 S->AB A->AB|a B->BC|b C->CA|CC|c 3 ab ac bc |
Sample Output |
yes no no |
解题思路:利用动态规划填表(n*n的对角线,n为待测串儿的长度)。在规则中有两种规则分别是A->XY和A->a,于是遍历规则,分成两个规则数组rule1和rule2,目的是为了方便查找。
在填表时,一个格子里可能会有多个变量,比如A->a,B->a,那么A和B都要填在一个格子里;同时