運用 Quine–McCluskey 演算法進行精確布林簡化
在數位邏輯設計中,將布林表達式化簡至最簡形式是減少邏輯閘數量、優化電路延遲與節省晶片面積的關鍵步驟。手動進行簡化時,我們常依賴布林代數定理(如分配律、結合律、德摩根定律及共識定理)或卡諾圖(K-map)。然而,卡諾圖在處理超過 4 個變數時,由於維度增加,人類視覺難以直觀辨識相鄰項,極易出錯。
本「布林代數簡化計算器」採用系統化的 Quine–McCluskey(精確最小覆蓋) 演算法。與啟發式演算法不同,Quine–McCluskey 方法透過表格法系統化地尋找所有主隱含項(Prime Implicants),並透過質隱含項表(Prime Implicant Chart)找出覆蓋所有最小項(Minterms)的最小集合。這種方法在數學上保證能求得絕對的最簡形式。
本工具同時計算並輸出兩種標準最簡形式:
- 最簡積之和 (SOP):由多個 AND 項(乘積項)以 OR(求和)連接而成,直接對應 AND-OR 兩級邏輯閘實作。
- 最簡和之積 (POS):由多個 OR 項(和項)以 AND(乘積)連接而成,直接對應 OR-AND 兩級邏輯閘實作。
在實際電路設計中,SOP 與 POS 所需的邏輯閘與輸入端數量可能大不相同。透過同時對比這兩種形式,工程師能評估何者在物理實作上最具效益。
支援的布林表示法與輸入規範
本工具支援多種學術與工程界常用的布林代數書寫系統,並允許在同一個表達式中自由混合使用:
| 運算子 | 支援的書寫格式與符號 | 範例 |
|---|---|---|
| AND | 隱含相乘、·、*、AND、&&、邏輯符號 ∧ |
AB、A·B、A AND B |
| OR | +、OR、` |
|
| NOT | 單引號 '、!、NOT、邏輯符號 ¬ |
A'、!A、NOT A |
| XOR | ^、XOR、邏輯符號 ⊕ |
A ^ B、A XOR B |
| NAND | NAND、邏輯符號 ⊼ |
A NAND B |
| NOR | NOR、邏輯符號 ⊽ |
A NOR B |
輸入限制與常數
- 變數限制:最多支援 6 個不同的單字母變數(例如
A至F)。 - 長度限制:輸入表達式長度必須在 2,000 個字元以內。
- 常數:支援直接輸入常數
0與1。 - 多字母連寫:連續的字母(如
ABC)會被自動解讀為A AND B AND C。
診斷面板與詳細簡化步驟說明
當你輸入表達式後,工具會即時顯示「一覽」診斷面板,提供以下關鍵指標以供分析:
- 變數(標籤:
變數):偵測到的變數列表。 - 值為 1 的列(標籤:
值為 1 的列):對應的最小項(Minterms)編號列表。 - 主隱含項(標籤:
主隱含項):演算法找到的主隱含項總數。 - 必要主隱含項(標籤:
必要主隱含項):無法被其他隱含項替代的質隱含項數量。 - 文字數量,簡化前 → 簡化後(標籤:
文字數量,簡化前 → 簡化後):顯示變數出現次數的變化,直接反映電路簡化效果。 - 方法(標籤:
方法):顯示為「Quine–McCluskey(精確最小覆蓋)」。
在「詳細簡化步驟」區域,工具會輸出完整的推導文本,逐步還原計算過程:
- 變數與列數宣告:例如「此表達式使用了
‹count›個變數(‹variables›),因此真值表有‹rows›列。」或「此表達式使用了一個變數‹variables›,因此真值表有‹rows›列。」或「此表達式未使用任何變數,因此其計算結果為單一常數。」 - 最小項與最大項標記:標示「其在 Σm(
‹minterms›) 的列上等於 1,在 ΠM(‹maxterms›) 的列上等於 0。」 - 主隱含項合併:顯示「盡可能合併相鄰且值為 1 的列,得出
‹count›個主隱含項:‹list›。」 - 必要主隱含項判定:列出「必要主隱含項(至少一列的唯一剩餘覆蓋):
‹list›。」若無則顯示「沒有必要主隱含項:每個值為 1 的列都可以透過多種方式覆蓋。」 - 覆蓋其餘列:若有未覆蓋的最小項,顯示「使用最少數量的額外項來覆蓋其餘未覆蓋的列:
‹list›。」若已完全覆蓋則顯示「必要主隱含項已覆蓋了所有值為 1 的列,因此求和已完成。」 - POS 形式推導:說明「對值為 0 的列進行相同的合併操作,可得出最簡和之積
‹pos›。」 - 一致性核對:最後確認「兩種最簡形式在真值表的所有
‹rows›列上均與原始表達式相符。」
此外,工具亦提供以下輸出與控制項以方便操作:
- 真值表(標籤:
真值表):一個完整的真值表,逐列顯示變數、原始表達式(標籤:表達式)與簡化後的表達式(標籤:最簡 SOP),以便逐列驗證兩者完全相符。 - 複製結果(標籤:
複製結果):一鍵將簡化後的輸出複製至剪貼簿。 - 插入運算子(標籤:
插入運算子):介面上的控制按鈕,方便在表達式中插入特定的運算子。 - 嘗試輸入表達式(標籤:
嘗試輸入表達式):可點擊的範例捷徑,快速載入預設表達式,包括「合併項」(共識範例)、「否定積」(De Morgan 範例)及「三向 XOR」(XOR 範例)。 - 清除(按鈕:
清除):一鍵清除當前輸入框內容的按鈕。
異常處理與錯誤提示
若輸入的表達式不符合語法規範,系統會精確指出錯誤原因與位置,以便修正:
- 未輸入內容:提示「請輸入布林表達式。」
- 字元超限:提示「請將表達式長度保持在 2,000 個字元以內。」
- 非法字元:提示「「
‹char›」(第‹position›個字元)不是布林運算子、變數或常數。」 - 語法錯誤/缺少運算元:提示「在第
‹position›個字元附近缺少運算元 — 請檢查是否有懸空的 +、· 或 ⊕。」 - 括號不對稱:提示「括號不對稱 — 請增加或刪除括號。」
- 變數過多:提示「此表達式使用了
‹count›個不同的變數;本簡化器最多支援 6 個變數。」
對於恆真式(Tautology)或恆假式(Contradiction),工具會顯示特定的常數狀態訊息:
- 恆真:「此表達式的值恆為 1:任何數值組合都能使其為真。」
- 恆假:「此表達式的值恆為 0:沒有任何數值組合能使其為真。」
- 已是最簡:若輸入已無法再簡化,則顯示「你的表達式已經是最簡積之和。」
隱私與本地運算說明
本工具的布林表達式簡化與真值表計算完全在你的網頁瀏覽器中進行,所有運算均在本地裝置執行,數據絕不會上傳至任何外部伺服器。
常見問題
為什麼最多只支援 6 個變數?
6 個變數已經會產生 64 列的真值表,這幾乎是手動閱讀和核對的極限。超過這個限制,雖然理論上仍能進行最小化,但本頁面所建立的推導過程和真值表將不再適合用作直觀的證明。對於更複雜的函數,輸出檔案的邏輯設計軟件會是更合適的選擇。
最簡形式是如何求得的?
本工具會建立完整的真值表,將相鄰的值為 1 的列合併為主隱含項(Quine–McCluskey 方法),保留必要主隱含項,並以精確最小覆蓋來涵蓋其餘所有列。對於積之和(SOP)形式,所得結果保證是最簡的(並非啟發式演算法);而對值為 0 的列執行相同的步驟,則可得出和之積(POS)。
本工具能識別哪些表達式書寫方式?
本工具支援所有常見的書寫慣例,並可自由混合使用:工程格式(AB + A'C,帶有隱含的 AND 以及代表 NOT 的單引號)、編程格式(A &&!B || C、A ^ B)、邏輯符號(¬ ∧ ∨ ⊕ ⊼ ⊽)以及英文單詞(A AND B OR NOT C、NAND、NOR)。多個字母連寫(例如 ABC)代表 A AND B AND C,而 AND、OR、NOT、XOR、NAND、NOR 等單詞將始終被視為運算子。
SOP 和 POS 結果之間有什麼區別?
兩者描述的是同一個函數。積之和(SOP)將多個 AND 項以 OR 連接(例如 AB' + BC),直接對應 AND–OR 電路;和之積(POS)則將多個 OR 因式以 AND 連接(例如 (A + B)(B' + C)),對應 OR–AND 電路。根據函數的不同,其中一種形式所需的邏輯閘可能比另一種少,因此本工具會同時顯示這兩種形式。