[英]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.