[英]Simplify regular expression
我想简化此正则表达式:
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 :我将+
更改为|
,for +
可以表示“一次或多次”,而交替表示为|
。 符号说明:
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|1)*0
换句话说,要么:
证明这完全是另一回事。 ;-)
我认为它减少为(0*1)*0+|
我设法将给定的正则表达式形式化为ε|(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)*
,当我问问题时我不知道。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.