我想简化这个正则表达式:
0*|0*1(ε|0*1)*00*
我使用了这个身份:
(R+S)*=(R*S*)*=(R*+S*)*
并且不能比这更好:
0*|0*1(0*1)*00*
[(ε|0*1)*=(ε*0*1)*=(0*1)*]
这个正则表达式可以更简化,怎么样?我不知道还能做什么。 :)
编辑1 :我将+
更改为|
,因为+
可能代表“一次或多次”,旁边的替换现在由|
。
符号说明:
1) ε stands for empty word
2) * is Kleene star
3) AB is just a concatenation of languages of regular expressions A and B.
编辑2 :正式证明这减少为(0 * 1)* 0 + |ε:
0*|0*1(ε|0*1)*00* =
= 0*|0*1(0*1)*0+ =
= 0*|(0*1)+0+ =
= 0+|ε|(0*1)+0+ =
= ε0+|(0*1)+0+|ε
= (ε|(0*1)+)0+|ε
= (0*1)*0+|ε
有没有办法将它进一步减少到(0|1)*0|ε
?
答案 0 :(得分:4)
(更新:请参阅编辑历史记录,了解以前错误尝试的漫长而悲伤的故事)。
我(现在)相信这会减少到:
ε|(0|1)*0
换句话说,要么:
证明这是另一回事。 ; - )
答案 1 :(得分:4)
我认为它缩减为(0*1)*0+|
答案 2 :(得分:2)
我设法正式将正则表达式减少到ε|(0 | 1)* 0。 这是证据:
0*|0*1(ε|0*1)*00* =
= 0*|0*1(0*1)*0+ =
= 0*|(0*1)+0+ =
= 0+|ε|(0*1)+0+ =
= ε0+|(0*1)+0+|ε =
= (ε|(0*1)+)0+|ε =
= (0*1)*0+|ε =
= (0*1)*0*0|ε = #
= (0|1)*0|ε
诀窍是在标记为#的步骤中使用身份(A*B)*A*
= (A|B)*
时我不知道问题。