
- 自動機理論教程
- 自動機理論 - 首頁
- 自動機理論 - 入門
- 自動機理論 - 歷史
- 自動機理論 - 應用
- 自動機理論術語
- 自動機中字串的基礎知識
- 自動機的集合論
- 語言和文法
- 計算理論中的文法
- 由文法生成的語言
- 喬姆斯基文法分類
- 有限自動機
- 確定性有限自動機 (DFA)
- 非確定性有限自動機 (NFA)
- 從 NFA 到 DFA 的轉換
- DFA 的最小化
- 摩爾機與米利機
- DFA 的補集
- 正則表示式
- 自動機中的正則表示式
- 自動機中的 Arden 定理
- 將正則表示式轉換為有限自動機
- 正則文法的泵引理
- 計算理論中的正則集
- 上下文無關文法
- 上下文無關文法 (CFG)
- 上下文無關文法中的二義性
- 上下文無關語言的閉包性質
- 簡化上下文無關文法
- 喬姆斯基正規化 (CNF)
- 格雷巴赫正規化 (GNF)
- 上下文無關文法的泵引理
- 下推自動機
- 下推自動機 (PDA)
- 下推自動機接受
- 從 CFG 構造 PDA
- 下推自動機和語法分析
- 圖靈機
- 圖靈機 (TM) 基礎
- 圖靈機接受的語言
- 多磁帶圖靈機
- 多軌跡圖靈機
- 非確定性圖靈機
- 半無限磁帶圖靈機
- 線性有界自動機 (LBA)
- 可計算性和不可判定性
- 圖靈語言的可判定性
- 不可判定語言
- 圖靈機停機問題
- 計算理論中的 Rice 定理
- Post 對應問題 (PCP)
- 自動機理論資源
- 自動機理論 - 快速指南
- 自動機理論 - 資源
- 自動機理論 - 討論
摩爾機和米利機
有限自動機可能具有與每個轉換相對應的輸出。有兩種型別的有限狀態機生成輸出 -
- 米利機
- 摩爾機
米利機
米利機是一種 FSM,其輸出取決於當前狀態以及當前輸入。
它可以用一個 6 元組 (Q, ∑, O, δ, X, q0) 來描述,其中 -
Q 是一個有限的狀態集。
∑ 是一個有限的符號集,稱為輸入字母表。
O 是一個有限的符號集,稱為輸出字母表。
δ 是輸入轉換函式,其中 δ: Q × ∑ → Q
X 是輸出轉換函式,其中 X: Q × ∑ → O
q0 是任何輸入都從其開始處理的初始狀態 (q0 ∈ Q)。
米利機的狀態表如下所示 -
當前狀態 | 下一狀態 | |||
---|---|---|---|---|
輸入 = 0 | 輸入 = 1 | |||
狀態 | 輸出 | 狀態 | 輸出 | |
→ a | b | x1 | c | x1 |
b | b | x2 | d | x3 |
c | d | x3 | c | x1 |
d | d | x3 | d | x2 |
上述米利機的狀態圖如下所示 -

摩爾機
摩爾機是一種 FSM,其輸出僅取決於當前狀態。
摩爾機可以用一個 6 元組 (Q, ∑, O, δ, X, q0) 來描述,其中 -
Q 是一個有限的狀態集。
∑ 是一個有限的符號集,稱為輸入字母表。
O 是一個有限的符號集,稱為輸出字母表。
δ 是輸入轉換函式,其中 δ: Q × ∑ → Q
X 是輸出轉換函式,其中 X: Q → O
q0 是任何輸入都從其開始處理的初始狀態 (q0 ∈ Q)。
摩爾機的狀態表如下所示 -
當前狀態 | 下一狀態 | 輸出 | |
---|---|---|---|
輸入 = 0 | 輸入 = 1 | ||
→ a | b | c | x2 |
b | b | d | x1 |
c | c | d | x2 |
d | d | d | x3 |
上述摩爾機的狀態圖如下所示 -

米利機與摩爾機
下表突出顯示了區分米利機和摩爾機的要點。
米利機 | 摩爾機 |
---|---|
輸出取決於當前狀態和當前輸入。 | 輸出僅取決於當前狀態。 |
通常,它比摩爾機具有更少的狀態。 | 通常,它比米利機具有更多的狀態。 |
輸出函式的值是轉換和更改的函式,當對當前狀態進行輸入邏輯時。 | 輸出函式的值是當前狀態和時鐘邊沿變化的函式,每當狀態發生變化時。 |
米利機對輸入的反應更快。它們通常在同一個時鐘週期內做出反應。 | 在摩爾機中,需要更多邏輯來解碼輸出,從而導致更多電路延遲。它們通常在下一個時鐘週期做出反應。 |
摩爾機到米利機
演算法 4
輸入 - 摩爾機
輸出 - 米利機
步驟 1 - 獲取一個空白的米利機轉換表格式。
步驟 2 - 將所有摩爾機轉換狀態複製到此表格式中。
步驟 3 - 檢查摩爾機狀態表中當前狀態及其對應的輸出;如果對於狀態 Qi 輸出為 m,則將其複製到米利機狀態表中 Qi 出現在下一狀態的輸出列中。
示例
讓我們考慮以下摩爾機 -
當前狀態 | 下一狀態 | 輸出 | |
---|---|---|---|
a = 0 | a = 1 | ||
→ a | d | b | 1 |
b | a | d | 0 |
c | c | c | 0 |
d | b | a | 1 |
現在我們應用演算法 4 將其轉換為米利機。
步驟 1 & 2 -
當前狀態 | 下一狀態 | |||
---|---|---|---|---|
a = 0 | a = 1 | |||
狀態 | 輸出 | 狀態 | 輸出 | |
→ a | d | b | ||
b | a | d | ||
c | c | c | ||
d | b | a |
步驟 3 -
當前狀態 | 下一狀態 | |||
---|---|---|---|---|
a = 0 | a = 1 | |||
狀態 | 輸出 | 狀態 | 輸出 | |
=> a | d | 1 | b | 0 |
b | a | 1 | d | 1 |
c | c | 0 | c | 0 |
d | b | 0 | a | 1 |
米利機到摩爾機
演算法 5
輸入 - 米利機
輸出 - 摩爾機
步驟 1 - 計算米利機狀態表中每個狀態 (Qi) 的不同輸出數量。
步驟 2 - 如果 Qi 的所有輸出都相同,則複製狀態 Qi。如果它有 n 個不同的輸出,則將 Qi 分成 n 個狀態,如 Qin,其中n = 0, 1, 2.......
步驟 3 - 如果初始狀態的輸出為 1,則在開頭插入一個新的初始狀態,該狀態輸出 0。
示例
讓我們考慮以下米利機 -
當前狀態 | 下一狀態 | |||
---|---|---|---|---|
a = 0 | a = 1 | |||
下一狀態 | 輸出 | 下一狀態 | 輸出 | |
→ a | d | 0 | b | 1 |
b | a | 1 | d | 0 |
c | c | 1 | c | 0 |
d | b | 0 | a | 1 |
這裡,狀態“a”和“d”分別只給出 1 和 0 輸出,因此我們保留狀態“a”和“d”。但是狀態“b”和“c”產生不同的輸出(1 和 0)。因此,我們將b分成b0, b1,並將c分成c0, c1。
當前狀態 | 下一狀態 | 輸出 | |
---|---|---|---|
a = 0 | a = 1 | ||
→ a | d | b1 | 1 |
b0 | a | d | 0 |
b1 | a | d | 1 |
c0 | c1 | C0 | 0 |
c1 | c1 | C0 | 1 |
d | b0 | a | 0 |