优化评估成本条件的短路评估方法

时间:2014-09-18 23:31:19

标签: boolean-logic short-circuiting cost-based-optimizer

这是一个抽象的问题,我希望没问题(如果没有,请让我知道一个更好的地方问题):

我有一堆布尔条件,我们称之为A, B, C, D, ...

在我的代码中,我需要使用这些条件来区分几种不同的可能场景。例如,我可以有这样的东西(伪代码):

if ((A and B) or not (C or D)) then process case 1
if (A and (not B) and (C or D)) then process case 2
otherwise process case 3

现在,我可以开始组合这些if语句来优化所需的评估数量,例如:

if (A) then {
    if (B) then {
        process case 1
    } else {
        if (C or D) then process case 2
                    else process case 1
    }
} else {
    if (C or D) then process case 3
                else process case 1
}

但我同样可以“短路”(我使用松散的术语)一些评价方式不同,例如:

if (C or D) then {
    if (A) then {
        if (B) then process case 1
               else process case 2
    } else {
        process case 3
    }
} else {
    process case 1
}

假设评估这些条件的成本存在显着差异,例如:有些需要数据库调用,有些则需要简单的变量空值检查等。那么,对于如何分解代码(假设所有情况都有一定的可能性),可能存在最佳解决方案。

例如,如果A和B的评估很便宜,而C或D的评估很昂贵,那么上面的第一个版本平均可能更好,因为如果A和B结果为真,C和D永远不需要得到评估。然而,如果C和D很便宜,而A或B价格昂贵,那么第二版的平均价格会更好。

是否有一些正式的框架或其他方法来确定这种优化?

0 个答案:

没有答案