正则表达式(0*1*)*
和(0 | 1)*
是否相同?
有人可以为此提供证明或直观证明吗?我觉得这是真的,但我正在努力编写逐步的证明。
答案 0 :(得分:3)
两个不同的正则表达式或两个语法可以生成与它们相同的语言,但是正则表达式或语法不相同。有一种从正则表达式构造非确定性有限状态自动机的标准方法,也有从构造确定性有限状态自动机的标准方法。该方法将为所讨论的正则表达式产生两个不同的自动机。尽管每个人都可以识别相同的字符串,但是它们会经历不同的状态。
答案 1 :(得分:0)
正则表达式是等效的。
我没有完全严格的证明,但是挥舞着手。
让R1 = (0*1*)*
和R2 = (0 | 1)*
。这些都是字母A = {0, 1}
上的正则表达式。
第1部分:
0 | 1
是集合{0, 1}
。 0
是0*1*
的元素(因为0 ∈ 0*
和ɛ ∈ 1*
和0 ∘ ɛ = 0
),1
也是如此。
因此0 | 1
是0*1*
的子集,这意味着(0 | 1)*
是(0*1*)*
的子集,即R2 ⊆ R1
。
第2部分:
R2
涵盖了字母A
上的所有可能单词。也就是说,每个仅包含字符0
和1
的字符串都在R2
中。 (这对我来说似乎很明显;证明可能涉及*
和/或归纳法的定义。)
因此R1 ⊆ R2
。
通过结合第1部分和第2部分,我们得到R1 = R2
。