Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何优化逻辑表达式_C++_Algorithm - Fatal编程技术网

C++ 如何优化逻辑表达式

C++ 如何优化逻辑表达式,c++,algorithm,C++,Algorithm,我们需要计算很多逻辑表达式,现在我们已经将这些表达式转换为后缀表达式。(后缀表达式更快)。然而,我们需要更快地优化逻辑表达式的计算 有什么想法吗?谢谢。您还需要考虑每个可能结果的频率。也就是说,如果各种结果/结果的发生频率是高度倾斜的,那么您真的希望快速处理常见案例,即使可能会大幅增加不常见案例的运行时成本 例如,假设要检查四个条件是否为真: result = A && B && C && D; 现在假设A==真,概率为0.9,B==真,概率为0

我们需要计算很多逻辑表达式,现在我们已经将这些表达式转换为后缀表达式。(后缀表达式更快)。然而,我们需要更快地优化逻辑表达式的计算


有什么想法吗?谢谢。

您还需要考虑每个可能结果的频率。也就是说,如果各种结果/结果的发生频率是高度倾斜的,那么您真的希望快速处理常见案例,即使可能会大幅增加不常见案例的运行时成本

例如,假设要检查四个条件是否为真:

result = A && B && C && D;
现在假设A==真,概率为0.9,B==真,概率为0.3,C==真,概率为0.7,D==真,概率为0.1。考虑到C/C++短路规则,我们希望对等式重新排序,以便尽快“退出”测试。即,最有效的测试是:

result = D && B && C && A;

如果没有表达式类型的示例,以及每个术语的各种结果频率和联合概率频率,基本上无法帮助您。

欢迎使用堆栈溢出!你能解释一下“逻辑表达式”是什么意思吗?这是一个只使用AND、OR、NOT、XOR等的数学表达式吗?还是比这更复杂,像布尔电路?您提供的详细信息越多,我们就能够更好地提供帮助。如果您向我们展示当前执行此操作的代码,我们可以建议可能性。否则,我的建议是改变随机的事情,看看它是否进展得更快。通常我的建议会比这更好,但它的质量取决于所提供的信息(或缺乏信息):-)是paxdiablo所说的一千倍。向我们展示代码。
-O2
是一个想法。但这可能不是你想要的。查找BDD(二进制决策图),尤其是ROBDS(简化的、有序的BDD)。它们让你在O(n)时间内决定一个布尔公式,其中有n个变量。当然,您必须注意表达式在BDD转换中的大小不会爆炸,这是可能发生的。