【问题标题】:refactoring boolean equation重构布尔方程
【发布时间】:2010-10-30 06:06:00
【问题描述】:

假设你有一个像这样的布尔规则/表达式

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

您想将其转换为尽可能多的 AND 表达式,就像这样

A AND D AND F
A AND E AND F
B AND D AND F
B AND E AND F

你只是在减少 OR,所以它变成了

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

布尔代数中是否有一个属性可以做到这一点?

【问题讨论】:

    标签: parsing boolean expression equation


    【解决方案1】:

    看看DeMorgan's定理。链接指向与电子门有关的文档,但理论保持不变。

    它说,如果我们这样做,任何逻辑二进制表达式都保持不变

    1. 将所有变量更改为它们的补码。
    2. 将所有 AND 操作更改为 OR。
    3. 将所有 OR 操作更改为 AND。
    4. 取整个表达式的补码。

    (引用上述链接文档)

    【讨论】:

    • 我看不出如何使用(或需要)德摩根定理来执行问题中的重构。你能提供一个可行的解决方案吗?
    • 不容易。 De Morgan's 告诉您如何在保持相同最终结果的同时转换布尔表达式。在上面,您可以使用步骤 2 和 3 来确定是否转换表达式以最大化 AND(例如,您的 AND 是否比 OR 多,反之亦然?)
    • 德摩根定理不能立即适用。
    • 这里适用的是合取大于析取的分配性质,而不是德摩根定理。 所有重言式规则“告诉您如何在保持相同最终结果的同时转换布尔表达式”,它们只是转换不同的东西。没有 AND..NOT 或 OR..NOT 德摩根定理在此不再适用于蕴涵等价规则 ({A OR NOT B} == {A IMP B})。
    【解决方案2】:

    据我所知,布尔代数不能仅使用 AND 和 OR 运算来构建。 如果您只有这两个操作,您将无法接收 NOT 操作。

    您可以将任何表达式转换为全套布尔运算。

    这里有一些完整的套装:

    • 与与非
    • 或与否

    【讨论】:

    • 是的,但不是询问的内容。
    【解决方案3】:

    假设您可以使用 NOT 操作,您可以仅使用 AND 或仅使用 OR 重写任何布尔表达式。在你的情况下:

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

    我倾向于使用工程简写来写:

    • AND 作为产品(。或什么都没有);
    • OR 作为总和 (+);和
    • 不作为单引号 (')。

    所以:

    (A+B)(D+E)F
    

    算术的推论实际上对于分解项非常有用。

    De Morgan's Law:

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

    所以你可以将你的表达式改写为:

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

    【讨论】:

      【解决方案4】:

      您的示例是利用 AND 对 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
      

      【讨论】:

        【解决方案5】:

        您可能有兴趣阅读有关Karnaugh maps 的信息。它们是简化布尔表达式的工具,但您也可以使用它们来确定所有单独的表达式。我不确定您如何将其推广到可以编写程序的算法中。

        【讨论】:

          【解决方案6】:

          您可能对Conjunctive Normal form 或其兄弟Disjunctive normal form 感兴趣。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-02-16
            • 1970-01-01
            • 2016-07-30
            • 1970-01-01
            相关资源
            最近更新 更多