よく出るあの級数!情報系なら絶対覚えるべき計算量の話!
皆さん、久しぶり!競プロを始めてから実装の話ばかりしていた。いよいよアルゴリズムの原点に戻った!今回は例のを見に行きたいと思う。
この級数はどこで出るの?
まずは結論から言うと、この級数はクラスに属す。これでちょっと見覚えがあるのか?セットを使って配列から重複を取るアルゴリズムは配列の要素を順に見て行き、そしてセットにいるかどうかをチェックする。配列の長さをNとして、セットのサイズをKとする。クエリごとの時間がかかる。その結果、全体の計算量はこの級数になる。
その他にもLIS問題、最短経路問題など超有名問題で出てくる大人気級数である。
いきなり現れるは一体なんだ?
授業ではビッグOを教えることが多いですが、ビッグOはあくまで最悪の場合を指す。実際ももなので、ビッグOは厳密ではない。その代わりに、はちょうどこのクラスにいる関数の集合。
前の例を持ち上げると、セットを使ったあのアルゴリズムは最悪だけじゃなくて、これ以上早くなることもない。
数学コーナーはみんな大嫌いだけど見ないと背が伸びない
まずここで証明したい命題を貼りましょう!
この問題は二つの問題に分けて考えましょう!まずは
これは自明的だ。から、は明らかなことだ。では難しい方へ進むぞ!
今回は帰納法でやる。まずはあるに対して、が成立とする。これを仮説1と呼ぶ。そしての時の式を見てください。
今からはただを式(1.2)にかけたものは依然式(1.1)より大きいことを示せば万事解決。今の式を見れば、ほどんど見たことある顔で安心した。でも待って、式(1.1)のはどんどん大きくなるじゃないかっと思うと、実際は上限がある!
調和級数の時使った技を思い出してね!はと等しい。この積分の区間での最大値はイコールの時から、がわかる。さらに式(1.1)は式(1.3)より小さいことが分かった。
定数を式(1.2)に掛けるとが得られる。仮説1を使えばとを式1.2と式1.3から消せる。残る部分はとだけ。定数を予め大きくしたらも成立する。 当然のことことなんですが、の時が成立するので証明終了。Q.E.D
あとがき
今回の記事いかがでしょうか。私もこれでまた一つ賢くなった気がしたので、これからももっとしんかしていくぜ!それじゃまたね、bye~bye~