アルゴリズムと計算量の問題
互いに異なる 個の数を並べた配列を、次のマージソートで昇順に並べかえる。
- 長さ の配列はそのまま返す。
- 長さ ( は正の整数)の配列は、前半 個と後半 個に分け、それぞれを再帰的にこのマージソートで並べかえたあと、次の「マージ」で つの昇順の列にまとめる。
- マージ: 昇順に並んだ 2 つの列の先頭どうしを 回比較し、小さい方を取り出して出力の末尾に加える。これを一方の列が空になるまで繰り返し、空になったら、もう一方の列に残っている数を比較せずにそのまま出力の末尾に加える。
入力の 個の数の並び方は 通りすべてが等確率で現れるものとする。このとき、ソート全体で行われる数どうしの比較回数の期待値を求めよ。
この問題で使うもの
- ソートの平均比較回数と転倒数(説明と入口の問題)
- 指示変数と期待値の線形性(説明と入口の問題)
- 組合せ(説明と入口の問題)
この問題を解けるようになるまで(30 技能)
読み込み中…
右端(太枠)がこの問題で使う技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
一覧で見る(前提が先)
- 分数のたし算・ひき算
- 小数の四則計算
- 正負の数の加法・減法
- 分数のかけ算・わり算
- 四則の混じった計算の順序
- 正負の数の乗除・累乗と四則混合
- 約数の見つけ方
- 素因数分解と約数の個数
- 平方根の意味と根号の簡単化
- 根号の乗除と加減
- 指数の拡張と指数関数
- 対数の定義と性質
- 樹形図で数え上げる
- 積の法則と和の法則
- 和の法則・積の法則と樹形図
- 順列・円順列・重複順列
- ソート・探索の最悪比較回数
- 組合せ
- 確率の定義と和事象・余事象
- 期待値
- 確率変数と確率分布
- 平均と合計
- 平均値・中央値・最頻値
- 代表値(平均値・中央値・最頻値)
- 分散と標準偏差
- 変量の変換と平均・分散
- 確率変数の期待値・分散と
- 確率変数の和と積(独立な場合)
- 指示変数と期待値の線形性
- ソートの平均比較回数と転倒数
ヒント
行き詰まったら、上から順に 1 つずつ開いてください。
ヒント 1
マージソート全体の比較回数は、各段のマージの比較回数の和である。期待値の線形性を使って、長さ 、、 のマージごとに期待値を求めよう。
ヒント 2
一様ランダムな入力では、マージする 2 列の数が小さい順にどう入り混じるか(前半を 、後半を とした列)は 通りが等確率。比較回数は(合計個数)(最後の同じ文字の連の長さ)になる。
ヒント 3
が 個、 が 個のとき、末尾の の連の長さの期待値は 。長さ どうしのマージの比較回数の期待値は となる。
答えと解説
答えを見る
どこでつまずきましたか?(選ぶと、戻る場所を案内します)
解説を読む
再帰の構造. 長さ の配列は長さ の 2 つに、それぞれの長さ は長さ の 2 つに、長さ は長さ の 2 つに分かれる。したがって行われるマージは
- 長さ と のマージ: 回
- 長さ と のマージ: 回
- 長さ と のマージ: 回
であり、比較回数の期待値はそれぞれのマージの比較回数の期待値の和(期待値の線形性)になる。
各マージに入る列の並び方. 入力が一様ランダムな順列なので、ある長さ の部分配列について、その 個の数を小さい順に並べたとき「前半 個に属する数」がどの順位を占めるかは、 通りすべてが等確率である。マージの比較回数はこの順位の並び(前半を 、後半を と書いた 個・ 個の列)だけで決まる。
長さ と のマージの比較回数. 合計 個を出力するが、一方の列が空になったあとに残りをそのまま加える分は比較しない。 の列の末尾にある同じ文字の連なり(最後の連)の長さを とすると、その 個は比較なしで出力されるので、比較回数は である。
の期待値を求める。 の連で終わる場合の連の長さを ( で終わるなら )とし、 も同様とすると 。 となるのは末尾 文字がすべて のときで、その確率は
これを について足すと となる( の個数 、 の個数 のとき、末尾の の連の長さの期待値は :各 が「すべての より後ろ」にある確率が だから)。よって
- :(実際、長さ どうしは必ず 回)
- :
- :
検算(). の比較回数はそれぞれ で、平均は 。
合計.
別解
入力が一様ランダムな順列なら、各マージに入る 2 つの列は、それぞれ互いに独立に一様ランダムな相対順序をもち、2 列の要素の混ざり方(どの位置が前半由来か)は、 通りが等確率になる。
長さ と の昇順列のマージの比較回数 を求める。一方の列が空になった時点で、もう一方に残っている要素数を とすると、比較回数は (比較 1 回ごとに 1 個出力され、残りは比較なしで出力されるため)。
の期待値: 出力列の末尾に連続して並ぶ「同じ列由来の要素」の個数が 。全体の最大値が前半由来のとき、末尾の連続する前半由来の個数 について、末尾から 個が前半由来で、その直前が後半由来(または全部が前半由来)。
。末尾 個がすべて前半由来となる確率は 。後半由来についても同様。
計算すると、 なので(ホッケースティック恒等式)、前半由来の側の期待値は 。後半由来の側も同じ。よって 。
したがって 。
検算: で (比較 1 回)で一致。 で : 4 要素のうち前半 2 個・後半 2 個の混ざり方 6 通りで比較回数は 3,3,3,3,2,2 なので平均 で一致。
配列の長さ 8 のマージソート:
- 長さ 1 の 2 つをマージ: が 4 回、各 → 計
- 長さ 2 の 2 つをマージ: が 2 回、各 → 計
- 長さ 4 の 2 つをマージ: が 1 回、
前半・後半は独立に一様な相対順序をもつので、期待値の線形性から合計は
。
(最悪 17 回より小さく妥当。)