院試hub

計算量と漸化式オーダー記法・マスター定理・漸化式の解き方

アルゴリズムの計算量は、入力の大きさ nn に対する基本操作の回数を関数 T(n)T(n) で表し、その増え方を OO・Ω\Omega・Θ\Theta 記法で比べる。分割統治法の計算量は T(n)=aT(n/b)+f(n)T(n) = aT(n/b) + f(n) の形の漸化式になり、f(n)f(n) と nlog⁡ban^{\log_b a} の大小を比べるマスター定理で多くの場合の解が決まる。マスター定理の当てはまらない漸化式は、展開して和を計算する再帰木か、解を予想して帰納法で示す置換法で解く。

アルゴリズムとデータ構造 の第1単元(全4単元)。

情報系院試の問題集・ロードマップ

東大情報理工・東京科学大・阪大の大学別に、出題マップと類題を1冊にした教材(各4,980円)。収録内容と見本を商品ページで確認できる。

情報系の教材を見る

計算量とオーダー記法の定義

定義

時間計算量

大きさ nn の入力に対してアルゴリズムが行う基本操作(比較、代入、算術演算など)の回数を時間計算量という。大きさ nn の入力全体での最大値を最悪時の計算量、入力の分布を決めたときの期待値を平均時の計算量と呼ぶ。使う記憶領域の量を同じように数えたものを領域計算量という。

定義

OO・Ω\Omega・Θ\Theta 記法

f,gf, g を十分大きな nn で正の値をとる関数とする。

f(n)=O(g(n))  ⟺  ∃c>0, ∃n0, ∀n≥n0: f(n)≤c g(n)f(n)=Ω(g(n))  ⟺  ∃c>0, ∃n0, ∀n≥n0: f(n)≥c g(n)f(n)=Θ(g(n))  ⟺  f(n)=O(g(n)) かつ f(n)=Ω(g(n))\begin{aligned} f(n) = O(g(n)) &\iff \exists c > 0,\ \exists n_0,\ \forall n \ge n_0:\ f(n) \le c\, g(n) \\ f(n) = \Omega(g(n)) &\iff \exists c > 0,\ \exists n_0,\ \forall n \ge n_0:\ f(n) \ge c\, g(n) \\ f(n) = \Theta(g(n)) &\iff f(n) = O(g(n)) \text{ かつ } f(n) = \Omega(g(n)) \end{aligned}

OO は上界、Ω\Omega は下界、Θ\Theta は上下両方からの評価を表す。f(n)=o(g(n))f(n) = o(g(n)) は「任意の c>0c > 0 に対して、十分大きな nn で f(n)<c g(n)f(n) < c\,g(n)」を意味する。

定理・法則

極限による判定

条件

f,gf, g は十分大きな nn で正。極限 L=lim⁡n→∞f(n)/g(n)L = \lim_{n \to \infty} f(n)/g(n) が存在する(∞\infty を含む)。

主張

  • 0<L<∞0 < L < \infty なら f(n)=Θ(g(n))f(n) = \Theta(g(n))。
  • L=0L = 0 なら f(n)=o(g(n))f(n) = o(g(n))、特に f(n)=O(g(n))f(n) = O(g(n))。
  • L=∞L = \infty なら f(n)=Ω(g(n))f(n) = \Omega(g(n)) で、f(n)=O(g(n))f(n) = O(g(n)) ではない。

要点

極限が存在しない場合はこの判定は使えず、定義に戻る。たとえば f(n)=n(2+sin⁡n)f(n) = n(2 + \sin n) と g(n)=ng(n) = n では比が振動するが、n≤f(n)≤3nn \le f(n) \le 3n から f(n)=Θ(n)f(n) = \Theta(n) である。

計算例

定義どおりに Θ\Theta を示す

f(n)=3n2+5nf(n) = 3n^2 + 5n が Θ(n2)\Theta(n^2) であることを、定数 c,n0c, n_0 を具体的に与えて示せ。

解答

n≥1n \ge 1 のとき 5n≤5n25n \le 5n^2 なので f(n)≤8n2f(n) \le 8n^2。また f(n)≥3n2f(n) \ge 3n^2。よって c1=3c_1 = 3、c2=8c_2 = 8、n0=1n_0 = 1 として 3n2≤f(n)≤8n23n^2 \le f(n) \le 8n^2(n≥1n \ge 1)が成り立ち、f(n)=Θ(n2)f(n) = \Theta(n^2)。

検算

極限でも lim⁡n→∞(3n2+5n)/n2=3\lim_{n\to\infty} (3n^2 + 5n)/n^2 = 3 で、0<3<∞0 < 3 < \infty から同じ結論になる。

マスター定理と使える条件

定理・法則

マスター定理

条件

a≥1a \ge 1、b>1b > 1 は定数、f(n)f(n) は十分大きな nn で正の関数で、T(n)=aT(n/b)+f(n)T(n) = aT(n/b) + f(n)(n/bn/b は ⌊n/b⌋\lfloor n/b \rfloor や ⌈n/b⌉\lceil n/b \rceil でもよい)。α=log⁡ba\alpha = \log_b a とおく。

主張

  1. ある ε>0\varepsilon > 0 で f(n)=O(nα−ε)f(n) = O(n^{\alpha - \varepsilon}) なら T(n)=Θ(nα)T(n) = \Theta(n^{\alpha})。
  2. f(n)=Θ(nα)f(n) = \Theta(n^{\alpha}) なら T(n)=Θ(nαlog⁡n)T(n) = \Theta(n^{\alpha} \log n)。
  3. ある ε>0\varepsilon > 0 で f(n)=Ω(nα+ε)f(n) = \Omega(n^{\alpha + \varepsilon}) であり、さらにある定数 c<1c < 1 と十分大きな nn で af(n/b)≤cf(n)a f(n/b) \le c f(n)(正則条件)が成り立つなら T(n)=Θ(f(n))T(n) = \Theta(f(n))。

要点

再帰木の深さ jj の段の和は ajf(n/bj)a^j f(n/b^j) で、葉は alog⁡bn=nαa^{\log_b n} = n^{\alpha} 個ある。場合1は葉の和、場合3は根の項が全体を決め、場合2は log⁡bn\log_b n 段がほぼ同じ大きさになる。f(n)f(n) が nαn^{\alpha} より大きく(小さく)ても多項式の差 nεn^{\varepsilon} がなければ、3つのどれにも当てはまらない。

場合2は f(n)=Θ(nαlog⁡kn)f(n) = \Theta(n^{\alpha} \log^k n)(k≥0k \ge 0)に広げられ、そのとき T(n)=Θ(nαlog⁡k+1n)T(n) = \Theta(n^{\alpha} \log^{k+1} n) となる。この拡張版を使う答案では、拡張版であることを書いておく。T(n)=T(n−1)+f(n)T(n) = T(n-1) + f(n) のように引数が定数ずつしか減らない漸化式は、b>1b > 1 の形でないのでマスター定理の対象外である。

よく出る漸化式の解

代表的な漸化式(T(1)T(1) は定数)

二分探索
T(n)=T(n/2)+Θ(1) ⇒ T(n)=Θ(log⁡n)T(n) = T(n/2) + \Theta(1) \ \Rightarrow\ T(n) = \Theta(\log n)

マスター定理の場合2(a=1a = 1、b=2b = 2、α=0\alpha = 0)。

マージソート
T(n)=2T(n/2)+Θ(n) ⇒ T(n)=Θ(nlog⁡n)T(n) = 2T(n/2) + \Theta(n) \ \Rightarrow\ T(n) = \Theta(n \log n)

場合2(α=1\alpha = 1)。

木の走査
T(n)=2T(n/2)+Θ(1) ⇒ T(n)=Θ(n)T(n) = 2T(n/2) + \Theta(1) \ \Rightarrow\ T(n) = \Theta(n)

場合1(α=1\alpha = 1、f(n)=O(n1−ε)f(n) = O(n^{1 - \varepsilon}))。

カラツバ法
T(n)=3T(n/2)+Θ(n) ⇒ T(n)=Θ(nlog⁡23)T(n) = 3T(n/2) + \Theta(n) \ \Rightarrow\ T(n) = \Theta(n^{\log_2 3})

log⁡23≈1.585\log_2 3 \approx 1.585。場合1。

挿入ソートの最悪
T(n)=T(n−1)+Θ(n) ⇒ T(n)=Θ(n2)T(n) = T(n-1) + \Theta(n) \ \Rightarrow\ T(n) = \Theta(n^2)

和 ∑k=1nk=n(n+1)/2\sum_{k=1}^{n} k = n(n+1)/2 から。

素朴なフィボナッチ
T(n)=T(n−1)+T(n−2)+Θ(1) ⇒ T(n)=Θ(φn),φ=1+52T(n) = T(n-1) + T(n-2) + \Theta(1) \ \Rightarrow\ T(n) = \Theta(\varphi^n), \quad \varphi = \frac{1 + \sqrt{5}}{2}

特性方程式 x2=x+1x^2 = x + 1 の大きいほうの解が増え方を決める。

増え方の順序

代表的な関数
1≺log⁡n≺n≺n≺nlog⁡n≺n2≺n3≺2n≺n!≺nn1 \prec \log n \prec \sqrt{n} \prec n \prec n \log n \prec n^2 \prec n^3 \prec 2^n \prec n! \prec n^n

f≺gf \prec g は f=o(g)f = o(g) の意味。任意の k>0k > 0、ε>0\varepsilon > 0 で log⁡kn=o(nε)\log^k n = o(n^{\varepsilon})、nk=o(2n)n^k = o(2^n)。

スターリングの公式から
log⁡2n!=nlog⁡2n−nlog⁡2e+O(log⁡n)=Θ(nlog⁡n)\log_2 n! = n \log_2 n - n \log_2 e + O(\log n) = \Theta(n \log n)

再帰木と置換法で漸化式を解く

再帰木の方法は次の順で進める。

  1. 漸化式を1段ずつ展開し、深さ jj の段にある部分問題の数と大きさを書く(例:aja^j 個、大きさ n/bjn/b^j)。
  2. 段ごとの和 ajf(n/bj)a^j f(n/b^j) を求める。
  3. 深さ log⁡bn\log_b n まで足し、葉の分 Θ(nlog⁡ba)\Theta(n^{\log_b a}) を加える。
  4. 得た式を予想として、必要なら帰納法(置換法)で上界・下界を示す。

計算例

2T(n/2)+n2T(n/2) + n の厳密解

n=2kn = 2^k に対して T(1)=0T(1) = 0、T(n)=2T(n/2)+nT(n) = 2T(n/2) + n を解け。

解答

両辺を nn で割って S(k)=T(2k)/2kS(k) = T(2^k)/2^k とおくと S(k)=S(k−1)+1S(k) = S(k-1) + 1、S(0)=0S(0) = 0 なので S(k)=kS(k) = k。よって

T(n)=nlog⁡2nT(n) = n \log_2 n

再帰木で見ると、各段の和はどれも nn で、段の数は log⁡2n\log_2 n である。

検算

T(2)=2T(2) = 2、T(4)=2⋅2+4=8T(4) = 2 \cdot 2 + 4 = 8、T(8)=2⋅8+8=24T(8) = 2 \cdot 8 + 8 = 24 で、nlog⁡2nn \log_2 n はそれぞれ 2,8,242, 8, 24。マスター定理の場合2の Θ(nlog⁡n)\Theta(n \log n) とも一致する。

計算例

3T(n/2)+n3T(n/2) + n の厳密解

n=2kn = 2^k に対して T(1)=1T(1) = 1、T(n)=3T(n/2)+nT(n) = 3T(n/2) + n を解け。

解答

展開すると深さ jj の段の和は 3j⋅n/2j=n(3/2)j3^j \cdot n/2^j = n(3/2)^j で、深さ kk に 3k3^k 個の葉がある。

T(n)=∑j=0k−1n(32)j+3k=2n((32)k−1)+3k=3⋅3k−2nT(n) = \sum_{j=0}^{k-1} n\left(\frac{3}{2}\right)^j + 3^k = 2n\left(\left(\frac{3}{2}\right)^k - 1\right) + 3^k = 3 \cdot 3^k - 2n

3k=3log⁡2n=nlog⁡233^k = 3^{\log_2 n} = n^{\log_2 3} なので T(n)=3nlog⁡23−2n=Θ(nlog⁡23)T(n) = 3n^{\log_2 3} - 2n = \Theta(n^{\log_2 3})。

検算

T(2)=3+2=5T(2) = 3 + 2 = 5 と 3⋅3−4=53 \cdot 3 - 4 = 5、T(4)=15+4=19T(4) = 15 + 4 = 19 と 3⋅9−8=193 \cdot 9 - 8 = 19 が一致する。f(n)=n=O(nlog⁡23−0.5)f(n) = n = O(n^{\log_2 3 - 0.5}) なのでマスター定理の場合1とも合う。

計算例

マスター定理の基本形で解けない漸化式

n=2kn = 2^k に対して T(1)=0T(1) = 0、T(n)=2T(n/2)+nlog⁡2nT(n) = 2T(n/2) + n\log_2 n を解け。

解答

α=1\alpha = 1 で、f(n)/nα=log⁡2nf(n)/n^{\alpha} = \log_2 n は増えるが、どの ε>0\varepsilon > 0 でも nεn^{\varepsilon} より遅い。よって場合3は使えない。再帰木では深さ jj の段の和が 2j⋅(n/2j)log⁡2(n/2j)=n(k−j)2^j \cdot (n/2^j)\log_2(n/2^j) = n(k - j) なので

T(n)=∑j=0k−1n(k−j)=n k(k+1)2=nlog⁡2n (log⁡2n+1)2=Θ(nlog⁡2n)T(n) = \sum_{j=0}^{k-1} n(k-j) = n\,\frac{k(k+1)}{2} = \frac{n \log_2 n\,(\log_2 n + 1)}{2} = \Theta(n \log^2 n)

検算

T(2)=2T(2) = 2、T(4)=2⋅2+4⋅2=12T(4) = 2 \cdot 2 + 4 \cdot 2 = 12 で、式の値は 2⋅1⋅2/2=22 \cdot 1 \cdot 2/2 = 2、4⋅2⋅3/2=124 \cdot 2 \cdot 3/2 = 12。拡張版の場合2(k=1k = 1)の Θ(nlog⁡2n)\Theta(n\log^2 n) とも一致する。

答案でよくある誤り

  1. 1

    OO を「ちょうどその増え方」の意味で使う。n=O(n2)n = O(n^2) も正しいので、上下両方を言うときは Θ\Theta を使い、下界も示す。

  2. 2

    f(n)=nlog⁡nf(n) = n\log n、a=b=2a = b = 2 にマスター定理の場合3を当てはめる。nlog⁡nn \log n は n1+εn^{1+\varepsilon} より遅いので場合3の条件を満たさない。再帰木で解くか、拡張版の場合2を明示して使う。

  3. 3

    場合3で正則条件 af(n/b)≤cf(n)af(n/b) \le cf(n)(c<1c < 1)を確かめずに結論する。多項式の ff では成り立つが、答案では一行で確認を書く。

  4. 4

    T(n)=T(n−1)+nT(n) = T(n-1) + n にマスター定理を使う。引数が定数ずつ減る漸化式は対象外で、和 ∑k=Θ(n2)\sum k = \Theta(n^2) を直接計算する。

  5. 5

    対数の底を気にして O(log⁡2n)O(\log_2 n) と O(log⁡10n)O(\log_{10} n) を区別する。底の変換は定数倍なのでオーダーは同じだが、2log⁡2n=n2^{\log_2 n} = n と 2log⁡10n2^{\log_{10} n} のように指数に入ると異なる。

計算量と漸化式が出た院試の過去問

院試hubが年度別解説の大問を分類した集計から、この単元の内容を扱う出題を挙げる。問題文は各大学の公式過去問で確かめ、解き方は各年度の解説ページで読める。

アルゴリズムとデータ構造の前後の単元

このページの本文を数式のLaTeXのまま読むには Markdown版。最終更新 2026-11-16。誤りに気づいたら 運営者 へ連絡してほしい。

情報系院試の問題集・ロードマップ

東大情報理工・東京科学大・阪大の大学別に、出題マップと類題を1冊にした教材(各4,980円)。収録内容と見本を商品ページで確認できる。

情報系の教材を見る