我有一些RPN格式的布尔表达式,如下所示:
{0} {1} {2} AND OR // equals: {0} or {1} and {2}计算布尔变量{x}非常昂贵。显然,如果{1}和{2}已经为真,则不需要计算{0},因为在这种情况下,表达式将始终计算为true。
如何预先检测必须先计算哪些布尔变量才能用尽可能少的变量来中止表达式的计算?
我想知道有一个确定值的变量将计算整个表达式为真还是假。
发布于 2017-07-28 19:21:53
您应该更喜欢在预期的子表达式计算数较低的情况下计算表达式。
等。
执行:
发布于 2017-07-28 19:20:55
算法
一种方法是首先展开布尔表达式,然后分解。
常见的因素将告诉您哪些变量可以强制表达式为false。
然后,您可以反转表达式并重复查找强制表达式为true的变量。
示例1
用一个例子来说明这一点,我会写+表示OR和。用于和:
0 + 1.2这已经扩大了。没有共同的因素,因此不可能有一个单一的变量可以强制这是真的。
接下来,我们使用德摩根定律进行反转和扩展。
!(0 + 1.2)
= !0.!(1.2)
= !0.(!1 + !2)这有一个因子为!0,也就是说,如果0是false,我们可以得出整个表达式为false。
示例2
1.2 + 1.3
= 1.(2 + 3)因此,如果1为false,则整个表达式为false。
!(1.2 + 1.3)
=!(1.2).!(1.3)
=(!1 + !2).(!1 + !3)
=!1 + !2.!1 + !2.!3这没有公共因素,因此没有一个变量可以强制表达式为true。
发布于 2017-07-28 19:35:15
https://stackoverflow.com/questions/45380664
复制相似问题