这是一个有点抽象的问题,我希望没关系(如果没有,请告诉我一个更好的地方问它):
我有一堆布尔条件,我们称它们为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 很贵,则平均而言,第二版更好。
是否有一些正式的框架或其他方法来确定这种优化?