[已解决] haskell 如何高效地计算部分和?
对于一个整数数组 x,现在要计算它其中每个元素所在位置之前的各个元素的和,
例如,
x = [1,2,3,4,5,6,7]
要得到如下的结果
s = [0,1,3,6,10,15,21]
用 c 的方法,只要计算 6 次加法就可以得到以上结果。
用 haskell, 能这样高效地做吗?
我想到的很直接的做法是,
subsum x = map sum $ init $ inits x
但是觉得可能做会多余的计算。
不知道各位以为如何。谢谢了先。
[ 本帖最后由 drunkedcat 于 2009-3-29 20:52 编辑 ]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
需要多少就 take 多少不就得了。
大家的方法都很绚。
我来个笨的。
先写成scheme 一会再来翻译。。。。
复制代码
嫌那个 0?那用 scanl1 吧
复制代码
不是第一个零,是最后一个数,也就是全体元素的和,这个是不需要的。
MMMIX 一出手,更加简练,佩服,学习ing。只是要加上一个 init。
复制代码
win_hate 兄说的正是,我也刚好想到这里了。
subsum xs = 0 : [x+y | (x,y) <- zip xs $ subsum xs]
c 中可以优化算法,进而提高程序运行效率
haskell 中需要考虑优化算法吗?
编译器会优化吧?
这个怎么样?
复制代码
要带这个参数
-XParallelListComp