O (landau symbol) について

LT at chibapm #5

who am i

  • kobaken  ( @kfly8
  • Application Engineer
    • like Perl, JS
  • Work
    • Mobile Factory
    • YAPC::Asia staff
    • 五反田もくもく会

今日話したいこと

  • O (landau symbol) について

気が狂って数学っぽい話

身近な用途

計算量のあたりをつけるのに使う記号

よくある用途

  • 最良の計算量はでどれくらい?
  • 最悪の計算量はでどれくらい?
  • 最悪の計算量はでどれくらい?

例えば、二分探索

  • 最良は、1発正解なので、O(1)
  • 最悪は、最後まで当たらんことなので、半分ずっこずつけずって探して行くので、、O(log2(n))
  • 平均は、ごにょごにょして、O((1+1/n)log n)

O(landau symbol)

DEFINITION

x = a の十分近くで、ある正数cが存在して、
|f(x)| <= c |g(x)| となるとき

f(x) = O(g(x)) when x -> a

と表す

租借すると

  • x=aの近くでf(x)がg(x)の定数倍に抑えられている

おさえる

  • 元のfが"複雑"な時、扱いやすいような基本的な関数 g で表すこと考える
  • gがよりfに近いと、いいあたりになってる

もっとおさえる

小まとめ

  • ランダウ記号は、あたりを表すための道具

ところで

あたりをつけると言えば、微分

テイラー展開

  • xがaに十分に近いなら多項式の和で表せる
  • 適当な範囲では、多項式で表せる
f(x) = Σdf^n/dx(a) * 1/n! (x - a)^n  when x -> a

ちょっとこれだと、項が多すぎて扱いずらいなら ランダウ記号で項を落とす

f(x) = df/dx(a) + O(x^2) when x -> a

雑談

  • 微分、計算カンタンで、精度最高で最高
  • 他方、平均の計算量もとめようとすると、ただ積分することになるから、積分だから面倒。ただの愚痴

話を戻す

よくある用途

  • 最良の計算量はでどれくらい?
  • 最悪の計算量はでどれくらい?
  • 最悪の計算量はでどれくらい?

どれくらいの計算量か肌感を知りたいなら、 まずは抑える関数を知っておく

上から順に素敵

  • 定数関数 O(1) / 最高の世界観
  • 対数関数 O(log n)
  • だいたい線形 O(n log n)
  • 線形(1次多項式) O(n)
  • 多項式 O(n^2)..
  • 指数関数 O(e^n)
  • 階乗関数 O(n!)
  • 定数関数 O(1) / 最高の世界観

以上

ご清聴ありがとうございました。

株式会社モバイルファクトリー は、
開発好きなエンジニアを求めています。