标题: [原创代码] python统计0到n之间1的个数.py [打印本页]
作者: codegay 时间: 2016-4-1 09:27 标题: python统计0到n之间1的个数.py
- """
- python统计0到n之间1的个数.py
- http://www.acmerblog.com/count-ones-6202.html
- codegay 2016年4月1日 09:08:10
- 傻傻暴力算
- """
- def ff1(n):
- #数字转成字符串,然后统计字符串的数量,最后sum相加得到结果
- result=sum([str(r).count("1") for r in range(n+1)])
- print(result)
- return result
- ff1(99999999)
- #80000000
- #[Finished in 56.1s]
复制代码
作者: codegay 时间: 2016-4-1 10:30
本帖最后由 codegay 于 2016-4-4 02:52 编辑
- #=
- julia统计0到n之间1的个数.jl
- codegay 2016年4月1日 09:29:23
- 写个julia版和python对比下时间
- =#
- function ff1(n)
- result=[length(split(string(r),"1"))-1 for r in 1:n]
- result=sum(result)
- println(result)
- return result
- end
- ff1(99999999)
- #没有找到julia像python count那样直接统计某个字符串数量的方法,吐槽!
- #80000000
- #[Finished in 24.5s] python版是56s
-
-
- function ff2(n)
- result=[count(x->x==1,digits(r,10)) for r in 1:n]
- result=sum(result)
- println(result)
- return result
- end
- #ff2(99999999)
- #julia0.4.3:
- #80000000
- #[Finished in 44.7s]
- #julia0.4.5
- #80000000
- #[Finished in 43.2s]
-
- function ff3(n)
- result=[count(x->x=='1',string(r)) for r in 1:n]
- result=sum(result)
- println(result)
- return result
- end
- #ff3(99999999)
- #julia0.4.3:
- #80000000
- #[Finished in 30.3s]
- #julia0.4.5:
- #80000000
- #[Finished in 36.0s]
复制代码
三个计数方法的速度对比.居然是ff1中length(split(string(r),"1"))-1胜出.
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |