我被这个练习问题困扰(不是标记):
{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}
答案 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) 。如果你想要存在某些东西,你可以利用这个优势,但是你不确定它有多少。