楼主: jerryren
2154 2

[R] 从递归比较运算速度:R,Java和Rjava [推广有奖]

  • 1关注
  • 4粉丝

已卖:155份资源

副教授

69%

还不是VIP/贵宾

-

威望
0
论坛币
920 个
通用积分
34.1795
学术水平
19 点
热心指数
27 点
信用等级
16 点
经验
39791 点
帖子
707
精华
0
在线时间
1006 小时
注册时间
2005-2-7
最后登录
2025-8-13

楼主
jerryren 发表于 2015-3-6 14:34:03 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

最近做了个验证直观的测试,分两部分。(一)

      对于C/CPP,两者编写繁琐,前者非OOPL,后者深不可测;比较务实的是学java。

      对于R使用者(估计matlab也类似),在遇到数值迭代、循环嵌套等情形时,借助rJava可以将这些任务交给java做,或在java中调用R完成统计模型。

     为了对比,这里测试了java和R递归计算fibonacci(40)的速度。

      已经有好多测试帖子了,比如这里:http://fengmk2.cnpmjs.org/blog/2 ... n-php-ruby-lua.html

      大体都肯定了jvm的优化力。但对R测试一直没有。先贴源码(写得很简陋):






比较运算速度第一部分




for java

  1. package trier;
  2. public class TRIER

  3. {
  4.     public static void main(String[] args){
  5.     long startTime=System.currentTimeMillis();
  6.     System.out.println(fila(40));
  7.     long endTime=System.currentTimeMillis(); //获取结束时间
  8.     System.out.println("程序运行时间: "+(endTime-startTime)+"ms");
  9.     }
  10.     public static long fila(int num) {
  11.     return (num<3)? 1: fila(num-1)+fila(num-2);
  12.     }
  13. }
复制代码


for R


  1. ptm <- proc.time()
  2. fila=function(x){

  3. if(x<3)return(1)
  4. y=fila(x-1)+fila(x-2)
  5. return(y)
  6. }
  7. fila(40)
  8. proc.time() - ptm
复制代码



结果




for java:

102334155

程序运行时间: 1390ms

for R:

user     system  elapsed

539.28    0.16   542.04




注意:

      1.R的运行时间单位是sec,所以速度差很多(我几近睡着了)。

      2.都是递归算法的比较,尽管存在非递归算法,因此看到有些网友的测试“不公平”。关于空间和时间的厚此薄彼,见http://www.javacodegeeks.com/201 ... g-introduction.html

      3.由于计算机性能不同,请别拿这里的结果去和http://fengmk2.cnpmjs.org/blog/2 ... n-php-ruby-lua.html作比较——我的电脑很破。






(二)比较运算速度第二部分




(一)比较了R和java,java要显著快于R。那么从R中调用java耗的时间是怎样呢?


直观上,可以肯定Rjava慢于java,快于R,下面验证一下


  1. fib$filaBmk()  # or .jcall(fib,"S","filaBmk")
  2. [1] "The result is 102334155. The running time is 1438ms"
复制代码


发现还是很快的,不比java慢多少,那么换个复杂的例子Fibonacci(50)。不要小看增加这10个数,运算时间大增。



rjava的绩效:

fib$filaBmk()

[1] "The result is 12586269025. The running time is 176640ms"



java的绩效:

12586269025

程序运行时间: 163843ms


差别是有,但完全可以接受。R就不做了,估计睡一觉醒来了都没完。



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:递归比较运算速度 rjava Java 运算速度 jav Java Java 递归比较运算速度 Rjava

已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
xddlovejiao1314 + 100 + 100 + 5 + 5 + 5 精彩帖子
niuniuyiwan + 60 + 60 + 5 + 5 + 5 精彩帖子

总评分: 经验 + 160  论坛币 + 160  学术水平 + 10  热心指数 + 10  信用等级 + 10   查看全部评分

本帖被以下文库推荐

沙发
niuniuyiwan 在职认证  发表于 2015-10-20 13:58:12
感谢楼主分享,很精彩的贴,谢谢!
已有 1 人评分经验 论坛币 收起 理由
xddlovejiao1314 + 10 + 3 鼓励积极发帖讨论

总评分: 经验 + 10  论坛币 + 3   查看全部评分

藤椅
xddlovejiao1314 学生认证  发表于 2015-10-20 17:40:22
谢谢分享。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-9 08:22