マスター定理

Master theorem

100万個を並べ替える手数は、5,000億回から2,000万回に減る。

問題をa個の大きさn/bの問題に分け、つなぐのにnのd乗くらいの手数がかかるとき、全体の手数を3通りで言い当てる定理。dとlog_b aの大小で決まる。

年代
1980年(ベントリー、ハーケン、サックスの論文)
習う
大2・情報科学・アルゴリズム
レベル
大学(例題 4 問)
人物
ジョン・ベントリー、ドロシア・ハーケン、ジェームズ・サックス
作成日
更新日
執筆・監修
佐々木 航
起源

100万個を並べる手数

100万個の数を小さい順に並べ替えるには、何回くらい比べればよいだろうか。選択ソートのように全部の組を1回ずつ比べると、約5,000億回になる。でも、列を半分に分けてそれぞれを並べ、並んだ2つの列をつなぐマージソートなら、約2,000万回で済む。

分けて解き、答えをつなぐ。この分割統治の手数は、の形の漸化式で書ける。漸化式は、大きさの問題の手数を、もっと小さな問題の手数で表した式である。1980年、ジョン・ベントリー、ドロシア・ハーケン、ジェームズ・サックスは論文「分割統治の漸化式を解く一般的な方法」を『ACM SIGACT News』に発表し、この形の漸化式をまとめて解く方法を示した。

この方法は、いまはマスター定理、またはマスター法と呼ばれている。たとえばMITが2005年に開いたアルゴリズムの講義では、第2回の題に「マスター法」が入っている。受け持ったのはエリック・デメインと、教科書『Introduction to Algorithms』の著者の1人であるチャールズ・ライザーソンだ。

途中の計算

段ごとの手数を足す

図で納得する

は、大きさの問題を解く手数(回)である。は、並べ替える数の個数のような問題の大きさで、は分けてできる小さな問題の数、は小さな問題1つが元の何分の1の大きさかを表す。は、分けた答えをつなぐ手数がの乗くらいかかることを表す。

マージソートでは、大きさ8の列を、半分の大きさ(b = 2)の列2つ(a = 2)に分け、並べた2つをつなぐのに約8回比べる(d = 1)。

(シータ)は、だいたいの増え方を表す記号だ。は、が大きいとき、がの決まった2つの倍数、たとえば1倍と2倍の間に挟まることをいう。つまり、定数倍の違いは気にせず、を10倍にしたら手数が何倍になるかだけを見る。

横軸がn、縦軸が手数。T(n) = nの2乗 + 6nの曲線は、nが6より大きい所で、1 × nの2乗と2 × nの2乗の2本の曲線の間に入る。このとき、T(n)はnの2乗と同じ程度に増えるという。

分割統治の手数は、分け方を木の形に描くとつかめる。いちばん上の段に大きさの問題を置き、分けた個を1つ下の段に並べる。これを大きさ1になるまで続けると、各段の手数をすべて足したものがになる。

マージソートでn = 8の列を分ける木。段0は大きさ8の列が1つ、段1は4の列が2つ、段2は2の列が4つ、段3は1の列が8つで、どの段も手数は8回になり、4段で合計32回である。

段ごとの手数は、、、の組み合わせによって、下の段ほど減るか、どの段も同じか、下の段ほど増えるかの3通りに分かれる。

大きさの問題をで分け、分ける数とつなぐ手数を選ぶと、段0から段5までの手数が棒で並ぶ。マージソート(、)と二分探索(、)では、どの段も同じ長さになる。カラツバ法(、)では下の段ほど長く、、では下の段ほど短い。

読み出しのは「2を何乗するとになるか」を表す数で、これをと比べると答えが決まる。

では、段の手数を全部足すと、どれくらいになるのか。段の手数は、1つ下の段へ進むたびに同じ数が掛かる等比数列で、この掛かる数を公比という。等比数列の和は、公比が1より小さければ最初の項で、1より大きければ最後の項でほぼ決まる。

公比0.5では1 + 0.5 + 0.25 + 0.125 = 1.875で、最初の項の2倍に届かない。公比2では1 + 2 + 4 + 8 = 15で、最後の項8の2倍に届かない。

式で確かめる

道すじは3段ある。段ごとの手数を足して等比数列の和にし(手順1〜4)、公比の大きさで3通りに分けて和を見積もり(手順5〜8)、最後にと1の比べ方を、との比べ方に直す(手順9〜11)。簡単のため、はの累乗で、大きさ1の問題は1回で解け、つなぐ手数はちょうど回とする。

  1. 段にある問題の数と、1つの大きさを書く

  2. 段の問題個の手数を足す

  3. を前に出し、残りを乗の形にまとめる

  4. 段0から最後の段までを足す

ここでは段から段への公比、はをで何回割ると1になるかを表す数で、となる。このようなをと書き、「を何乗するとになるか」を表す。、ならで、木は段0から段3までの4段になる。

マージソートの(、、)で段1を計算すると、回で、木の図の段1と合う。公比はなので、どの段も回である。手数に定数を掛けても、の答えは変わらない。

  1. なら、かっこの中は1以上でより小さい

  2. なら、かっこの中は1が個

  3. なら、かっこの中は最後の項以上で、その倍より小さい

  4. 最後の段の手数にを使う

手順5の両側はどちらもの定数倍なので、である。手順5と7の倍率とは、公比0.5でも公比2でも2になり、等比数列の図の「2倍」はこの数だ。

手順6のは、(底という)を替えても定数倍しか変わらないので、の中では底を書かない。手順8のは最後の段にある問題の数、つまり木の葉の数で、では葉の数が手数を決める。

n = 8、a = 3、b = 2の木は1段下るごとに3つに分かれ、3段下った葉の数は3 × 3 × 3 = 27になる。これは8の1.585乗とほぼ等しい。

累乗の対数は、指数を前に出した掛け算になる。たとえばで、これはと等しい。

  1. 2つの数のをとって比べる

  2. 対数が等しいので、元の数も等しい

  3. の両辺にを掛けてからをとる

同じように、はに、はにあたる。手順5、6、10の答えが、マスター定理の3つの場合である。

ただ、ここで示したのは、つなぐ手数がの形をしているときの簡単な版である。教科書の一般の形では、つなぐ手数を任意の式で書き、がより十分速く増える場合には、()という条件を付け加える。

応用

4つのアルゴリズムに数を入れる

二分探索、マージソート、カラツバ法、シュトラッセン法は、どれも問題を半分の大きさに分けるのでである。だから、と比べる相手はになる。

2を何乗するとその数になるかを、数の直線の上下に並べる。2は1乗、3は約1.585乗、4は2乗、7は約2.807乗、8は3乗である。

この値とを比べると、答えが決まる。表の比は、大きさ1を1回、つなぐ手数をちょうど回として(約105万)の手数を漸化式から出し、答えの式で割った値である。

アルゴリズム答え比
二分探索101.05
マージソート211.05
カラツバ法313.00
シュトラッセン法722.33

二分探索とマージソートはの場合だ。マージソートの手数は22,020,096回で、の20,971,520回より少し多いが、比は1.05にとどまる。一方、カラツバ法とシュトラッセン法はの場合で、比はでも2.97と2.33で、ほとんど変わらない。比が一定の数に落ち着くことが、で答えが合っているという意味だ。

二分探索は、小さい順に並んだ列の真ん中と比べて、探す範囲を半分ずつに絞る方法だ。カラツバ法は、2つの大きな数の掛け算を半分の長さの掛け算3回にする方法で、くわしくは整数の掛け算で読める。シュトラッセン法は、行列の積を半分の大きさの積7回にする方法で、行列の積の指数のはこの計算から出る。

比べるだけの並べ替えは、マージソートのより速くできないことが知られている。最短経路の並べ替えの壁の話は、そこから始まる。

例題と解説

漸化式を解く練習

例題 1基本対数の値と3つの場合

(1)、、を求めよ。(2)で、、、のときの答えをそれぞれ求めよ。

解説を見る

(1)、、なので、順に3、2、0.5である。

(2)、で、である。は、は、はの場合にあたる。

例題 2大学マージソートの手数を数える

、とする。のときを示し、を求めよ。

解説を見る

手順3で、、なので、公比はである。どの段の手数もになる。

木の段は段0から段までの段で、である。手順4から次の式になる。

なら次のとおりだ。

例題 3大学シュトラッセン法の掛け算の回数

の行列の積を、半分の大きさの積7回に分けると、掛け算の回数は、になる。(1)のときを示せ。(2)のとき、定義どおりの回と比べて何倍か。

解説を見る

(1)掛け算の回数だけを数えるので、つなぐ手数は0回で、手数は葉の数だけになる。1段下るごとに7倍で、段で回である。手順9と同じく書き直す。

(2)、である。

約0.26倍、つまり4分の1ほどになる。

例題 4大学簡単な版に入らない漸化式

、とする。のとき、再帰の木でを示し、を導け。

解説を見る

つなぐ手数はの形ではないので、簡単な版は使えない。段には大きさの問題が個あり、1つをつなぐ手数はである。

段0から段まで足す(段の葉は)。

なので、が大きいときはに近づき、である。ならで、になる。

参考文献

  1. 中央大学「数理情報学2」シラバス(2026年度 後期、理工学部、2年次配当。授業計画に「分割統治法1:マージソート、漸化式の解析」「分割統治法4:Strassenの行列積アルゴリズム」)
  2. J. L. Bentley, D. Haken, J. B. Saxe, "A general method for solving divide-and-conquer recurrences", ACM SIGACT News 12(3), 36-44 (1980), doi:10.1145/1008861.1008865
  3. E. D. Demaine, C. E. Leiserson, "Lecture 2: Asymptotic Notation, Recurrences, Substitution, Master Method", MIT 6.046J Introduction to Algorithms (Fall 2005), MIT OpenCourseWare。読む範囲は同講義の「Readings」(T. Cormen, C. Leiserson, R. Rivest, C. Stein, Introduction to Algorithms, 3rd ed., MIT Press, 2009の第3〜4章)
  4. 鹿島久嗣「アルゴリズムとデータ構造④ 分割統治法」京都大学の講義資料(2022年。つなぐ手数が問題の大きさに比例する場合の簡易版の定理と、マージソートの解析)

タグ

この記事は、人が監修しながらAIを活用して執筆した。執筆・監修: 佐々木 航(株式会社Game)。

姉妹サイト

株式会社Game が運営するメディアです。