単元一覧 › 大学数学 アルゴリズムと計算量

アルゴリズムと計算量の問題

難易度 4大学院入試の標準レベル大学数学 アルゴリズムと計算量

互いに異なる 個の数を並べた配列を、次のマージソートで昇順に並べかえる。

  • 長さ の配列はそのまま返す。
  • 長さ ( は正の整数)の配列は、前半 個と後半 個に分け、それぞれを再帰的にこのマージソートで並べかえたあと、次の「マージ」で つの昇順の列にまとめる。
  • マージ: 昇順に並んだ 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 回より小さく妥当。)

この問題の確認

AI が作成した問題です。公開前に次の確認を行いました。確認の方法について

間違いを報告する

この問題の誤り・分かりにくい点・難易度や学年のずれを知らせる
どこについての報告ですか

報告の内容と問題の番号を保存します。名前やメールアドレスは保存しません。

関連する問題