Board logo

标题: [原创代码] python统计0到n之间1的个数.py [打印本页]

作者: codegay    时间: 2016-4-1 09:27     标题: python统计0到n之间1的个数.py

  1. """
  2. python统计0到n之间1的个数.py
  3. http://www.acmerblog.com/count-ones-6202.html
  4. codegay 2016年4月1日 09:08:10
  5. 傻傻暴力算
  6. """
  7. def ff1(n):
  8.     #数字转成字符串,然后统计字符串的数量,最后sum相加得到结果
  9.     result=sum([str(r).count("1") for r in range(n+1)])
  10.     print(result)
  11.     return result
  12. ff1(99999999)
  13. #80000000
  14. #[Finished in 56.1s]
复制代码

作者: codegay    时间: 2016-4-1 10:30

本帖最后由 codegay 于 2016-4-4 02:52 编辑
  1. #=
  2. julia统计0到n之间1的个数.jl
  3. codegay 2016年4月1日 09:29:23
  4. 写个julia版和python对比下时间
  5. =#
  6. function ff1(n)
  7. result=[length(split(string(r),"1"))-1 for r in 1:n]
  8. result=sum(result)
  9. println(result)
  10. return result
  11. end
  12. ff1(99999999)
  13. #没有找到julia像python count那样直接统计某个字符串数量的方法,吐槽!
  14. #80000000
  15. #[Finished in 24.5s] python版是56s
  16. function ff2(n)
  17. result=[count(x->x==1,digits(r,10)) for r in 1:n]
  18. result=sum(result)
  19. println(result)
  20. return result
  21. end
  22. #ff2(99999999)
  23. #julia0.4.3:
  24. #80000000
  25. #[Finished in 44.7s]
  26. #julia0.4.5
  27. #80000000
  28. #[Finished in 43.2s]
  29. function ff3(n)
  30. result=[count(x->x=='1',string(r)) for r in 1:n]
  31. result=sum(result)
  32. println(result)
  33. return result
  34. end
  35. #ff3(99999999)
  36. #julia0.4.3:
  37. #80000000
  38. #[Finished in 30.3s]
  39. #julia0.4.5:
  40. #80000000
  41. #[Finished in 36.0s]
复制代码
三个计数方法的速度对比.居然是ff1中length(split(string(r),"1"))-1胜出.




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2