通过斐波那契数列查看Python和R的计算速度

来源:互联网 发布:合肥八度网络怎么样 编辑:程序博客网 时间:2024/06/08 14:38

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。


以下,我们通过Python和R来处理斐波那契数列(Fibonacci sequence),从而查看两种主流语言的计算速度(8G ThinkPad T470,i5 7代,R已经用memory.limit把内存扩大到最大)。


首先是python代码:

import timedef fib(n):#斐波那契公式    if n==1 or n==0:        return 1    else:        return fib(n-2)+fib(n-1)    def spend_times(n):#计算时间的公式    start = time.time()    [fib(i) for i in range(n)]    end = time.time()    return 'cost:{}'.format(end-start)print spend_times(10)print spend_times(20)print spend_times(30)print spend_times(40)print spend_times(50)

以下是R代码:


fib <- function(n){  if(n == 1||n == 0){    return(1)  } else {    return(fib(n-2)+fib(n-1))  } }spend_times <- function(n){  start_time = Sys.time()  for(i in 1:n){    fib(i-1)  }  end_time = Sys.time()  return(end_time-start_time)}print(spend_times(10))print(spend_times(20))print(spend_times(30))print(spend_times(40))


最后是python和R的运算时间(秒):

n

python

R

10

0.00

0.00

20

0.00

0.11

30

0.56

11.20

40

79.27

等了好久都没出来,我给停掉了

 

该算法非常耗费时间,主要是因为算法没有进行优化,所以有大量的重复计算,比如F(10)=F(9)+F(8),F(9)=F(8)+F(7),F(8),重复量非常大,所以也正是验证两种主流语言计算速度的好方法。

从上面的结果可以看出,python在处理运算量非常大的算法的时候,效率要远远的高于R。



原创粉丝点击