【发布时间】:2011-12-04 05:26:48
【问题描述】:
DFA 中最少需要多少个状态才能接受从右数第 5 个符号为“1”的字符串?字符串是在字母 {0,1} 上定义的。
【问题讨论】:
标签: finite-automata dfa computation-theory
DFA 中最少需要多少个状态才能接受从右数第 5 个符号为“1”的字符串?字符串是在字母 {0,1} 上定义的。
【问题讨论】:
标签: finite-automata dfa computation-theory
Myhill-Nerode theorem 是解决此类问题的有用工具。
这个想法是建立一组字符串的等价类,使用“区分扩展”的想法。考虑两个字符串 x 和 y。如果存在字符串 z 使得 xz 和 yz 中的一个恰好在语言中,那么 z 是一个有区别的扩展, x 和 y 必须属于不同的等价类。每个等价类映射到最小 DFA 中的不同状态。
对于您所描述的语言,让 x 和 y 是任意一对不同的 5 字符字符串 超过 {0,1}。如果它们在位置 n 处不同(从右数,从 1 开始),那么任何长度为 5-n 的字符串 z 都将是一个区别扩展:如果 x 在位置 n 处为 0, 并且 y 在位置 n 处为 1,则 xz 被拒绝并 yz 被接受。这给出了 25 = 32 等价类。
如果s是长度为k(5-k)s(即在左侧添加 0-padding 直到 5 个字符长)。
如果 s 是长度为 k > 5 个字符的字符串,则其等价类由其最后 5 个字符确定。
因此,所有超过 {0,1} 的字符串都属于上述 32 个等价类之一,并且根据 Myhill-Nerode 定理,该语言的最小 DFA 有 32 个状态。
【讨论】: