我不知道什么是形式语言和正则表达式 这个自动机:
DFA自动机
我知道'b'或'a'的实例必须是偶数。 起初我以为该语言是:
L = {((a ^ i)(b ^ j)| i(mod2)= j(mod2)= 0,i,j> = 0}
但是自动机可以从'b'开始,因此语言不正确。 另外,我发现的正则表达式也不匹配((aa)* +(bb))-
例如无法获得abab。
答案 0 :(得分:2)
我通过逐渐删除节点(顺序:3、1、2、0)得到的正则表达式是:
(aa|bb|(ab|ba)(bb|aa)*(ab|ba))*
据我所知,这是最简单的方法。 (我很想知道是否有人有一个更简单的减少方法-本周我实际上正在对此材料进行测试!)
我们首先添加一个新的开始和接受状态。每个旧的接受状态(在这种情况下只有一个)通过ε过渡链接到新的接受状态:
接下来,我们剔除状态3。我们需要保留通过状态3的所有路径。在这种情况下,我们添加了从状态0返回自身的路径,从状态0到状态2的路径以及状态2回到本身:
我们对状态1进行同样的操作
我们可以稍微简化一下:我们将回圈过渡用逗号连接起来。 (最后,这将变成联合运算符(|
或⋃
等,具体取决于您的符号。)
接下来,我们将删除状态2,并将所有内容压缩到一个大循环中:
循环成为恒星;我们删除了最后一个状态,所以我们只有从开始状态到结束状态的过渡,并与一个大正则表达式相连:
这就是我们的正则表达式!
您与语言定义非常接近。如果您可以放宽一些,那就是这样:
L = { w | w contains an even number of 'a's and 'b's }
定义的问题是,每次都以w
开头字符串a
,而唯一的限制是a
和{ {1}}。