RE:超过{0,1}的奇数长度字符串,恰好包含两个0

时间:2013-09-21 09:56:17

标签: regular-language automata formal-languages

我刚开始学习正式的lang和自动机理论,最近学习了正则表达式,所以我不知道任何复杂的符号,所以请坚持使用基本的符号。

问题是:为{0, 1}上的以下语言编写正则表达式,这是一组包含正好两个0 s的所有奇数长度字符串。

我已完成第一部分(奇数部分),应该是:

(0+1)[(0+1)(0+1)]*+|(或)相同,我相信,我们将其视为+

然而,当我想到恰好有两个0时,它真的搞砸了。我只能看到*只能使用1,因为0的#只限于2。 但是,如果我(11)*,我无法在0内获得1的排列。 (例如无法通过10101获得(11)*

我所知道的:

  1. 只有1才能使用*
  2. 在正则表达式中,只会使用两个0
  3. 制作奇数长度的方法是将奇数长度添加到偶数长度(偶数长度需要在其设置中包含空字符串)
  4. 奇数长度不应使用*,因为2奇数=偶数,所以只有偶数长度才能使用*
  5. 有关可能的提示或答案,请使用01+ / |*(,{{1 }} 只要。我无法理解的其他一些表达方式。

1 个答案:

答案 0 :(得分:2)

常规语言超过{0, 1},这是一组包含正好两个 0 的所有奇数长度字符串。

这种语言的含义是什么?

注意语言字符串可以包含两个 0 以及任意数量的 1 < / strong>这样字符串的总长度是奇数。没有其他限制。 1 0 以任何顺序和任何模式显示。

我们知道even + odd = odd。所以在字符串中包含至少三个长度和奇数的 1 ,因为 0 是两个。

因此正则表达式应该类似于:A 0 B 0 C ,其中A,B,C是子字符串,仅包含 0 和总数A,B,C中的 0 的数量为奇数,因此表达式中的所有数字都不能为1(nul)。

现在因为A,B,C中的 1 的总数是奇数,所以它可以是:(1){{1 }或(2)^

注意:奇数长度的字符串不能为空。

正则表达式:

1