我正在尝试解决简单规则引擎的布尔表达式优化问题。
这是我想要做的,假设我有以下5个条件(其中a,b,c,d,e,f是复杂的布尔表达式)
if (a AND b AND c AND d AND e AND f) then do-1
if (a AND b AND c AND d AND e) then do-2
if (a AND b AND c AND d) then do-3
if (a AND b AND c) then do-4
if (a AND b) then do-5
如果我以线性顺序执行这些条件,我将
- evaluate "a" for 5 times
- evaluate "b" for 5 times
- evaluate "c" for 4 times
- evaluate "d" for 3 times
- evaluate "e" for 2 times
- evaluate "f" for 1 time
我想从中创建一个表达式执行树,以便每个表达式(a,b,c,d,e,f)被评估的最小次数。 完美的解决方案是每个表达式只评估一次。我认为这可以通过树创建来实现,其中所有这些条件都是树的一部分。
树可能看起来像这样
if(a AND b) then do-5 {
if(c) then do-4 {
if(d) then do-3 {
if(e) then do-2 {
if(f) then do-1
}
}
}
}
我的问题是 - 如何从上面列出的布尔表达式中创建此树?
相关问题:
Algorithm for evaluating nested logical expression
Converting an expression to conjunctive normal form with a twist