
- 自動機理論教程
- 自動機理論 - 首頁
- 自動機理論 - 入門
- 自動機理論 - 歷史
- 自動機理論 - 應用
- 自動機理論術語
- 自動機中字串的基礎知識
- 自動機的集合論
- 語言和文法
- 計算理論中的文法
- 由文法生成的語言
- 喬姆斯基文法分類
- 有限自動機
- 確定性有限自動機 (DFA)
- 非確定性有限自動機 (NFA)
- 從 NFA 到 DFA 的轉換
- DFA 的最小化
- Moore 機與 Mealy 機
- DFA 的補集
- 正則表示式
- 自動機中的正則表示式
- 自動機中的 Arden 定理
- 將正則表示式轉換為有限自動機
- 正則文法的泵引理
- 計算理論中的正則集
- 上下文無關文法
- 上下文無關文法 (CFG)
- 上下文無關文法中的二義性
- 上下文無關語言的閉包性質
- 簡化上下文無關文法
- 喬姆斯基正規化 (CNF)
- 格雷巴赫正規化 (GNF)
- 上下文無關文法的泵引理
- 下推自動機
- 下推自動機 (PDA)
- 下推自動機的接受
- 由 CFG 構造 PDA
- 下推自動機和語法分析
- 圖靈機
- 圖靈機 (TM) 基礎知識
- 圖靈機接受的語言
- 多磁帶圖靈機
- 多軌跡圖靈機
- 非確定性圖靈機
- 半無限磁帶圖靈機
- 線性有界自動機 (LBA)
- 可計算性和不可判定性
- 圖靈語言的可判定性
- 不可判定語言
- 圖靈機停機問題
- 計算理論中的 Rice 定理
- Post 對應問題 (PCP)
- 自動機理論資源
- 自動機理論 - 快速指南
- 自動機理論 - 資源
- 自動機理論 - 討論
DFA 最小化
使用 Myhill-Nerode 定理進行 DFA 最小化
演算法
輸入 - DFA
輸出 - 最小化的 DFA
步驟 1 - 為所有狀態對 (Qi, Qj) 繪製表格,這些狀態對不一定直接連線 [最初所有狀態均未標記]
步驟 2 - 考慮 DFA 中的每個狀態對 (Qi, Qj),其中 Qi ∈ F 且 Qj ∉ F 或反之,並標記它們。[此處 F 是最終狀態集]
步驟 3 - 重複此步驟,直到我們無法再標記任何狀態 -
如果存在未標記的狀態對 (Qi, Qj),則如果對於某個輸入字母表,狀態對 {δ (Qi, A), δ (Qi, A)} 被標記,則標記它。
步驟 4 - 將所有未標記的狀態對 (Qi, Qj) 組合起來,並使它們成為簡化後的 DFA 中的單個狀態。
示例
讓我們使用演算法 2 來最小化下面顯示的 DFA。

步驟 1 - 我們為所有狀態對繪製表格。
a | b | c | d | e | f | |
a | ||||||
b | ||||||
c | ||||||
d | ||||||
e | ||||||
f |
步驟 2 - 我們標記狀態對。
a | b | c | d | e | f | |
a | ||||||
b | ||||||
c | ✔ | ✔ | ||||
d | ✔ | ✔ | ||||
e | ✔ | ✔ | ||||
f | ✔ | ✔ | ✔ |
步驟 3 - 我們將嘗試傳遞地標記狀態對,用綠色複選標記。如果我們將 1 輸入到狀態“a”和“f”,它將分別轉到狀態“c”和“f”。(c, f) 已被標記,因此我們將標記對 (a, f)。現在,我們將 1 輸入到狀態“b”和“f”;它將分別轉到狀態“d”和“f”。(d, f) 已被標記,因此我們將標記對 (b, f)。
a | b | c | d | e | f | |
a | ||||||
b | ||||||
c | ✔ | ✔ | ||||
d | ✔ | ✔ | ||||
e | ✔ | ✔ | ||||
f | ✔ | ✔ | ✔ | ✔ | ✔ |
步驟 3 之後,我們得到了未標記的狀態組合 {a, b} {c, d} {c, e} {d, e}。
我們可以將 {c, d} {c, e} {d, e} 重新組合為 {c, d, e}
因此我們得到了兩個組合狀態 - {a, b} 和 {c, d, e}
因此,最終最小化的 DFA 將包含三個狀態 {f}、{a, b} 和 {c, d, e}

使用等價定理進行 DFA 最小化
如果 X 和 Y 是 DFA 中的兩個狀態,如果它們不可區分,我們可以將這兩個狀態組合成 {X, Y}。如果至少存在一個字串 S,使得 δ (X, S) 和 δ (Y, S) 中的一個是接受狀態而另一個不是接受狀態,則這兩個狀態是可區分的。因此,當且僅當所有狀態都可區分時,DFA 才是最小的。
演算法 3
步驟 1 - 所有狀態 Q 分為兩個分割槽 - 最終狀態和非最終狀態,並表示為 P0。分割槽中的所有狀態都是 0th 等價的。取一個計數器 k 並將其初始化為 0。
步驟 2 - 將 k 加 1。對於 Pk 中的每個分割槽,如果它們是 k 可區分的,則將 Pk 中的狀態劃分為兩個分割槽。如果存在輸入 S 使得 δ(X, S) 和 δ(Y, S) 是 (k-1) 可區分的,則此分割槽中的兩個狀態 X 和 Y 是 k 可區分的。
步驟 3 - 如果 Pk ≠ Pk-1,則重複步驟 2,否則轉到步驟 4。
步驟 4 - 將 kth 等價集組合起來,並將它們作為簡化後的 DFA 的新狀態。
示例
讓我們考慮以下 DFA -

q | δ(q,0) | δ(q,1) |
---|---|---|
a | b | c |
b | a | d |
c | e | f |
d | e | f |
e | e | f |
f | f | f |
讓我們將上述演算法應用於上述 DFA -
- P0 = {(c,d,e), (a,b,f)}
- P1 = {(c,d,e), (a,b),(f)}
- P2 = {(c,d,e), (a,b),(f)}
因此,P1 = P2。
簡化後的 DFA 中有三個狀態。簡化後的 DFA 如下所示 -

Q | δ(q,0) | δ(q,1) |
---|---|---|
(a, b) | (a, b) | (c,d,e) |
(c,d,e) | (c,d,e) | (f) |
(f) | (f) | (f) |