【发布时间】:2011-07-15 17:30:13
【问题描述】:
有人知道简化布尔表达式的算法吗?
我记得布尔代数和卡诺特映射,但这适用于 EVERITHING 为布尔值的数字硬件。我想要一些考虑到某些子表达式不是布尔值的东西。
例如:
a == 1 && a == 3
这可以翻译成纯布尔表达式:
a1 && a3
但这是表达式是不可约的,而只要有一点算术知识,每个人都可以确定表达式是正确的:
false
有些人知道一些链接?
【问题讨论】:
-
如果
a在语言/运行时被声明为允许这些变量/字段的易失性变量/字段,并且值在另一个线程上在 1 和 3 之间波动,该怎么办?我并不是说这是一个好的设计,但在软件中,“总是”和“从不”通常是相对的术语。 -
这不是问题,实际使用的是 LINQ 提供程序,实际值是查询翻译时的值。如果他们再次执行查询,则将使用更新的值再次运行简化。
-
一般情况下是不可能的。例如
a > 0 and b > 0 and n > 2 and a^n + b^n = c^n总是错误的,但它并不那么容易证明。这意味着您被临时简化所困扰,并且您的问题没有明确的答案(因为这取决于您可能会看到的表达式的性质)。 -
你说得对,但因为这只是一个简化算法,我可以接受任何改进的算法,即使不是最好的解决方案。 mein 场景主要是枚举和引用类型的相等和不同的运算符。带有 == >= >
标签: algorithm boolean-logic boolean boolean-expression