DFA可判定的分析性字符串?

时间:2015-12-01 16:33:31

标签: dfa

DFA可以判断泛音字符串的语言吗?如果是这样,我该如何证明呢?

如果字符串{a,...,z} *包含每个字母至少出现一次,则称其为泛字母字符。

1 个答案:

答案 0 :(得分:1)

是的,它可由DFA决定,虽然需要2 26 (即67108864)状态。

证明这一点的最简单方法可能是Myhill-Nerode theorem。要使用它,您需要根据可以添加到字符串中的内容将所有字符串划分为等价类,以使其成为语言的一部分。 (参见维基百科文章)

为此,在{a,...,z} *中的字符串上定义一个函数 f ,它是字符串中所有字母的集合。显然,对于任何两个字符串 x y f(xy) f(x) F(y)的。 (即 f(x) f(y)的联合

panalphabetic字符串的语言是所有字符串 s ,因此 f(s)是所有字母的集合。也就是说,字符串是否是泛字母的,只能通过应用于该字符串的 f 的值来确定。

现在考虑两个字符串 x y ,以便 f(x) = f(y)。然后,对于任何第三个字符串 z f(xz) = f(x) f(z) = f(y) f(z) = f(yz)。因此, xz 是panalphabetic,当且仅当 yz 是panalphabetic时。因此, x y 是等效的。

因此,只有与 f 的可能值一样多的不同等价类。由于 f(s)是{a,b,...,z}的子集,因此 f(s)只有2个 26 可能的值。这是有限的,因此泛音字符串的语言可以被DFA识别。

(为了表明2 26 是DFA状态的最小数量,您还需要显示如果 f(x)!= f(y ),然后 x y 等价,因此意味着有尽可能多的等价类 f(s)的值。这相当简单,但我会让你完成那一点)