正则表达式 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)* 即任何由1s 和0s 组成的字符串,包括空字符串^

这里 + 表示联合,如果它出现在两个 RE: 和 A U B = B U A (类似地)=> (0 + 1) = (0 + 1) 之间。

加号+ 的含义取决于它出现在的语法:如果表达式是a++ 是上标),则表示多个as 之一,如果a+b 然后+ 表示联合操作ab

a<sup>+</sup> : a, aa, aaa, aaa..... 是任意数量的alength &gt; 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)* 表示任何由0s 和1s 组成的字符串,包括^(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

正则表达式 0(0+1)*0+1(0+1)*1 的 DFA 是多少?

常用正则表达式

原生JavaScript常用的正则表达式

正则表达式IP地址

JS常用正则表达式