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

マツコの知らない「数学」の世界

h.crane
December 26, 2019

 マツコの知らない「数学」の世界

マツコの知らない「数学」の世界

エンジニアとして知っておきたい計算量O(n)のお話

h.crane

December 26, 2019
Tweet

More Decks by h.crane

Other Decks in Technology

Transcript

  1. マツコの知らない「数学」の世界
    〜 エンジニアとして知っておきたい計算量O(n)のお話 〜
    Hiromu Tsuruta

    View Slide

  2. こんな記事がバズってました

    View Slide

  3. 動的計画法によるDVDのディスク分割の改善

    View Slide

  4. 何でバズってるの?

    View Slide

  5. アルゴリズムを使って実際に業務改善をしている!

    View Slide

  6. ・家族の「写真や動画」をDVDにして注文できる機能がある
    ・「写真や動画」は1枚に収まらないので複数のディスクに分割する
    ⇨ 「月ごとに分けて各ディスクに入れていく」というアルゴリズム
    【前提】

    View Slide

  7. 1月の思い出
    データベース
    2月の思い出 3月の思い出 12月の思い出
    ・・・・・
    12枚
    【現状】

    View Slide

  8. ディスクの枚数をもっと減らせないのか
    ⇨ ユーザーから問い合わせが寄せられていた
    【課題】

    View Slide

  9. どうやって減らす?

    View Slide

  10. 月ごとではなく最適化して入れる!

    View Slide

  11. 1月の思い出
    データベース
    2月の思い出 3月の思い出 12月の思い出
    ・・・・・
    12枚よりは少ない
    【解決例】

    View Slide

  12. 最適化する = データを分割する

    View Slide

  13. ディスクの枚数課題を解決!

    View Slide

  14. ではありません

    View Slide

  15. ただ、分割すれば良いと言うものではない!

    View Slide

  16. なんで?

    View Slide

  17. データ分割の計算量を意識する必要がある

    View Slide

  18. View Slide

  19. ユーザー サーバー
    ① アルバムの注文
    ④ 注文枚数を表示
    サーバー/データ
    ② 枚数の計算を実行
    ③ 計算結果を返す
    〜 注文フロー 〜

    View Slide

  20. 計算が遅いとユーザーの画面反映も遅れる

    View Slide

  21. UXの低下・機会損失

    View Slide

  22. ユーザー サーバー
    ① アルバムの注文
    ④ 注文枚数を表示
    サーバー/データ
    ② 枚数の計算を実行
    ③ 計算結果を返す
    〜 注文フロー 〜
    この部分をなんとかしたい!

    View Slide

  23. 計算量を抑えました

    View Slide

  24. O(MN²) から O(MN log N) まで減らし
    最終的に O(NM²) までになりました
    (1 ≦ N ≦ 10⁵, 1 ≦ M ≦ 50)

    View Slide

  25. ん?

    View Slide

  26. O とは?

    View Slide

  27. ランダウの記号
    ギリシア文字の O(オミクロン)を用いて表される
    大文字をビッグオー、小文字をスモールオーと呼んだりもする
    数学においてはオーダーという呼び方をする
    計算量を大雑把に評価する(見積もる)際に使用する
    example
    O(n) :オーダーのエヌ
    O(log n) :オーダーのログエヌ

    View Slide

  28. 具体例を見てみよう!

    View Slide

  29. Example.1
    「世界のナベアツ」

    View Slide

  30. View Slide

  31. ナベアツは線形探索しているだけ!

    View Slide

  32. 線形探索とは?

    View Slide

  33. ・検索アルゴリズムの1つ
    ・リストや配列に入ったデータの検索を行う
    ・先頭から順に比較を行い、見つかれば終了する

    View Slide

  34. 「世界のナベアツ」パターン
    - 3の倍数 or 3が付くなら true
    - それ以外は false
    を必ず1回ずつ確認を行っている
    and
    40までしか探索しない

    View Slide

  35. 「世界のナベアツ」= O(40)

    View Slide

  36. 「世界のナベアツ」が 100 まで探索する場合は?

    View Slide

  37. 「世界のナベアツ」= O(100)

    View Slide

  38. 「世界のナベアツ」が n まで探索する場合は?

    View Slide

  39. 「世界のナベアツ」= O(n)

    View Slide

  40. 話を戻すと、、
    結局、計算量は減ってるの?
    (ここから普通に数学なのでつまらなかったらすいません)

    View Slide

  41. O(MN²) ⇨ O(MN log N) ⇨ O(NM²)
    先の話では、、
    計算量を以下の順番で減らした
    O(NM²) ≦ O(MN log N) ≦ O(MN²)
    (1 ≦ N ≦ 10⁵, 1 ≦ M ≦ 50)

    View Slide

  42. 全然わからん、、から
    具体的な数字に落とし込んでみよう!

    View Slide

  43. 取りうる最大値を代入する

    View Slide

  44. 1 ≦ N ≦ 10⁵
    1 ≦ M ≦ 50

    View Slide

  45. 1 ≦ M ≦ 50
    1 ≦ M ≦ 10 * 5
    1 ≦ M ≦ 10 * 5 ≦ 10 * 10
    Mの範囲をNに合わせて拡張する
    上記のことから
    1 ≦ M ≦ 10²

    View Slide

  46. O(NM²) ≦ O(MN log N) ≦ O(MN²)
    O(MN²)
    ≦ O(10² * (10⁵)²)
    ≦ O(10² * 10¹⁰)
    ≦ O(10¹²)
    O(MN log N)
    ≦ O(10² * 10⁵ * log10⁵)
    ≦ O(10⁷ * 10⁵)
    ≦ O(10¹²)
    O(NM²)
    ≦ O(10⁵ * (10²)²)
    ≦ O(10⁵ * 10⁴)
    ≦ O(10⁹)
    N = 10⁵, M = 10²

    View Slide

  47. O(NM²) ≦ O(MN log N) ≦ O(MN²)
    O(10⁹) ≦ O(10¹²) ≦ O(10¹²)
    10⁹ ≦ 10¹² ≦ 10¹²

    View Slide

  48. 確かに計算上は計算量が小さくなっている!

    View Slide

  49. どうやって小さくしているの?
    というのはバズっていた記事にある
    アルゴリズムを読んでください
    (この資料はあくまでもO(オーダー)について説明に焦点を当てています)

    View Slide

  50. fin

    View Slide