实验B----CFG是P成员

本文介绍了一种解决上下文无关文法(CFG)问题的动态规划方法。通过填充n*n的对角线表格,针对A->XY和A->a的规则,分别创建rule1和rule2数组。为了避免多重赋值和重复存储,引入了特征串概念,使用一维int数组记录26个字母的出现情况,并用二维整型数组T[n][n]存储。在填表过程中,运用位操作(位或)进行更新,而在查找时,通过位与操作判断字符是否在特征串中。代码实现了从testfile.txt文件读取输入数据。
摘要由CSDN通过智能技术生成

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">Problem description</span>
上下文无关文法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都要填在一个格子里;同时࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值