一维数组求和如何才能使性能最优
我同学问了我一个腾讯的面试题,一个一维数组存的是整型,把他们全加起来,用for循环加不够优化,怎样改进性能更好.我觉得除了for以外好像也没有什么其他的方法了,不知道有没有谁知道更好的方法 数据有规律的话是可以的,没有规律的话就没有其它办法了 感觉是问题本身有问题。要么如qianyb所说,数据本身有规律,
要么是提问人本身不清楚,现在的编译器优化对这种简单的模型已经可以做得非常好 要从应试的角度回答问题。。。 不过,本人应试能力尤差
想不出来,呵呵 不过,我似乎能肯定,事实上,是有比For更优的办法的
从我的Mathematica编程经验来说,
直接用For的效率明显低于Total,Table等一条函数就能搞定的命令 感觉是问题本身有问题。
要么如qianyb所说,数据本身有规律,
要么是提问人本身不清楚,现在的编译器优化对这种简单的模型已经可以做得非常好
mathe 发表于 2010-5-12 09:17 http://bbs.emath.ac.cn/images/common/back.gif
我想,是不是循环次数太多的时候,循环计数器以及逐个查表的时间开始变得突出起来了。
我用Mathematica作了一个小测试:产生1000万个随机素数,然后分别用For和Total命令计算元素和,发现效率明显不同:
=============================
后来,我发现 空循环1000万次就耗时13.328秒钟
所以,我断定,针对数组求和,肯定有一种优化的很好的方法 可能采用汇编优化过了吧 如数数据没有特殊性,就算法而言,的确没有更好的算法,只有优化一条路了。
不过,现代的编译器已经做得够好的了,如果自己写代码来优化,比较有效的做法是 使用循环展开。 多线程?
页:
[1]
2