Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Swift and Timsort

Takanori Hirobe
September 19, 2021
370

Swift and Timsort

Swiftの標準ライブラリには数多くのアルゴリズムが用意されていますが、その中で最も頻繁に使われているものの1つはソートであると言えるでしょう。

そんなSwiftのソートアルゴリズムですが、具体的にどのようなアルゴリズムが採用されているかご存知でしょうか。
また、ソートアルゴリズムの重要な指標である時間計算量、空間計算量、安定性はどのような特徴を持っているでしょうか。

もし知らなければ、知っておいて損はないでしょう。5分で解説します。

Takanori Hirobe

September 19, 2021
Tweet

Transcript

  1. Takanori Hirobe
    SwiftͷιʔτΞϧΰϦζϜͷಛ௃Λ
    5෼Ͱ͖ͪΜͱ஌Δ
    iOSDC 2021

    View Slide

  2. View Slide

  3. ͲΜͳΞϧΰϦζϜΛ࢖͍ͬͯΔͷ͔

    View Slide

  4. ͲΜͳΞϧΰϦζϜΛ࢖͍ͬͯΔͷ͔
    🤔

    View Slide

  5. Timsort ͱݺ͹ΕΔΞϧΰϦζϜ
    Λ࢖͍ͬͯΔ

    View Slide

  6. Timsortͱ͸
    ؆୯ͳ֓ཁ

    View Slide

  7. Timsortͱ͸
    ؆୯ͳ֓ཁ
    • 2002೥ʹTim PetersʹΑͬͯPythonͷιʔτΞϧΰϦζϜͱ࣮ͯ͠૷͞Εͨ

    View Slide

  8. Timsortͱ͸
    ؆୯ͳ֓ཁ
    • 2002೥ʹTim PetersʹΑͬͯPythonͷιʔτΞϧΰϦζϜͱ࣮ͯ͠૷͞Εͨ

    • SwiftͰ͸Swift 5.0(ABI҆ఆԽͷλΠϛϯά)͔Β࠾༻͞Ε͍ͯΔ

    View Slide

  9. Timsortͱ͸
    ؆୯ͳ֓ཁ
    • 2002೥ʹTim PetersʹΑͬͯPythonͷιʔτΞϧΰϦζϜͱ࣮ͯ͠૷͞Εͨ

    • SwiftͰ͸Swift 5.0(ABI҆ఆԽͷλΠϛϯά)͔Β࠾༻͞Ε͍ͯΔ

    • Swift 5.0ະຬͰ͸ҟͳΔΞϧΰϦζϜ͕࢖ΘΕ͍ͯͨ

    View Slide

  10. Timsortͱ͸
    ؆୯ͳ֓ཁ
    • 2002೥ʹTim PetersʹΑͬͯPythonͷιʔτΞϧΰϦζϜͱ࣮ͯ͠૷͞Εͨ

    • SwiftͰ͸Swift 5.0(ABI҆ఆԽͷλΠϛϯά)͔Β࠾༻͞Ε͍ͯΔ

    • Swift 5.0ະຬͰ͸ҟͳΔΞϧΰϦζϜ͕࢖ΘΕ͍ͯͨ

    • ༏ΕͨੑೳΛ͍࣋ͬͯͯɺRust΍JavaͳͲͰ΋࠾༻͞Ε͍ͯΔ

    View Slide

  11. ΞϧΰϦζϜͷੑೳ

    View Slide

  12. ΞϧΰϦζϜͷੑೳ
    • ଎͞

    • ҆ఆੑ

    • ϝϞϦ࢖༻ྔ

    View Slide

  13. ΞϧΰϦζϜͷੑೳ
    • ଎͞
    • ҆ఆੑ

    • ϝϞϦ࢖༻ྔ

    View Slide

  14. ଎͞

    View Slide

  15. ଎͞
    • ଎͍ʂ

    View Slide

  16. ଎͞
    • ଎͍ʂ

    • Ҏ্ɻ

    View Slide

  17. ଎͞
    • ଎͍ʂ

    • Ҏ্ɻ

    • ଎͞ʹ͍ͭͯ࿩͍ͯͨ͠Β5෼Ͱ͸શ͘଍Γͳ͍

    View Slide

  18. ΞϧΰϦζϜͷੑೳ
    • ଎͞

    • ҆ఆੑ
    • ϝϞϦ࢖༻ྔ

    View Slide

  19. ιʔτΞϧΰϦζϜͱ҆ఆੑ

    View Slide

  20. ҆ఆੑ
    ྫΛ࢖ͬͯߟ͑Δ

    View Slide

  21. ҆ఆੑ
    ྫΛ࢖ͬͯߟ͑Δ

    View Slide

  22. ҆ఆੑ
    ྫΛ࢖ͬͯߟ͑Δ

    View Slide

  23. ҆ఆੑ
    ྫΛ࢖ͬͯߟ͑Δ

    View Slide

  24. ਤʹ͢Δͱ

    View Slide

  25. View Slide

  26. value

    View Slide

  27. View Slide

  28. View Slide

  29. View Slide

  30. ιʔτͰ͖ͨʂʂ

    View Slide

  31. ҆ఆੑʁ

    View Slide

  32. ҆ఆͳιʔτͱෆ҆ఆͳιʔτ

    View Slide

  33. ҆ఆͳιʔτ

    View Slide

  34. ҆ఆͳιʔτ
    ιʔτલ ιʔτޙ

    View Slide

  35. ҆ఆͳιʔτ
    ιʔτલ ιʔτޙ

    View Slide

  36. ҆ఆͳιʔτ
    value͕ಉ͡
    ιʔτલ ιʔτޙ

    View Slide

  37. ҆ఆͳιʔτ
    value͕ಉ͡
    value͕ಉ͡Ͱ΋લޙͷҐஔؔ܎͕อଘ͞ΕΔ
    ੨ ԫ ੺
    ੨ ԫ ੺

    View Slide

  38. ҆ఆͳιʔτ
    value͕ಉ͡
    value͕ಉ͡Ͱ΋લޙͷҐஔؔ܎͕อଘ͞ΕΔ
    ੨ ԫ ੺
    ੨ ԫ ੺

    View Slide

  39. ෆ҆ఆͳιʔτ
    ιʔτલ ιʔτޙ

    View Slide

  40. ෆ҆ఆͳιʔτ
    value͕ಉ͡
    ԫ ੺ ੨
    ੨ ԫ ੺
    ιʔτલ ιʔτޙ

    View Slide

  41. ෆ҆ఆͳιʔτ
    value͕ಉ͡
    ԫ ੺ ੨
    ੨ ԫ ੺
    ಉ͡valueಉ࢜ͷલޙͷҐஔؔ܎͕อଘ͞Εͳ͍

    View Slide

  42. ෆ҆ఆͳιʔτ
    value͕ಉ͡
    ԫ ੺ ੨
    ੨ ԫ ੺
    ಉ͡valueಉ࢜ͷલޙͷҐஔؔ܎͕อଘ͞Εͳ͍

    View Slide

  43. ͳͥ҆ఆੑ͕ॏཁͳͷ͔

    View Slide

  44. Swiftͷྺ࢙తͳࣄ৘

    View Slide

  45. Swiftͷྺ࢙తͳࣄ৘
    • Timsort͸҆ఆͳιʔτ

    View Slide

  46. Swiftͷྺ࢙తͳࣄ৘
    • Timsort͸҆ఆͳιʔτ

    • Swift 5.0Ҏ߱

    View Slide

  47. Swiftͷྺ࢙తͳࣄ৘
    • Timsort͸҆ఆͳιʔτ

    • Swift 5.0Ҏ߱

    • Swift 5.0ະຬͰ͸Introsort͕࢖ΘΕ͍ͯͨ

    View Slide

  48. Swiftͷྺ࢙తͳࣄ৘
    • Timsort͸҆ఆͳιʔτ

    • Swift 5.0Ҏ߱

    • Swift 5.0ະຬͰ͸Introsort͕࢖ΘΕ͍ͯͨ

    • Introsort͸ෆ҆ఆͳιʔτ

    View Slide

  49. Swiftͷྺ࢙తͳࣄ৘
    • Timsort͸҆ఆͳιʔτ

    • Swift 5.0Ҏ߱

    • Swift 5.0ະຬͰ͸Introsort͕࢖ΘΕ͍ͯͨ

    • Introsort͸ෆ҆ఆͳιʔτ

    • SwiftͷόʔδϣϯʹΑͬͯιʔτͷ҆ఆੑ͕ҟͳΔ

    View Slide

  50. Swiftͷྺ࢙తͳࣄ৘
    • Timsort͸҆ఆͳιʔτ

    • Swift 5.0Ҏ߱

    • Swift 5.0ະຬͰ͸Introsort͕࢖ΘΕ͍ͯͨ

    • Introsort͸ෆ҆ఆͳιʔτ

    • SwiftͷόʔδϣϯʹΑͬͯιʔτͷ҆ఆੑ͕ҟͳΔ

    • ιʔτ݁Ռ͕ҟͳΔՄೳੑ͕͋Δ

    View Slide

  51. ࠷ޙʹ஫ҙ఺

    View Slide

  52. ࠷ޙʹ஫ҙ఺
    • υΩϡϝϯτͰ͸҆ఆੑʹ͍ͭͯ͸อো͍ͯ͠ͳ͍ͷͰ஫ҙ

    • ҆ఆੑʹ͍ͭͯ͸ Implementation Detail (࣮૷ʹґଘ)ͱ͍͏ѻ͍
    "The sorting algorithm is not guaranteed to be stable."
    https://developer.apple.com/documentation/swift/array/1688499-sort

    View Slide

  53. ΞϧΰϦζϜͷੑೳ
    • ଎͞

    • ҆ఆੑ

    • ϝϞϦ࢖༻ྔ

    View Slide

  54. ϝϞϦ࢖༻ྔ

    View Slide

  55. TimsortͷϝϞϦ࢖༻ྔ
    • ιʔτΞϧΰϦζϜ͝ͱʹϝϞϦ࢖༻ྔ͸ҟͳΔ

    View Slide

  56. TimsortͷϝϞϦ࢖༻ྔ
    • ιʔτΞϧΰϦζϜ͝ͱʹϝϞϦ࢖༻ྔ͸ҟͳΔ

    • Timsort͸ɺιʔτ͞ΕΔ഑ྻͷ൒෼ͷେ͖͞ͷϝϞϦΛ֬อ͢Δ

    • ͋͘·Ͱཧ࿦্ͷ࠷େͷ஋ͳͷͰɺ࣮ࡍ͸΋ͬͱগͳ͍

    • ͨͩ͠ɺ׬શϥϯμϜͳ഑ྻ͸ϝϞϦ࢖༻ྔ͕େ͖͘ͳΔ܏޲͕͋Δ

    View Slide

  57. TimsortͷϝϞϦ࢖༻ྔ

    View Slide

  58. TimsortͷϝϞϦ࢖༻ྔ
    Ұॠ͚ͩϝϞϦ࢖༻ྔ͕૿͑Δ

    View Slide

  59. TimsortͷϝϞϦ࢖༻ྔ
    Ұॠ͚ͩϝϞϦ࢖༻ྔ͕૿͑Δ
    ී௨ͷΞϓϦͰ໰୊ʹͳΔ͜ͱ͸ͳ͍͸ͣ

    View Slide

  60. ·ͱΊ
    • ݱࡏͷSwiftͰ࢖ΘΕ͍ͯΔTimsort͸҆ఆੑ΍࣌ؒܭࢉྔͷ؍఺Ͱɺ༏Εͨੑ
    ೳΛ͍࣋ͬͯΔ

    • ྺ࢙తࣄ৘ʹΑΓɺSwift 5.0ͷલޙͰιʔτ݁Ռ͕มΘΔՄೳੑ͕͋Δ

    • Timsort͸ɺ࠷େͰݩͷ഑ྻͷ൒෼ͷϝϞϦΛ֬อ͢ΔՄೳੑ͕͋Δ

    View Slide

  61. ࣗݾ঺հ
    • Takanori Hirobe / ኍ෦وಙ

    • 4ࡀ͝Ζ͔Βͣͬͱؔ੢ʹࡏॅ

    • @taka1068

    • Twitter, GitHub, Qiita

    View Slide

  62. Further Reading
    • ೔ຊޠࢿྉ

    • https://tech.preferred.jp/ja/blog/tim-sort/

    • ӳޠࢿྉ

    • https://swiftrocks.com/introsort-timsort-swifts-sorting-algorithm

    • ΞϧΰϦζϜมߋͷPull request

    • https://github.com/apple/swift/pull/19717

    View Slide

  63. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide