DFA可以判断泛音字符串的语言吗?如果是这样,我该如何证明呢?
如果字符串{a,...,z} *包含每个字母至少出现一次,则称其为泛字母字符。
答案 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)的值。这相当简单,但我会让你完成那一点)