sir_chen 发表于 2010-5-11 22:08:17

一维数组求和如何才能使性能最优

我同学问了我一个腾讯的面试题,一个一维数组存的是整型,把他们全加起来,用for循环加不够优化,怎样改进性能更好.我觉得除了for以外好像也没有什么其他的方法了,不知道有没有谁知道更好的方法

qianyb 发表于 2010-5-12 08:19:09

数据有规律的话是可以的,没有规律的话就没有其它办法了

mathe 发表于 2010-5-12 09:17:40

感觉是问题本身有问题。
要么如qianyb所说,数据本身有规律,
要么是提问人本身不清楚,现在的编译器优化对这种简单的模型已经可以做得非常好

wayne 发表于 2010-5-12 09:18:51

要从应试的角度回答问题。。。

wayne 发表于 2010-5-12 09:26:46

不过,本人应试能力尤差
想不出来,呵呵

wayne 发表于 2010-5-12 09:37:53

不过,我似乎能肯定,事实上,是有比For更优的办法的

从我的Mathematica编程经验来说,
直接用For的效率明显低于Total,Table等一条函数就能搞定的命令

wayne 发表于 2010-5-12 09:57:55

感觉是问题本身有问题。
要么如qianyb所说,数据本身有规律,
要么是提问人本身不清楚,现在的编译器优化对这种简单的模型已经可以做得非常好
mathe 发表于 2010-5-12 09:17 http://bbs.emath.ac.cn/images/common/back.gif

我想,是不是循环次数太多的时候,循环计数器以及逐个查表的时间开始变得突出起来了。
我用Mathematica作了一个小测试:产生1000万个随机素数,然后分别用For和Total命令计算元素和,发现效率明显不同:



=============================
后来,我发现 空循环1000万次就耗时13.328秒钟

所以,我断定,针对数组求和,肯定有一种优化的很好的方法

qianyb 发表于 2010-5-12 10:15:20

可能采用汇编优化过了吧

liangbch 发表于 2010-5-12 10:43:50

如数数据没有特殊性,就算法而言,的确没有更好的算法,只有优化一条路了。
不过,现代的编译器已经做得够好的了,如果自己写代码来优化,比较有效的做法是 使用循环展开。

medie2005 发表于 2010-5-12 11:30:37

多线程?
页: [1] 2
查看完整版本: 一维数组求和如何才能使性能最优