以下简单实现如何才能sum更快?
private long sum( int [] a, int begin, int end ) {
if( a == null ) {
return 0;
}
long r = 0;
for( int i = begin ; i < end ; i++ ) {
r+= a[i];
}
return r;
}
Run Code Online (Sandbox Code Playgroud)
编辑
背景是有序的.
阅读关于编码恐怖的最新条目,我来到这个网站:http://codility.com,它有这个有趣的编程测试.
无论如何,我在提交中得到了60分中的60分,而且基本上(我认为)是因为这个实现总和,因为那些我失败的部分是性能部分.我得到TIME_OUT_ERROR了
所以,我想知道算法中的优化是否可行.
因此,不允许内置函数或汇编.我可以用C,C++,C#,Java或其他任何方式完成.
编辑
像往常一样,mmyers是对的.我确实对代码进行了分析,我看到大部分时间花在了这个函数上,但我不明白为什么.所以我所做的就是抛弃我的实现并从一个新实现开始.
这次我得到了一个最佳解决方案[根据San Jacinto O(n) - 请参阅下面的MSN评论 - ]
这次我在Codility上获得了81%,我认为这已经足够了.问题是我没有花30分钟.但大约2小时.但我想这让我仍然是一个优秀的程序员,因为我可以解决这个问题,直到找到最佳解决方案:
这是我的结果.
我对codility的结果http://img534.imageshack.us/img534/6804/codility.png
我从来不明白那些"......的组合"是什么,也不知道如何测试"extreme_first"
在128位数字变为现实之前,长64位并保留很长时间是不是更有意义?
32bit-64bit ×1
algorithm ×1
bit ×1
c ×1
c# ×1
c++ ×1
java ×1
long-integer ×1
long-long ×1
optimization ×1