正则表达式 0(0+1)*0+1(0+1)*1 的 DFA 是多少?
Posted
技术标签:
【中文标题】正则表达式 0(0+1)*0+1(0+1)*1 的 DFA 是多少?【英文标题】:What will be the DFA for the regular expression 0(0+1)*0+1(0+1)*1? 【发布时间】:2012-12-16 20:40:58 【问题描述】:这是我画的DFA-
正确吗?
我很困惑,因为q4
状态对于相同的输入符号有2
不同的转换,这违反了DFA
的规则,但我想不出任何其他解决方案。
【问题讨论】:
另见this question。 chirs 查看我的更新答案我更正了 DFA 确定性是指不允许从同一状态有两个具有相同标签的传出转换。它确实不指的是传入的转换。 【参考方案1】:你的 DFA 不正确。你的 DFA 完全错误,所以我不评论
RE 的 DFA:
0(1 + 0)*0 + 1(1 + 0)*1
语言描述:如果字符串以0
开头,则应以0
结尾,或者如果字符串以1
开头,则应以1
结尾。因此有两个最终状态(状态 5、状态 4)。
state-4:接受1(1 + 0)*1
state-5 :接受0(1 + 0)*0
state-1 :开始状态。
DFA:
编辑:
+正则表达式中的运算符
(0 + 1)* = (1 + 0)*
即任何由1
s 和0
s 组成的字符串,包括空字符串^
。
这里 +
表示联合,如果它出现在两个 RE: 和 A U B = B U A
(类似地)=> (0 + 1) = (0 + 1)
之间。
加号+
的含义取决于它出现在的语法:如果表达式是a+(+
是上标),则表示多个a
s 之一,如果a+b
然后+
表示联合操作a
或b
。
a<sup>+</sup> : a, aa, aaa, aaa.....
是任意数量的a
与length > 1
的语言的字符串。
【讨论】:
阅读this 我相信是 0(0+1)*0+1(0+1)*1 而不是 0(1 + 0)*0 + 1(1 + 0)*1跨度> @Héliosantos 有什么不同吗? @HélioSantos 是的,它是一个正则表达式。我认为 (0+1)* 表示任意数量的零和一,与 (1+0)* 相同。从你的角度来看,我的正则表达式不接受 0010,但它接受。 @HélioSantos(0 + 1)*
表示任何由0
s 和1
s 组成的字符串,包括^
和(O+1)* = (1+0)*
。实际上+
表示联合和A U B
= B U A
。【参考方案2】:
我认为你应该先从 0 开始
0(1 + 0)*0 + 1(1 + 0)*1
【讨论】:
欢迎来到Stack Overflow!一般来说,如果答案包含对代码(或公式)的用途的解释,以及为什么在不介绍其他人的情况下解决了问题,那么答案会更有帮助。以上是关于正则表达式 0(0+1)*0+1(0+1)*1 的 DFA 是多少?的主要内容,如果未能解决你的问题,请参考以下文章
时分的正则表达式 求正则表达式,只能输入年月日时分 比如201812121212