はじめに
分割統治法などを用いることで最悪計算量T(n)のアルゴリズムが
のようになる場合がある。この漸化式を解くことによりT(n)=O(nlogn)が得られ、例えば、クイックソートやFFTなどがこのようになる。
今回はその計算量について述べる。
全然興味がないから知らないけど、競技プログラミングにおける最重要項目の1つではないだろうか。むしろ基礎知識だからこの記事を読む必要すらないともとれる。
今回の記事は以下の図書を参考に書いているので気になる人は読んでみるといいだろう。ただし、日本語訳が怪しい部分もあるため考えどころである。私には買うお金がないので図書館で読んだ。
漸近記法
よく知っている人は飛ばすべきである。
まずは計算量を記述するための漸近記法について定義を与える。
定義
f(n)∈O(g(n))となるとは
を満たすことである。このとき、g(n)はf(n)の漸近的上界(asymptotic upper bounds)であるという。
これはランダウのO-記法としても知られている。次に、下界についての定義を示す。
定義
f(n)∈Ω(g(n))となるとは
を満たすことである。このとき、g(n)はf(n)の漸近的下界(asymptotic lower bounds)であるという。
また、下界かつ上界について以下の定義が与えられる。
定義
f(n)∈Θ(g(n))となるとは
を満たすことである。このとき、g(n)はf(n)の下界かつ上界であるもしくは漸近的にタイトな限界(asymptotically tight bounds)という。
これらの定義の相違についてを記す。まずはf(n)∈Θ(g(n))であるとき、十分に大きな全てのnで正のc1>0,c2>0が存在して
を満たすため、
を満たす有限の極限値c3(c3=0)をもつ。これはΘ(g(n))の定義と同値な表現である。特に、c3=1であるときf(n)とg(n)は漸近的に等しいという。次に、f(n)∈O(g(n))∖Θ(g(n))であるときを考えれば、十分に大きな全てのnで
を満たすc2>0のうち
を満たすc1>0が存在しないものとなる。すなわち、十分に大きなnでは任意のcで
であるということである。つまり、
を満たす。同様にして、f(n)∈Ω(g(n))∖Θ(g(n))を考えれば
である。これより、以下の定義が与えられる。
定義
f(n)∈o(g(n))となるとは
を満たすことである。また、これは
および
を満たすことと同値である。
定義
f(n)∈ω(g(n))となるとは
を満たすことである。また、これは
および
を満たすことと同値である。
この定理より直ちに以下の補題が与えられる。
補題
f1(n)∈Θ(g(n)),f2(n)∈O(g(n))について
同様にして、f3(n)∈Ω(g(n))について
証明
f2(n)∈Θ(g(n))のときは自明であるためf2(n)∈Θ(g(n))、すなわちf2(n)∈o(g(n))の場合を示す。g(n)f1(n)+f2(n)のn→∞について考えると
となり、0でない有限の値をとる。つまり、f1(n)+f2(n)∈Θ(g(n))である。また、f3(n)についても同様である。
よって、命題は証明された。
与えたこれらの漸近記法は厳密には集合であるが、慣習としてf(n)=O(n)のように等号で記述することがある。
分割統治法の計算量
まずは、漸近記法を用いて分割統治法のアルゴリズムについての一般の漸化式を示す。最悪計算量T(n)のアルゴリズムが
のような漸化式で記述されるとする。なお、a≥1,b>1でbnは切り上げもしくは切り捨てを示す。
この漸化式を解く手法として以下の3つが存在する。
置き換え法(substitution method)
限界を推定して数学的帰納法により証明をする手法。
再帰木法(recursion-tree method)
漸化式を木として展開し、各節点を再帰レベルに対する必要な計算量としてその和により限界を与える手法。
マスター法(master method)
上記の漸化式を解くことにより限界を与える手法。
以下ではそれぞれを解説していく。
置き換え法
置き換え法については前述したとおりであるため、簡単な例を示す。簡単のために
を解くことを考える。
T(n)=O(nlogn)と推定すれば、あるn0>0が存在して、n>n0においてある定数c>0が存在してT(n)≤cnlognを満たすこととなる。これを漸化式に代入すると
なお、この操作の最後の不等号は1−clog2≤0となるようにcを選択したこととする。つまり、log21≤cである。
次に、n0を求める。n=1のときはT(1)=1およびclog1=0となるためT(n)≤cnlognは成り立たない。n=2のときはT(2)=4および2clog2>0となるため適当なcを選択することによりT(n)≤cnlognが成り立つ。よって、n0=2となる。
以上より、数学的帰納法によりT(n)=O(nlogn)となる。
次に、T(n)の下界を偶数2nと奇数2n+1に分けて考える。まず、偶数のときT(2n)=Ω(2nlog2n)と推定すれば
なお、この操作の最後の不等号は1−clog2≥0となるようにcを選択したこととする。つまり、log21≥cである。奇数のときは、T(2n+1)=Ω(2nlog2n)と推定すれば
なお、この操作の最後の不等号は1−clog2≥0となるようにcを選択したこととする。つまり、log21≥cである。n0についてはT(n)=O(nlogn)と推定した場合と同様に考えることでn0=1と求まる。
以上より、数学的帰納法によりT(n)=Ω(nlogn)となり、T(n)=Θ(nlogn)が得られる。
このようにして、限界を推定して数学的帰納法を用いることで計算量を求めることができる。
再帰木法
再帰木法についても前述したとおりである。しかしながら、再帰木法により得られた計算量がT(n)の上界もしくは下界となるとは限らないことに留意する必要がある。あくまでも置き換え法により確かめる場合のよりよい推定を与える手法である。また、推定を与えるだけであるため、ある程度の杜撰さも許される。
そこで、例として前述した置き換え法により計算量を与えた
を再帰木法により推定をする。この漸化式により生成される木の深さはT(n)に対してlog2nであるため、これらを直接和をとる。このときの最悪計算量はnが2の冪乗となる場合であるため、n=2Nと置換して考える。これにより、
が得られ、最悪計算量がT(n)=Θ(nlogn)と推定される。そして、これを前述で行ったように置き換え法により整合性を証明すればいい。しかしながら、これは等号により式変形をして与えられているため正確にT(n)=Θ(nlogn)となり、置き換え法を用いる必要はない。
マスター法
マスター法についても前述のとおりであり、それは以下のマスター定理により与えられる。
証明
定理
最悪計算量T(n)のアルゴリズムが
のような漸化式で記述されるとする。なお、a≥1,b>1でbnは切り上げもしくは切り捨てを示す。このとき、非負の関数f(n)により以下の分類が与えられる。
∃ε>0,f(n)=O(nlogba−ε) ⇒ T(n)=Θ(nlogba)
f(n)=Θ(nlogba) ⇒ T(n)=Θ(nlogbalogn)
∃ε>0,f(n)=Ω(nlogba+ε),∃c<0,∃n0>0 s.t. ∀n>n0,af(bn)≤cf(n) ⇒ T(n)=Θ(f(n))
これをマスター定理(master theorem)という。特に、∃n0>0 s.t. ∀n>n0,af(bn)≤cf(n)であることをf(n)は正則性を満たすという。
証明
まず、nがbの冪乗、すなわちn=bNと表現される場合を示す。これを再帰木として展開すると
と与えられるため、これに対してf(n)を代入してT(n)の計算量を与える。また、
となることを用いる。1)について、f(n)=O(nlogba−ε)とおけば
2)について、f(n)=Θ(nlogba)とおけば
なお、最後の行に関してはn≥bでnlogba≤nlogbalogbnとなることを用いた。3)について、
とすればakf(nb−k)は非負であるためg(n)=Ω(f(n))である。正則性より十分に大きなnでf(nb−1)≤acf(n)が成り立ち、さらにf(nb−2)≤acf(nb−1)が成り立つことからf(nb−2)≤(ac)2f(n)であり、nはn0よりも十分に大きいものと仮定してこれを繰り返すことにより
が成り立つ。これを満たさないのはnb−k≤n0=O(1)を満たす高々定数個であり、akf(nb−k)=O(1)である。その個数をMとしたとき
であり、
となり、g(n)=Θ(f(n))が成り立つ。これを用いることでf(n)=Ω(nlogba+ε)よりT(n)は
なお、これは十分に大きなnであるc1>0,c2>0を用いてc1nlogba≤c1nlogba+ε≤f(n)≤c2nlogba+εとなることを用いた。
次に、n=bNとあらわされるnだけではなくすべてのn、すなわち
の場合について示す。まずはbnが切り上げの場合について、再帰木を生成するにあたって
と記述する。また、⌈x⌉≤x+1より上記漸化式を繰り返し適用することで
となることからnkについては
が成り立つ。再帰の深さを⌊logbn⌋と推定すると、⌊x⌋>x−1よりk=⌊logbn⌋のときは
となり、高々定数となるため再帰の深さは⌊logbn⌋である。これより、n=bNのときは再帰の深さがNであったことに対応して、再帰木としてT(n)を展開すると
となるため、n=bNの場合と同じ要領で証明をする。3)について、
として、正則性より十分に大きなnでakf(nk)≤ckf(n)が成り立つためn=bNのときと同様にして示される。2)について、f(n)=O(nlogba)よりある定数c>0が存在して
と記述することができ、k≤⌊logbn⌋で
となるため
このとき、(1+b−1b)logbaは定数であるためf(nk)=O(a−knlogba)となる。また、⌈x⌉≥xとなることから
となることを用いると、f(n)=Ω(nlogba)よりある定数c>0が存在して
となるためf(nk)=Ω(a−knlogba)となり、f(nk)=Θ(a−knlogba)が得られる。これをg(n)に代入すると、n=bNの場合と同様にして
となり、g(n)=Θ(nlogbalogbn)が得られる。つまり、T(n)=Θ(nlogbalogbn)となる。1)について、2)と同様にしてf(n)=O(nlogba−ε)よりある定数c>0が存在して
となり、f(nk)=O((nb−k)logba−ε)となる。これをg(n)に代入するとn=bNの場合と同様にして
となり、bε−11は定数であることからg(n)=O(nlogba)となる。つまり、T(n)=Θ(nlogba)である。
切り捨ての場合については切り上げの場合と同様にして示される。
よって、命題は証明された。
この定理を適用できないf(n)というのは1)と2)の間、2)と3)の間に存在する関数および正則でない場合である。例えば、
であるときは、
よりnlogn=ω(nlogba)となるため3)が適用可能であると考えられるが、
となるためnlogn=Ω(nlogba+ε)であり、この漸化式は2)と3)の間に属するため、マスター定理を適用することができない。
練習問題
最初に挙げた図書の練習問題における事実も割と重要であると思ったため解く。ページとしては87Pの下部にある。
まずは以下の補題を示す。
補題
a,b∈Zとx∈Rについて
が成り立つ。
そのうち天井関数と床関数を別の記事で扱うため、そのときにこれは削除する。
証明
まずは天井関数に対してを示す。天井関数の不等式について
が成り立つ。ここで、c=⌈ax⌉をbで割れば、剰余0≤r<bと商qを用いて一意にc=qb−rとあらわされることを用いて
とあらわすとする。このとき、
と記述することができるため、
床関数についても同様である。
よって、命題は証明された。
問題4.6-1
bが任意の実数ではなく正の整数であるとき、
のnkの簡単で正確な式を求めよ。
解答
仮定よりbは正の整数であるため
が成り立つ。これを逐次適用することで
が得られる。
問題4.6-2
k≥0とする。f(n)=Θ(nlogbalogln)ならばマスター法の漸化式の解はT(n)=Θ(nlogbalogl+1n)と与えられる。bの冪乗のみに解析を限定してもよい。
解答
マスター定理の証明と同様にして
と記述するとする。また、漸化式のbnが切り上げと切り捨てでどちらも同様に証明されるため、切り上げの場合のみを示す。まず、f(nk)について、f(n)=O(nlogbalogln)よりある定数c>0が存在して
となり、f(nk)=O(nlogbaa−kloglnk)が得られる。ここで、nkを除去するために対数部について展開すると
となるため、f(nk)=O(nlogbaa−kloglnb−k)となる。同様にして、f(n)=Ω(nlogbalogkn)よりある定数c>0が存在して
となるためf(nk)=Ω(nlogbaa−kloglnb−k)が得られ、f(nk)=Θ(nlogbaa−kloglnb−k)となる。これをg(n)に代入すると
となり、nlogba≤nlogbalogl+1nであるためT(n)=Θ(nlogbalogl+1n)となる。
問題4.6-3
マスター定理の3)は次の意味で冗長である。ある定数c<1に対して正則性af(bn)≤cf(n)が成り立つならば、f(n)=Ω(nlogba+ε)を満たすある定数ε>0が存在する。
解答
正則性よりある定数kが存在して
が成り立ち、kは高々⌊logbn⌋であるため
仮定よりc<1であるためlogbc<0であり、ε=−logbc>0としてf(n)=Ω(nlogba+ε)が得られる。
おわりに
今まで何となくの雰囲気でのみ理解していたが、再勉強した。対数の底は2として扱うべきであると思ったが、底の変換公式より底の違いでは対数は定数倍だけ変わり、漸近記法に関して何も影響はないため無視した。
証明に関しては割と雑に行ったため(というか途中で日々の疲れで力尽きかけながら書いたため)間違っている気もするが、おおよその筋書きは合っていると思うためこれで良しとした。