找回密码
 欢迎注册
查看: 16535|回复: 12

[原创] 一维数组求和如何才能使性能最优

[复制链接]
发表于 2010-5-11 22:08:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
我同学问了我一个腾讯的面试题,一个一维数组存的是整型,把他们全加起来,用for循环加不够优化,怎样改进性能更好.我觉得除了for以外好像也没有什么其他的方法了,不知道有没有谁知道更好的方法
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-12 08:19:09 | 显示全部楼层
数据有规律的话是可以的,没有规律的话就没有其它办法了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-12 09:17:40 | 显示全部楼层
感觉是问题本身有问题。
要么如qianyb所说,数据本身有规律,
要么是提问人本身不清楚,现在的编译器优化对这种简单的模型已经可以做得非常好
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-12 09:18:51 | 显示全部楼层
要从应试的角度回答问题。。。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-12 09:26:46 | 显示全部楼层
不过,本人应试能力尤差
想不出来,呵呵
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-12 09:37:53 | 显示全部楼层
不过,我似乎能肯定,事实上,是有比For更优的办法的

从我的Mathematica编程经验来说,
直接用For的效率明显低于Total,Table等一条函数就能搞定的命令
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-12 09:57:55 | 显示全部楼层
感觉是问题本身有问题。
要么如qianyb所说,数据本身有规律,
要么是提问人本身不清楚,现在的编译器优化对这种简单的模型已经可以做得非常好
mathe 发表于 2010-5-12 09:17


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

截图00.png

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

所以,我断定,针对数组求和,肯定有一种优化的很好的方法
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-12 10:15:20 | 显示全部楼层
可能采用汇编优化过了吧
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-12 10:43:50 | 显示全部楼层
如数数据没有特殊性,就算法而言,的确没有更好的算法,只有优化一条路了。
不过,现代的编译器已经做得够好的了,如果自己写代码来优化,比较有效的做法是 使用循环展开。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-12 11:30:37 | 显示全部楼层
多线程?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-4-28 03:36 , Processed in 0.059512 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表