互いに異なる 個の実数を並べた配列 を、次のバブルソートで昇順に並べかえる。
の順に、 の順で と を比べ、 ならば と を交換する。
最初の並びは、 個の数の 通りの並べ方のどれもが同様に確からしいとする。このソートで行われる交換の回数の期待値を求めよ。
ランダムな並びの転倒数の期待値 などを使い、挿入ソートなどの比較回数の期待値を求められる
読み込み中…
右端(太枠)がこの技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
並びの中で「大小の順序が逆になっている 2 つの組」を転倒(反転)といい、その個数を転倒数といいます。挿入ソートやバブルソートのように隣どうしを入れ替えて並べる方法では、入れ替えの回数が転倒数とぴったり一致し、比較回数も転倒数を使って表せます。ランダムな並びの転倒数の期待値 を指示変数で求めれば、これらのソートの平均的な手間を正確に計算できます。
相異なる 個の数の並び で、 かつ となる位置の組 を転倒といいます。すべて昇順なら転倒数は 、すべて降順なら最大の です。挿入ソートで要素 を左へ送るとき、 が追い越す要素は「 より左にあって より大きい要素」、つまり が右側を担う転倒とちょうど 1 対 1 に対応します。1 回追い越すごとに転倒がちょうど 1 つ解消され、他の組の前後関係は変わりません。したがって、ずらし(隣どうしの入れ替え)の総回数は転倒数そのものです。
通りの並びが等確率で現れるとします。位置の組 を 1 つ固定し、事象「」の指示変数を とします。ある並びの 番目と 番目の値を入れ替えると別の並びが得られ、この対応は「その組が転倒している並び」と「転倒していない並び」の間の 1 対 1 対応になります。よって です。転倒数は と書けるので、期待値の線形性から となります。 どうしは独立ではありませんが、期待値の線形性は独立性がなくても成り立ちます。
比較回数は、ずらし回数とは少しずれます。 を挿入するとき、大きい要素を追い越すたびに 1 回比較し、さらに「自分より小さい要素に出会って止まる」ための比較が 1 回加わります。ただし先頭まで行き着いた場合は、止まるための比較がありません。先頭まで行くのは、 が の中で最小のときです。最小値が 個の位置のどこにあるかは対称なので、その確率は です。以上から、比較回数の期待値は転倒数の期待値に補正を加えて求められます。
数えたい量(入れ替え回数・比較回数など)が転倒数とどう結びつくかを確かめる。隣どうしの入れ替え 1 回で転倒数はちょうど 1 減るので、入れ替え回数 転倒数 となる。
転倒数を指示変数に分ける:。対称性から なので、。
比較回数を「転倒数 + 補正」の形で表す。挿入ソートでは、 番目の挿入()の比較回数は、 が先頭まで行けば(左の大きい要素の個数)、そうでなければ(左の大きい要素の個数)。よって比較回数 は と書ける。ここで は「 が の最小値」となる ()の個数。
補正の項も指示変数で期待値を出す: が最初の 個の最小値 より、。ここで とする。
線形性で足し合わせる:。最後に具体的な を代入する。
相異なる 4 個の数を並べた列で、 通りの並びが等確率で現れるとする。これを次の挿入ソートで昇順に並べる。 の順に、 を取り出して左隣の要素から順に左へ向かって比較する。比較した要素が より大きければそれを 1 つ右へずらして比較を続け、 より小さい要素に出会うか左端に達したら、その位置に を置く。このとき、要素どうしの比較回数の期待値を求めよ。
【手順 1】 を挿入するとき、左にあって より大きい要素は 1 つずつ追い越されます。その個数は、 が右側になっている転倒の個数です。 について足し合わせると、ずらしの総数は転倒数 になります。
【手順 2】、 なので、。
【手順 3】各挿入では、追い越すときの比較に加えて、止まるための比較が 1 回あります。ただし左端に達したときはその 1 回がありません。左端に達する回数を とすると、比較回数は です(挿入は の 3 回)。
【手順 4】 が左端に達するのは、 が の最小値のときで、その確率は です。よって 。
【手順 5】。
(確認) 番目の挿入だけを見ると、比較回数の期待値は です。これを使うと となり、一致します。
答え:
挿入ソートの比較回数を転倒数そのものとしてしまう誤り。転倒数と一致するのはずらし(入れ替え)の回数です。比較回数は止まるための比較が加わって となり、期待値は です(例えば なら ではなく )。
数える組を順序付きの組にしてしまい、 とする誤り。転倒は位置の組 ごとに 1 回だけ数えるので、組の数は です。正しくは 。
指示変数 が独立でないから期待値を足せない、と考えてしまう誤り。期待値の線形性 は独立性なしで成り立ちます。ただし分散については、独立でない場合に とは書けません。
同じ値を含む列や、並びが等確率でない入力にも を使ってしまう誤り。例えば値が等しい組は転倒にならないので、その確率は より小さくなります。 が使えるのは、相異なる値の 通りの並びが等確率のときに限ります。
この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。
互いに異なる 個の実数を並べた配列 を、次のバブルソートで昇順に並べかえる。
の順に、 の順で と を比べ、 ならば と を交換する。
最初の並びは、 個の数の 通りの並べ方のどれもが同様に確からしいとする。このソートで行われる交換の回数の期待値を求めよ。
を 列に並べた配列 がある。並び方は 通りのどれも同様に確からしいとする。この配列を、次のバブルソートで昇順に並べかえる。
の順に、各 について の順に次の操作を行う: ならば と を入れかえ(交換し)、そうでなければ何もしない。
このバブルソートで行われる交換の回数の期待値を求めよ。
互いに異なる 個の実数を並べた配列 を、次のバブルソートで昇順に並べかえる。
の順に、各 について の順に次の操作を行う: ならば と を交換する。
入力の並びは 通りの並べ方が同様に確からしいとする。このとき、ソートが終わるまでに行われる交換の回数の期待値を求めよ。
互いに異なる 個の数を並べた配列 を、次の挿入ソートで昇順に並べかえる。
の順に、次の操作を行う。 とし、 から始めて、 である間「 と を比較し、 ならば を に移して を 減らす。 ならばそこで止める」をくり返す。止まったとき(または になったとき)、 とする。
ここで、数どうしの比較( と の比較)だけを数え、 かどうかの判定は数えない。最初の配列が 個の数の 通りの並べ方のどれであるかが同様に確からしいとき、比較回数の期待値を求めよ。
互いに異なる 個の実数を並べた配列を、次のマージソートで昇順に並べかえる。
入力の 個の数の並び方は 通りすべてが等確率で現れるとする。このマージソート全体で行われる要素どうしの比較回数の期待値を求めよ。
互いに異なる 個の数を並べた配列を、次のマージソートで昇順に並べかえる。
入力の 個の数の並び方は 通りすべてが等確率で現れるものとする。このとき、ソート全体で行われる数どうしの比較回数の期待値を求めよ。