2009-05-31 19 views
1

比方說,你有一個布爾規則/表情像這樣重構布爾方程

(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 (...) 

有沒有在布爾代數屬性,將做到這一點?

回答

3

你的例子利用的,並通過對分佈性,或如圖所示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 
5

看看DeMorgan's定理。鏈接指向與電子門有關的文件,但理論依然如此。

它說,任何邏輯的二進制表示將保持不變,如果我們

  1. 更改所有變量它們的互補。
  2. 變化都與運算以OR值。
  3. 將所有OR操作更改爲AND。
  4. 取補全部表達式。

(從上面的鏈接的文檔報價)

+0

我不明白你如何使用(或需要)德摩根定理在問題中執行重構。你能否提供一個有效的解決方案? – freespace 2009-05-31 16:10:18

+0

不容易。德摩根告訴你如何轉換布爾表達式,同時保持相同的最終結果。在上面,你可以使用步驟2和步驟3來確定是否轉換表達式以最大化AND(例如,你是否具有比OR更多的AND,反之亦然?) – 2009-05-31 16:13:54

+0

DeMorgan定理不能立即適用。 – 2009-05-31 19:12:24

0

據我所知布爾代數不能只用AND和OR運算構建。 如果您只有這兩項操作,則無法接受NOT操作。

您可以將任何表達式轉換爲布爾運算的全套

下面是一些全臺:

  • AND和NOT
  • OR和NOT
0

假設你可以使用NOT操作,你可以重寫,只有與運算或僅任何布爾表達式OR值。你的情況:

(A OR B) AND (D OR E) AND F 

我傾向於使用工程簡寫以上和寫:(或沒有)

  • 並作爲產品;
  • OR爲和(+);和
  • 沒有一個單引號(')。

所以:

(A+B)(D+E)F 

的必然結果算術實際上是保方面非常有用。

通過De Morgan's Law

(A+B) => (A'B')' 

所以,你可以重寫你的表達:

(A+B)(D+E)F 
(A'B')'(D'E')'F 
2

你可能有興趣在閱讀Karnaugh maps。它們是簡化布爾表達式的工具,但您也可以使用它們來確定所有單個表達式。我不確定你怎麼可能把這個推廣到你可以編寫程序的算法中。