您现在的位置:主页 > 视频空间 >
 
 

Haskell执行速度怎样

时间:2020-05-17 14:17:18

事实上,函数式编程的程序写法会在极大程度上影响效率。如果做基本运算都死机的话(无论多么复杂),首先要考虑代码是否有问题.以下是我的代码,求第100000个fib数列的数。fib=0:1:zipWith(+)fib(tailfib)main=doputStrLn$show$last$take100000fibtime./fib结果:real0m0.952suser0m0.927ssys0m0.025s在处理fibonacci这种结构的时候,如果用递归要注意递归方式。其公式直接转换成代码是树形迭代,其展开的消耗以指数级方式增长而归约的过程也会长很多(详见SICP第一章论述)。在函数式中使用递归,尽量把操作转化成尾递归。不良代码示例:fib0=0fib1=1fibn=(fib(n-1))+(fib(n-2))main=doputStrLn$show$fib100000(此代码占用我100%CPU+300M内存,在我用网页拼音输入法敲完这篇答案,喝了两杯水以后仍未能输出结果。事实上这种方式求第35个数用了5秒,而求第38个数用了20秒。所以求第100000已经是不可能完成的任务。从时间增长上也能看出这种算法的时间消耗不是线性的)BTW:我曾用ProjectEuler的第12题作为测试,用java,python,.net,haskell,c求解,都能在1.6秒之内得到结果。(http://projecteuler.net/problem=12)所以我的结论是如果是基本运算,在算法相同的情况下,以C语言为标尺,各种语言都不会有太大差距。现代语言更多应该考虑的是语言(及其周边类库框架)的高级特性、平台机制,这才是是复杂应用场景下的选择标准。根本:算法>语言
共有评论 11相关评论
发表我的评论
  • 大名:
  • 内容: