所有AND条件的布尔表达式优化

时间:2014-12-16 13:24:32

标签: boolean logical-operators boolean-expression tree-traversal boolean-operations

我正在尝试解决简单规则引擎的布尔表达式优化问题。

这是我想要做的,假设我有以下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

Is it useful in C# to apply DeMorgan's theorem to manually optimize boolean expressions in conditional statements (e.g. if conditions)

0 个答案:

没有答案