python写算法太慢_对于这种算法,Python与Java相比非常慢

我正在研究算法,并决定将

Java程序从教科书移植到

Python,因为我不喜欢Java开销,特别是对于小程序,以及作为练习.

算法本身非常简单,它只是以阵风的方式从阵列中取出所有三元组,并计算有多少三元组总和为零(例如:[ – 2,7,-5])

public static int count(int[] a) {

int N = a.length;

int cnt = 0;

for (int i = 0; i < N; i++) {

for (int j = i+1; j < N; j++) {

for (int k = j+1; k < N; k++) {

if (a[i] + a[j] + a[k] == 0) {

cnt++;

}

}

}

}

return cnt;

}

我把它移植到:

def count(a):

cnt = 0

ln = len(a)

for i in xrange(0,ln):

for j in xrange(i + 1,ln):

for k in xrange(j + 1,ln):

if a[i] + a[j] + a[k] == 0:

cnt+=1

return cnt

现在测量这些功能正在采取:

java : array of 2000 elements --> 3 seconds

python : array of 2000 elements --> 2 minutes, 19 seconds

UPDATE

python (pypy) : array of 2000 elements --> 4 seconds ( :-) )

当然,这不是一个好的算法,它只是在这里和教科书中展示.我以前用Java和Python做了一些编程,但是没有意识到这个巨大的差异.

问题归结为:如何克服这个问题?进一步来说 :

>这个代码是一个好的端口,还是我错过了一些微不足道的东西?

>转换到另一个运行时Jython,例如解决方案?是否容易将我的代码库保存在eclipse中并只添加一个解释器(编译器?)?或者转换到另一个解释器/编译器只会让事情稍好一点?

现在我在Windows 7上使用python 2.7.3和Java 1.7 32ibts.

我知道关于java / python性能的问题有类似的问题,但是对于python有不同的运行时环境的答案,目前对我没有帮助.

我想知道的是,如果这些运行时间中的一些可以缩小这个巨大的差距并值得探索吗?

更新:

我安装了pypy,现在差异很大……

更新2:

我注意到一些非常有趣的事情:这里的答案中的islice方法在’常规’python上更快,但在pypy上慢得多.即便如此,无论在这个算法中使用常规循环还是islices,pypy仍然可以使用得更快

由于Bakuriu在一个备注运行时环境中注意到了很多东西,但是对于这个算法来说,运行时环境更快,对于任何算法来说都不一定更快……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值