$30 off During Our Annual Pro Sale. View Details »

RubyとPythonはどちらが速いのか

 RubyとPythonはどちらが速いのか

Lightening talk at #tqrk13

Hiroki Yoshioka

June 29, 2019
Tweet

More Decks by Hiroki Yoshioka

Other Decks in Programming

Transcript

  1. Copyright Drecom Co., Ltd. All Rights Reserved. !1
    3VCZͱ1ZUIPO͸
    ͲͪΒ͕଎͍ͷ͔ʁ
    URSL
    ٢ԬͻΖ͖

    View Slide

  2. Copyright Drecom Co., Ltd. All Rights Reserved. !2
    自己紹介
    吉岡ひろき
    Webエンジニア
    irohiroki / いろ
    登壇、執筆 少々

    View Slide

  3. Copyright Drecom Co., Ltd. All Rights Reserved. !3
    今どきのゲーム 何でも自動
    ʰࠇ͍࠭യʱͷࣗಈङΓ

    View Slide

  4. Copyright Drecom Co., Ltd. All Rights Reserved. !4
    今どきのゲーム 何でも自動
    自動戦闘
    自動移動
    自動アイテム処分
    自動装備
    自動パーティ編成

    View Slide

  5. Copyright Drecom Co., Ltd. All Rights Reserved. !5
    今どきのゲーム 何でも自動
    自動戦闘
    自動移動
    自動アイテム処分
    自動装備
    自動パーティ編成

    組合せ最適化問題
    ʢ͍ΘΏΔφοϓαοΫ໰୊ʣ

    View Slide

  6. Copyright Drecom Co., Ltd. All Rights Reserved. !6
    組合せ最適化問題
    近似解法
    ミツバチコロニー最適化など
    厳密解法
    動的計画法
    バックトラッキング
    分岐限界法
    など

    View Slide

  7. Copyright Drecom Co., Ltd. All Rights Reserved. !7
    あるブログ

    View Slide

  8. Copyright Drecom Co., Ltd. All Rights Reserved. !8
    ίʔυ͸3VCZ൛ͱಉ͚ͩ͡Ͳ

    ʢ1ZUIPOͷํ͕ʣ଎͍Έ͍ͨɻ
    ͳ͔ͥ஌Βͳ͍͚Ͳʂ

    View Slide

  9. Copyright Drecom Co., Ltd. All Rights Reserved. !9
    喧嘩売ってる?

    View Slide

  10. Copyright Drecom Co., Ltd. All Rights Reserved. !10
    検証
    安定版
    Ruby 2.6.3
    Python 3.7.3
    分岐限界法

    View Slide

  11. Copyright Drecom Co., Ltd. All Rights Reserved. !11
    分岐限界法
    # Value Cost V/C
    1 14 4 3.5
    2 18 6 3
    3 5 2 2.5
    4 3 2 1.5
    Cap=6

    View Slide

  12. Copyright Drecom Co., Ltd. All Rights Reserved. !12
    分岐限界法
    V:0, C:0
    UB:20
    # Value Cost V/C
    1 14 4 3.5
    2 18 6 3
    3 5 2 2.5
    4 3 2 1.5
    Cap=6
    UB = 14 + 18 * (6 - 4) / 6

    View Slide

  13. Copyright Drecom Co., Ltd. All Rights Reserved. !13
    分岐限界法
    V:0, C:0
    UB:20
    V:14, C:4
    UB: 20
    # Value Cost V/C
    1 14 4 3.5
    2 18 6 3
    3 5 2 2.5
    4 3 2 1.5
    Cap=6
    + I1
    UB = 14 + 18 * (6 - 4) / 6

    View Slide

  14. Copyright Drecom Co., Ltd. All Rights Reserved. !14
    分岐限界法
    V:0, C:0
    UB:20
    V:14, C:4
    UB: 20
    V: , C:10
    UB:
    # Value Cost V/C
    1 14 4 3.5
    2 18 6 3
    3 5 2 2.5
    4 3 2 1.5
    Cap=6
    + I1
    + I2

    View Slide

  15. Copyright Drecom Co., Ltd. All Rights Reserved. !15
    分岐限界法
    V:0, C:0
    UB:20
    V:14, C:4
    UB: 20
    V: , C:10
    UB:
    V:14, C:4
    UB:19
    # Value Cost V/C
    1 14 4 3.5
    2 18 6 3
    3 5 2 2.5
    4 3 2 1.5
    Cap=6
    + I1
    + I2 - I2
    UB = 14 + 5 * (6 - 4) / 2

    View Slide

  16. Copyright Drecom Co., Ltd. All Rights Reserved. !16
    分岐限界法
    V:0, C:0
    UB:20
    V:14, C:4
    UB: 20
    V:0, C:0
    UB: 18
    V: , C:10
    UB:
    V:14, C:4
    UB:19
    # Value Cost V/C
    1 14 4 3.5
    2 18 6 3
    3 5 2 2.5
    4 3 2 1.5
    Cap=6
    + I1 - I1
    + I2 - I2

    View Slide

  17. Copyright Drecom Co., Ltd. All Rights Reserved. !17
    分岐限界法
    V:0, C:0
    UB:20
    V:14, C:4
    UB: 20
    V:0, C:0
    UB: 18
    V: , C:10
    UB:
    V:14, C:4
    UB:19
    # Value Cost V/C
    1 14 4 3.5
    2 18 6 3
    3 5 2 2.5
    4 3 2 1.5
    Cap=6
    V:19, C:6
    UB:19
    + I1 - I1
    + I2 - I2
    + I3

    View Slide

  18. Copyright Drecom Co., Ltd. All Rights Reserved. !18
    分岐限界法
    V:0, C:0
    UB:20
    V:14, C:4
    UB: 20
    V:0, C:0
    UB: 18
    V: , C:10
    UB:
    V:14, C:4
    UB:19
    # Value Cost V/C
    1 14 4 3.5
    2 18 6 3
    3 5 2 2.5
    4 3 2 1.5
    Cap=6
    V:19, C:6
    UB:19
    V:14, C:4
    UB:17
    + I1 - I1
    + I2 - I2
    + I3 - I3

    View Slide

  19. Copyright Drecom Co., Ltd. All Rights Reserved. !19
    分岐限界法
    V:0, C:0
    UB:20
    V:14, C:4
    UB: 20
    V:0, C:0
    UB: 18
    V: , C:10
    UB:
    V:14, C:4
    UB:19
    # Value Cost V/C
    1 14 4 3.5
    2 18 6 3
    3 5 2 2.5
    4 3 2 1.5
    Cap=6
    V:19, C:6
    UB:19
    V:14, C:4
    UB:17
    + I1 - I1
    + I2 - I2
    + I3 - I3

    View Slide

  20. Copyright Drecom Co., Ltd. All Rights Reserved. !20
    irohiroki/knapsacker

    View Slide

  21. Copyright Drecom Co., Ltd. All Rights Reserved. !21
    irohiroki/knapsacker-py

    View Slide

  22. Copyright Drecom Co., Ltd. All Rights Reserved. !22
    テストデータ
    アイテム数 … 200
    Value … 1 〜 10
    Cost … 1 〜 10
    キャパシティ … 500

    View Slide

  23. Copyright Drecom Co., Ltd. All Rights Reserved. !23
    0.42秒
    Rubyで解く

    View Slide

  24. Copyright Drecom Co., Ltd. All Rights Reserved. !24
    118 / 200
    3.5 x 1057 通り
    Rubyで解く

    View Slide

  25. Copyright Drecom Co., Ltd. All Rights Reserved. !25
    Pythonで解く

    View Slide

  26. Copyright Drecom Co., Ltd. All Rights Reserved. !26
    0.14秒
    Pythonで解く

    View Slide

  27. Copyright Drecom Co., Ltd. All Rights Reserved. !27
    Pythonで解く
    0.14秒
    Pythonの方が速い

    View Slide

  28. Copyright Drecom Co., Ltd. All Rights Reserved. !28
    Pythonで解く
    3倍速い
    0.42秒 0.14秒

    View Slide

  29. Copyright Drecom Co., Ltd. All Rights Reserved. !29
    ちょっと待って

    View Slide

  30. Copyright Drecom Co., Ltd. All Rights Reserved. !30
    リハーサルの方が速い…?
    Rubyで解く 2

    View Slide

  31. Copyright Drecom Co., Ltd. All Rights Reserved. !31
    リハーサルやめる
    benchmark.bmbm
    benchmark.bm

    View Slide

  32. Copyright Drecom Co., Ltd. All Rights Reserved. !32
    リハーサルなし
    0.18秒

    View Slide

  33. Copyright Drecom Co., Ltd. All Rights Reserved. !33
    他のデータで…

    View Slide

  34. Copyright Drecom Co., Ltd. All Rights Reserved.
    アイテム数 … 200
    Value … 1 〜 10
    Cost … 1 〜 10
    キャパシティ … 503
    !34
    テストデータ2
    +3

    View Slide

  35. Copyright Drecom Co., Ltd. All Rights Reserved. !35
    0.02秒
    Rubyで解く 2
    ʢࢀߟɿͷͱ͖ඵʣ

    View Slide

  36. Copyright Drecom Co., Ltd. All Rights Reserved. !36
    0.03秒
    Pythonで解く 2

    View Slide

  37. Copyright Drecom Co., Ltd. All Rights Reserved. !37
    0.03秒
    Pythonで解く 2
    勝った

    View Slide

  38. Copyright Drecom Co., Ltd. All Rights Reserved. !38
    キャパシティ 500〜599

    View Slide

  39. Copyright Drecom Co., Ltd. All Rights Reserved. !39
    JITがある!

    View Slide

  40. Copyright Drecom Co., Ltd. All Rights Reserved. !40
    JITとは
    一部をCに変換、コンパイルして実行 → 速くなる
    2.6から実験的に組み込まれている

    View Slide

  41. Copyright Drecom Co., Ltd. All Rights Reserved. !41
    --jit

    View Slide

  42. Copyright Drecom Co., Ltd. All Rights Reserved. !42
    キャパシティ 500〜599

    View Slide

  43. Copyright Drecom Co., Ltd. All Rights Reserved. !43
    結論
    Pythonの方が速かった

    View Slide

  44. Copyright Drecom Co., Ltd. All Rights Reserved. !44
    Python vs Ruby
    https://www.educba.com/python-vs-ruby-performance/

    View Slide

  45. Copyright Drecom Co., Ltd. All Rights Reserved. !45
    https://www.educba.com/python-vs-ruby-performance/
    Python vs Ruby
    એݴత ಈత

    View Slide

  46. Copyright Drecom Co., Ltd. All Rights Reserved. !46
    https://www.educba.com/python-vs-ruby-performance/
    Python vs Ruby
    ؆ܿͰ
    ϚδΧϧ
    ௚઀తͰ
    ಡΈ΍͍͢

    View Slide

  47. Copyright Drecom Co., Ltd. All Rights Reserved. !47
    https://www.educba.com/python-vs-ruby-performance/
    Python vs Ruby
    ؆͕ܿͩ
    σόοά͠ʹ͍͘͜ͱ΋
    ໌ࣔత͕ͩ
    ΤϨΨϯτͰͳ͍͜ͱ΋

    View Slide

  48. Copyright Drecom Co., Ltd. All Rights Reserved. !48
    https://www.educba.com/python-vs-ruby-performance/
    Python vs Ruby
    ΢ΣϒΞϓϦͷ
    ϓϩτλΠϐϯά
    େྔͷσʔλͱܭࢉ

    View Slide

  49. Copyright Drecom Co., Ltd. All Rights Reserved. !49
    速さで選んでるんじゃないし。

    View Slide

  50. Copyright Drecom Co., Ltd. All Rights Reserved. !50
    おまけ - Python書いたら
    self忘れる
    return忘れる
    メソッド呼ぶとき()忘れる
    メソッドじゃないのに()つけちゃう
    true → True
    y if x else z

    View Slide

  51. Copyright Drecom Co., Ltd. All Rights Reserved. !51
    Rubyの方がいいし。
    End

    View Slide