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