【发布时间】:2012-06-08 16:03:04
【问题描述】:
我正在研究一种算法,并希望使我的代码更高效。我的代码使用简单的算术和比较语句。但是,我想替换 if 语句,因为它们可能很耗时。这段代码将运行在百万次,所以即使是最轻微的改进也是值得赞赏的。请回答!这是代码-
int_1024 sqcalc(int_1024 s,int_1024 f){
f=f*20;
s=s-81;
s=s-(f*9);
if(s>=0){
return 9;
}
s=s+f;
s=s+17;
if(s>=0){
return 8;
}
s=s+f;
s=s+15;
if(s>=0){
return 7;
}
s=s+f;
s=s+13;
if(s>=0){
return 6;
}
s=s+f;
s=s+11;
if(s>=0){
return 5;
}
s=s+f;
s=s+9;
if(s>=0){
return 4;
}
s=s+f;
s=s+7;
if(s>=0){
return 3;
}
s=s+f;
s=s+5;
if(s>=0){
return 2;
}
s=s+f;
s=s+3;
if(s>=0){
return 1;
}
s=s+f;
s=s+1;
if(s>=0){
return 0;
}
}
我希望替换 if 检查,因为我“认为”它们会使算法变慢。有什么建议吗?int_1024 是一个具有 1000 位的 ttmath 变量,所以保存它可能是一个不错的选择?除法或乘法这样的大数字可能很慢,所以我尝试使用加法,但无济于事。请帮助。
【问题讨论】:
-
使用缩进让它更清晰,一切看起来都像骗子。
-
这个函数有什么作用?您是否对此进行了分析以确认 if 语句有问题?
-
我“认为”它们使算法变慢。 使用优化别想,分析并仅依赖关于你可以看到的结果。
-
遇到这样的问题,您通常最好重新考虑整个算法。
if与条件分支的速度一样快,因此您需要找到一种方法来尽可能减少检查或更便宜的检查。这意味着更有效的算法。甚至可能无法加快速度,但您需要先了解为什么速度很慢,然后才能做到这一点。 -
由于此方法仅通过添加
f或一些常量int来操作s,并比较s >= 0,您应该能够在最开始时弄清楚您想要返回什么算法。它甚至不需要条件语句(在我看来,就像一些操作和 mod 操作一样)。
标签: c++ algorithm optimization