gpt4 book ai didi

c++ - if-else 树优化

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:13:29 25 4
gpt4 key购买 nike

我正在尝试为以下问题找到一个好的解决方案:

我的输入是一组 bool 变量 b0bn 和一组 if 语句在表达式(我的 bool 变量的合取)为真时调用某个函数。

例如:

void test(bool b0, bool b1, bool b2, bool b3, bool b4) {
if(b0&&b1) { action1(); }
if(b0&&b1&&b3) { action2(); }
if(b0&&b1&&b4) { action2(); }
if(b0&&b2) { action3(); }
}

显然,可以优化此代码以尽量减少比较次数。

例如:

void test(bool b0, bool b1, bool b2, bool b3, bool b4) {
if(b0) {
if(b1) {
action1();
if(b3) { action2(); }
if(b4) { action2(); }
}
if(b2) { action3(); }
}
}

是否有解决/优化此问题的算法(甚至可能以最佳方式)?
很明显,它可以表示为图形、表格等。但不知何故,我仍然找不到明智的解决方案。

更新:我认为我没有很好地解释问题。将问题视为具有多个输出的真值表。输入是 bool 变量,输出是 Action 。所以它不仅仅是可以用 KV 映射或 Quine–McCluskey 算法解决的问题。猜猜它更复杂。

上面例子的表格是(我省略了“无输出”的情况):

b0| b1| b2| b3| b4 || action1 | action2 | action3  
1 | 1 | 0 | 0 | 0 || 1 | 0 | 0
1 | 1 | 0 | 1 | 0 || 1 | 1 | 0
1 | 1 | 0 | 0 | 1 || 1 | 1 | 0
1 | 0 | 1 | 0 | 0 || 0 | 0 | 1

最佳答案

不要过早优化。

如果您正在考虑此类优化,则必须先进行测量。确保此函数是您在生产代码中的热点。因此,

  • 开启最高优化级别 (-O3)
  • 使用适当的工具定位热点,例如 perf 或 Intel 的 vTune

然后如果你发现这是你的热点。改变它并重新测量。在很多情况下你会感到惊讶。编译器很有可能会为您完成这项优化工作。

尽管如此,我认为您的代码的第二个版本可以更流畅地阅读。

关于c++ - if-else 树优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57284293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com