[英]Minimum number of states in DFA
DFA 中接受字符串(基数为 3,即三元形式)中与 5 模 6 一致的最小数状态?
我试过了,但做不到。
乍一看,它似乎有 6 个状态,但可以进一步最小化。
我们先来看看状态转移表:
这里,状态 q 0 , q 1 , q 2 ,...., q 5 分别对应于模 0,1,2,..., 5 除以 6 时的状态。 q 0是我们的初始状态,由于我们需要模 5,因此我们的最终状态将是 q 5
从上面的状态转换表中得出的一些观察结果:
在相同输入上转换到相同状态的状态可以合并为单个状态。
注意:最终状态和非最终状态永远不能合并。
因此,我们可以将 q 0 , q 2 , q 4合并在一起,将 q 1 , q 3合并在一起,使状态 q 5远离整理。
最终的最小 DFA 有 3 个状态,如下所示:
让我们看一下语言中的几个字符串:
12 = 1*3 + 2 = 5 ~ 5 (mod 6)
102 = 1*9 + 0*3 + 2 = 11 ~ 5 (mod 6)
122 = 1*9 + 2*3 + 2 = 17 ~ 5 (mod 6)
212 = 2*9 + 1*3 + 2 = 23 ~ 5 (mod 6)
1002 = 1*18 + 0*9 + 0*9 + 2 = 29 ~ 5 (mod 6)
我们注意到所有的字符串都以 2 结尾。这是有道理的,因为 6 是 3 的倍数,从 3 的倍数得到 5 的唯一方法是加上 2。基于此,我们可以尝试解决字符串的问题与 3 模 6 一致:
10 = 3
100 = 9
120 = 15
210 = 21
1000 = 27
没有出现真正的模式,但请考虑一下:每个以 0 结尾的基数为 3 的数字肯定可以被 3 整除。偶数也可以被 6 整除; 所以基数 3 表示以 0 结尾的奇数必须与 3 mod 6 一致。因为 3 的所有幂都是奇数,我们知道如果字符串中 1 的个数是奇数,我们就有一个奇数。
所以,我们的条件是:
要获得此类 DFA 中的最小状态数,我们可以使用以空字符串开头的 Myhill-Nerode 定理:
我们在长度为 3 的新字符串上没有看到新的等价类; 所以,我们知道我们已经看到了所有的等价类。 它们如下:
这意味着我们语言的最小 DFA 有五个状态。 这是 DFA:
[0]
^
|
0
|
----->[e]--2-->[2]<-\
| ^ |
| | |
1 __1__/ /
| / /
| | 1
V V |
[1]--2-->[12]
^ |
| |
\___0___/
(未图示的转换是各自状态的自循环)。
注意:我希望这个 DFA 有 6 个状态,正如 Welbog 在另一个答案中指出的那样,所以我可能错过了一个等价类。 然而,在检查了几个例子并思考它在做什么之后,DFA 似乎是正确的:你只能通过将 2 作为最后一个符号(绝对必要)来接受状态 [12],并且你只能进入状态 [12]从状态 [1] 开始,您必须看到奇数个 1 才能到达 [1] ...
几乎所有模数问题的最小状态数是模数的基础。 一般策略是每个模数都有一个状态,因为模数之间的转换与之前的数字无关。 例如,如果您处于状态r4
(代表x = 4 (mod 6)
),并且您遇到1
作为下一个输入,则您的新模数为4x6+1 = 25 = 1 (mod 6)
,因此转换从输入1
上的r4
到r1
。 你会发现 start state 和r0
可以合并,总共有 6 个 state。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.