关于应用Arden引理求解正则表达式E3的正确性疑问
Arden引理应用问题解析
嘿,我来帮你理清楚这个Arden引理的应用问题~首先咱们先把核心规则拎明白:
- 正则方程的标准应用形式是
X = RX + S,其中R是循环项、S是基础非循环项 - 关键条件:空串ε不在R生成的语言里(也就是R不能匹配空串)
- 满足条件时,方程的唯一解是
X = R*S
回到你的问题,你的方程是 E3 = 01* + 2E3,首先得把它调整成标准的Arden形式:E3 = 2E3 + 01*。对应标准形式的话:
- R =
2(循环项:每次可以给E3的结果前面追加一个2) - S =
01*(基础项:匹配0后面跟任意多个1,包括0个1的情况,比如0、01、0111)
因为2这个正则表达式绝对不会匹配空串,完全符合Arden引理的应用条件,所以正确的解应该是 E3 = 2*01*。这个表达式表示的是:任意数量的2(包括0个)后面跟着01*匹配的字符串,比如0、20、22011这类,完全贴合原方程的语义。
再看你给出的两个结果:
E3 = 01*2*:顺序搞反了,它表示01*的字符串后面跟任意数量的2,比如012、01122,但原方程里是2在01*的前面,所以这个结果不符合要求。E3 = 01* + 2*:这个结果只包含了两种独立情况——要么是01*,要么是任意数量的2,但原方程允许201这种既有2又有01*的组合,所以这个结果漏掉了这类合法字符串,也是错误的。
内容的提问来源于stack exchange,提问作者Huskey
相关产品推荐
相关产品推荐

