アルゴリズムと計算量の問題
互いに異なる 個の実数を並べた配列 を、次のバブルソートで昇順に並べかえる。
の順に、 の順で と を比べ、 ならば と を交換する。
最初の並びは、 個の数の 通りの並べ方のどれもが同様に確からしいとする。このソートで行われる交換の回数の期待値を求めよ。
この問題で使うもの
- ソートの平均比較回数と転倒数(説明と入口の問題)
この問題を解けるようになるまで(30 技能)
読み込み中…
右端(太枠)がこの問題で使う技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
一覧で見る(前提が先)
- 分数のたし算・ひき算
- 小数の四則計算
- 正負の数の加法・減法
- 分数のかけ算・わり算
- 四則の混じった計算の順序
- 正負の数の乗除・累乗と四則混合
- 約数の見つけ方
- 素因数分解と約数の個数
- 平方根の意味と根号の簡単化
- 根号の乗除と加減
- 指数の拡張と指数関数
- 対数の定義と性質
- 樹形図で数え上げる
- 積の法則と和の法則
- 和の法則・積の法則と樹形図
- 順列・円順列・重複順列
- ソート・探索の最悪比較回数
- 組合せ
- 確率の定義と和事象・余事象
- 期待値
- 確率変数と確率分布
- 平均と合計
- 平均値・中央値・最頻値
- 代表値(平均値・中央値・最頻値)
- 分散と標準偏差
- 変量の変換と平均・分散
- 確率変数の期待値・分散と
- 確率変数の和と積(独立な場合)
- 指示変数と期待値の線形性
- ソートの平均比較回数と転倒数
ヒント
行き詰まったら、上から順に 1 つずつ開いてください。
ヒント 1
技能「ソートの平均比較回数と転倒数」を使います。隣り合う 個の交換で転倒数がどう変わるかを考え、交換回数を転倒数で表しましょう。
ヒント 2
回の交換で転倒数はちょうど 減ります。ランダムな並びの転倒数の期待値は です。
ヒント 3
交換回数は転倒数 に等しくなります。各組 が転倒になる確率は で、組は 個あります。
答えと解説
答えを見る
どこでつまずきましたか?(選ぶと、戻る場所を案内します)
解説を読む
手順 1:交換回数を転倒数で表す。
かつ となる位置の組 を転倒といい、その個数を転倒数という。
隣り合う を交換すると、この 個の大小の順だけが入れかわり、ほかの組の大小の順は変わらない。したがって、 回の交換で転倒数はちょうど 減る。ソートが終わると昇順になるので、転倒数は である。
よって、交換回数は最初の並びの転倒数 に等しい。
手順 2:転倒数の期待値を求める。
の各組について、 のとき 、そうでないとき をとる指示変数 を考えると、
である。
と の値を入れかえる対応は、 となる並びと となる並びを 対 に対応させる。したがって、
である。
期待値の線形性( どうしが独立でなくても成り立つ)を使うと、
となる。
これは公式 に を代入した値 と一致する。
したがって、交換回数の期待値は である。
別解
バブルソートで行われる交換は、隣り合う要素の逆順対を1つ解消するので、交換の総回数は初期配列の転倒数(i<j かつ A[i]>A[j] となる対の個数)に等しい。
各対 (i,j)(i<j)について、A[i]>A[j] となる確率は、数がすべて異なり並べ方が同様に確からしいので 1/2 である。対の個数は なので、期待値は線形性より 。
検算:n=2 のとき期待値は 1/2 で、実際 (1,2) は交換0回、(2,1) は交換1回なので平均 1/2 となり一致する。また n=3 のとき 3/2 となる。転倒数は 0,1,1,2,2,3 で合計 9、平均 9/6=3/2 となり一致する。
答え: