免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: starwing83
打印 上一主题 下一主题

最近入了本SICP,发现自己对Lisp没以前那么反感了……好像括号看起来还不错…… [复制链接]

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
31 [报告]
发表于 2012-03-29 00:41 |只看该作者
http://blog.codingnow.com/2009/11/sequence_c.html

一个可以方便的从两头插入,从两头删除,可变长,可以高效随机访问的 sequence 。在 《C语言接口与实现》里把这个东西简写为 seq ,在 Haskell 里也是。

槽点满满……

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
32 [报告]
发表于 2012-03-29 00:52 |只看该作者
本帖最后由 starwing83 于 2012-03-29 00:57 编辑

回复 29# OwnWaterloo


    一次执行干扰太大,我分别在python和lua里面写了个100重循环计算。最终结果是lua比python慢0.1s,即使是luajit也是这样……为什么会这样……天崩地裂……

代码:


  1. local reverse = string.reverse
  2. local tostring = tostring
  3. for i = 1, 100 do
  4.     local res = 0
  5.     for m = 900,999 do
  6.         for n = 900,999 do
  7.             local x = m*n
  8.             local sx = tostring(x)
  9.             if sx == reverse(sx) and x > res then
  10.                 res = x
  11.             end
  12.         end
  13.     end
  14. end

复制代码


  1. for i in range(100):
  2.     max([x*y for x in range(900,1000) for y in range(900,1000) if str(x*y) == str(x*y)[::-1]])
复制代码
结果:
sw@WX-ACER ~
$ time python test.py ; time luajit test.lua

real    0m1.086s
user    0m0.016s
sys     0m0.031s

real    0m1.162s
user    0m0.015s
sys     0m0.000s

sw@WX-ACER ~
$ time python test.py ; time lua52 test.lua

real    0m1.053s
user    0m0.015s
sys     0m0.000s

real    0m1.295s
user    0m0.000s
sys     0m0.015s


即使是关了垃圾回收lua也没有python快……难道python专门优化过list comprehensive么……

python去掉了list comprehensive,写成了lua的形式,结果居然速度更快了,只有900ms的样子了……为神马………………

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
33 [报告]
发表于 2012-03-29 01:00 |只看该作者
回复 32# starwing83

你是啥机器……  原题目需要多少时间?
我这里lua 5.1.4, python 2.6.2, lua要4秒左右, python要1.7秒。

跟着你扩大到100次发现要算很久…… 中断后改成10次……
lua 38秒 python 16秒……


会不会是double的原因? 这东西计算也慢,tostring也慢……

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
34 [报告]
发表于 2012-03-29 01:08 |只看该作者
回复 32# starwing83

按道理是应该将python改成range(100,1000)好吗……  你居然将lua改成100,999了……
差点让我有了换台笔记本的冲动……

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
35 [报告]
发表于 2012-03-29 01:09 |只看该作者
回复 33# OwnWaterloo


    i5。原题也就一秒的样子。

我找到原因了,因为tostring用的是sprintf("%.14g"………………我哭!!

把tostring改成了("%d"):format(x),立刻时间是python的一半了……

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
36 [报告]
发表于 2012-03-29 01:10 |只看该作者
本帖最后由 starwing83 于 2012-03-29 01:12 编辑

回复 34# OwnWaterloo


    是900……好,我改到100看看,不过100的话应该用不着放大了

改成100不放大,lua比python快0.1s左右:


  1. $ time python test.py ; time lua52 test.lua

  2. real    0m0.941s
  3. user    0m0.000s
  4. sys     0m0.015s

  5. real    0m0.820s
  6. user    0m0.015s
  7. sys     0m0.000s
复制代码
luajit快了一半:

  1. sw@WX-ACER ~
  2. $ time python test.py ; time luajit test.lua

  3. real    0m0.868s
  4. user    0m0.015s
  5. sys     0m0.000s

  6. real    0m0.511s
  7. user    0m0.015s
  8. sys     0m0.000s
复制代码

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
37 [报告]
发表于 2012-03-29 01:18 |只看该作者
回复 35# starwing83

我这里如果改为 ("%d"):format(x) 也降了一半时间…… 但还是比python慢一点……
如果改为 [100,1000) 重复100次, 也还是lua比python慢点点……

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
38 [报告]
发表于 2012-03-29 01:21 |只看该作者
本帖最后由 starwing83 于 2012-03-29 01:22 编辑

回复 37# OwnWaterloo


    我这边是5.2和jit,你用的是啥版本?5.2试试?

我的python是2.7.2,的确51比python慢一点点,但是52比python快一点点,jit是python一半时间。

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
39 [报告]
发表于 2012-03-29 01:26 |只看该作者
回复 37# OwnWaterloo


    lua的标准库是不用内部api的,如果允许的话,用lua_number2int速度会进一步提升,现在仅仅是用的强制类型转换,在double->int的时候也许有性能损失。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
40 [报告]
发表于 2012-03-29 01:27 |只看该作者
回复 38# starwing83

5.1.4……   木有5.2与luajit……


其实跑得快不是绝对指标……
写得快也很重要……  同时又要保持"当需要跑得快时就能做到"的能力……
lua有后者, python有前者……


haskell应该也有后者, 只是我还没学会……
但前者……  斥候编译器就不说了…… 反正C++那里已经习惯了……
800M的platform要啥没啥…… 要啥没啥……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP