Algorithm 我们有没有算法来优化Bloolean表达式

Algorithm 我们有没有算法来优化Bloolean表达式,algorithm,compiler-optimization,compiler-construction,Algorithm,Compiler Optimization,Compiler Construction,假设我们有这样一个表达式 (规则1和规则2和规则3) 其中Rule1,Rule2和Rule3是返回true或false的REST调用 我想根据表达式优化REST调用。 在引用的示例中,如果一个规则违反,则不需要评估其他规则 如果是(规则1 | |规则2 | |规则3) 我想立刻解雇所有人,或者试着先把第一件事说成是真的,然后再忽略其他人 编译器就是这样计算布尔表达式的。如果我必须用Java或任何现代编程语言来实现它,我们是否有任何标准算法来支持这个大多数现代语言都支持,仅当第一个参数不能确定整个

假设我们有这样一个表达式

(规则1和规则2和规则3)

其中
Rule1
Rule2
Rule3
是返回true或false的
REST
调用

我想根据表达式优化REST调用。 在引用的示例中,如果一个规则违反,则不需要评估其他规则

如果是
(规则1 | |规则2 | |规则3)
我想立刻解雇所有人,或者试着先把第一件事说成是真的,然后再忽略其他人


编译器就是这样计算布尔表达式的。如果我必须用Java或任何现代编程语言来实现它,我们是否有任何标准算法来支持这个

大多数现代语言都支持,仅当第一个参数不能确定整个表达式时才计算第二个参数。因此,在
(规则1&&Rule2&&Rule3)
中,如果规则1为false,则不会计算规则2。同样在
(规则1 | |规则2 | |规则3)
如果规则1为真,则不计算规则2

确定“第一个参数”的惯例是从左到右。这是因为大多数现代编程语言仍然遵循西方的书写规则。因此,最小化浪费周期的“算法”是:

  • 对于boolean和,最左边的参数应该是最有可能为false的参数,第二个参数应该是下一个最有可能为false的参数,依此类推
  • 对于布尔或最左边的参数应该是最有可能为真的参数,第二个参数yadda yadda
我们如何确定哪一个论点最有可能是错误的?利用我们的技能和判断力,基于我们对系统的了解。或者如果我们没有足够的信息就猜测。这可能是一个容易发生故障的区域

最后,为了解决这个问题:

如果有复杂的表达式,如
(规则1&&(规则2||
规则3)&&Rule4
,在这里我将首先评估规则4

您需要将表达式写成

(Rule4 && Rule1 && (Rule2 || Rule3))

对于
&&
:评估规则1。如果是假的,停下来。否则,请评估规则2。如果是假的,停下来。等等。你还需要什么样的算法?我的意思是说,如果有一个复杂的表达式,比如(规则1&&(规则2 |规则3))&&Rule4,我会先计算规则4,然后再计算其他规则。我们是否有任何标准范例来评估表达式,为每个表达式分配优先级,然后开始逐个评估一般来说,针对此类问题的执行计划Hanks,这就是我想要的