通过给出正则表达式来证明语言是规则的

时间:2010-10-05 21:46:14

标签: regex regular-language

我被这个练习问题困扰(不是标记):

{w是{a,b} *的元素:a的数量是偶数,b的数量是偶数}

我似乎无法想出这个。 在这种情况下,0被认为是偶数。 一些可接受的字符串:{},{aa},{bb},{aabb},{abab},{bbaa},{babaabba}等等

我做过类似的例子,其中a必须是前缀,答案是: (AA)的(BB) 但在这种情况下,它们可以按任何顺序排列。

可以使用Kleene星(*),联合(U),相交(&)和连接。

编辑:这个也有问题

{w是{0,1} *的元素:w = 1 ^ r 0 1 ^ s 0对于某些r,s> = 1}

2 个答案:

答案 0 :(得分:2)

这有点难看,但应该有效:

ε U ( (aa) U (bb) U ((ab) U (ba) (ab) U (ba)) )*

对于第二个:

11*011*0

通常我会在这里使用a+代替aa*

答案 1 :(得分:1)

编辑:未删除re:NullUserException的答案中的注释。

1)如果你首先构建一个可以接受字符串的DFA,我个人认为这个更容易概念化。我没有把它写下来,但我认为你可以用4个州和一个接受州做到这一点。从那里,您可以通过使用this one等算法一次删除一个状态来创建等效的正则表达式。这是可能的,因为DFA和正则表达式可证明是等价的。

2)考虑Kleene星只适用于最近的正则表达式的事实。因此,如果你有两个单独的未分组原子(一个原子本身就是一个正则表达式!),它只适用于第二个(如,ab*将匹配单个a然后任何数字 - 包括0 - b) 。如果你想要存在某些东西,你可以利用这个优势,但是你不确定它有多少。

相关问题