比方說,你有一個布爾規則/表情像這樣重構布爾方程
(A OR B) AND (D OR E) AND F
你想把它轉換成許多,只表現爲可能的,像這樣
A AND D AND F
A AND E AND F
B AND D AND F
B AND E AND F
你只是減少或公司,使其成爲
(A AND D AND F) OR (A AND E AND F) OR (...)
有沒有在布爾代數屬性,將做到這一點?
比方說,你有一個布爾規則/表情像這樣重構布爾方程
(A OR B) AND (D OR E) AND F
你想把它轉換成許多,只表現爲可能的,像這樣
A AND D AND F
A AND E AND F
B AND D AND F
B AND E AND F
你只是減少或公司,使其成爲
(A AND D AND F) OR (A AND E AND F) OR (...)
有沒有在布爾代數屬性,將做到這一點?
你的例子利用的,並通過對分佈性,或如圖所示here。
您所需要做的就是先後應用。例如,使用x*(y+z) = (x*y)+(x*z)
(其中*表示AND和+表示OR):
0. (A + B) * (D + E) * F
1. Apply to the first 2 brackets results in ((A+B)*D)+((A+B)*E)
2. Apply to content of each bracket results in (A*D+B*D)+(A*E+B*E)
3. So now you have ((A*D+B*D)+(A*E+B*E))*F
4. Applying the law again results in (A*D+B*D)*F+(A*E+B*E)*F
5. Apply one more time results in A*D*F+B*D*F+A*E*F+B*E*F, QED
看看DeMorgan's定理。鏈接指向與電子門有關的文件,但理論依然如此。
它說,任何邏輯的二進制表示將保持不變,如果我們
(從上面的鏈接的文檔報價)
據我所知布爾代數不能只用AND和OR運算構建。 如果您只有這兩項操作,則無法接受NOT操作。
您可以將任何表達式轉換爲布爾運算的全套。
下面是一些全臺:
假設你可以使用NOT操作,你可以重寫,只有與運算或僅任何布爾表達式OR值。你的情況:
(A OR B) AND (D OR E) AND F
我傾向於使用工程簡寫以上和寫:(或沒有)
所以:
(A+B)(D+E)F
的必然結果算術實際上是保方面非常有用。
(A+B) => (A'B')'
所以,你可以重寫你的表達:
(A+B)(D+E)F
(A'B')'(D'E')'F
你可能有興趣在閱讀Karnaugh maps。它們是簡化布爾表達式的工具,但您也可以使用它們來確定所有單個表達式。我不確定你怎麼可能把這個推廣到你可以編寫程序的算法中。
您可能會感興趣Conjunctive Normal form或其兄弟,Disjunctive normal form。
我不明白你如何使用(或需要)德摩根定理在問題中執行重構。你能否提供一個有效的解決方案? – freespace 2009-05-31 16:10:18
不容易。德摩根告訴你如何轉換布爾表達式,同時保持相同的最終結果。在上面,你可以使用步驟2和步驟3來確定是否轉換表達式以最大化AND(例如,你是否具有比OR更多的AND,反之亦然?) – 2009-05-31 16:13:54
DeMorgan定理不能立即適用。 – 2009-05-31 19:12:24