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