问题
单项选择题
对于以下编号为①、②、③的正规式,正确的说法是()。
①(aa*|ab)*b
②(a|b)*b
③((a|b)*|aa)*b
A.正规式①、②等价
B.正规式①、③等价
C.正规式②、⑧等价
D.正规式①、②、⑧互不等价
答案
参考答案:C
解析:
[分析]
根据正规式r和s的意义,两个正规式等价说明r和s代表的字符串集合相同,因此可用证明集合相等的方法判断。另外,也可构造出与每个正规式对应的自动机进行说明。但是这两个方法实施起来都很繁琐,因此可根据正规式的含义及其代数性质进行判断。
由于题目中给出的正规式①、②和③的共同之处是以字符b结尾,所以只需考虑 (aa*|ab)*、(a|b)*和((a|b)*|aa)*之间的等价关系。从直观的角度理解,正规式(aa*|ab)*表示的是包含空串ε以及a开头的且每个b之后必然出现a的字符串的集合,而(a|b)*表示包含空串ε在内的所有a、b构成的字符串集合,并不限制b的出现方式,正规式((a|b)*|aa) *表示的字符串也不具有必须以a开头的特点,因此,正规式①与②、⑧的等价关系即可
排除。
至于(a|b)*和((a|b)*|aa)*,很明显正规式((a|b)*|aa)*中的“aa”是画蛇添足的部分,因为(a|b)*已经包括了含有“aa”子串的所有a、b字符串,因此(a|b)*b和((a|b)*|aa)*b是等价的。