我刚开始学习正式的lang和自动机理论,最近学习了正则表达式,所以我不知道任何复杂的符号,所以请坚持使用基本的符号。
问题是:为{0, 1}
上的以下语言编写正则表达式,这是一组包含正好两个0
s的所有奇数长度字符串。
我已完成第一部分(奇数部分),应该是:
(0+1)[(0+1)(0+1)]*
(+
与|
(或)相同,我相信,我们将其视为+
)
然而,当我想到恰好有两个0
时,它真的搞砸了。我只能看到*
只能使用1
,因为0
的#只限于2
。
但是,如果我(11)*
,我无法在0
内获得1
的排列。 (例如无法通过10101
获得(11)*
。
我所知道的:
1
才能使用*
0
*
,因为2奇数=偶数,所以只有偶数长度才能使用*
。 有关可能的提示或答案,请使用0
,1
,+
/ |
,*
,(
,{{1 }} 只要。我无法理解的其他一些表达方式。
答案 0 :(得分:2)
常规语言超过{0, 1}
,这是一组包含正好两个 0
的所有奇数长度字符串。
这种语言的含义是什么?
注意语言字符串可以包含两个 0
以及任意数量的 1
< / strong>这样字符串的总长度是奇数。没有其他限制。 1
和 0
以任何顺序和任何模式显示。
我们知道even
+ odd
= odd
。所以在字符串中包含至少三个长度和奇数的 1
,因为 0
是两个。
因此正则表达式应该类似于:A
,其中A,B,C是子字符串,仅包含 0
B 0
C 0
和总数A,B,C中的 0
的数量为奇数,因此表达式中的所有数字都不能为1
(nul)。
现在因为A,B,C中的 1
的总数是奇数,所以它可以是:(1){{1 }或(2)^
。
注意:奇数长度的字符串不能为空。
正则表达式:
1