を 列に並べる 通りの並べ方から つを等確率で選び、それを配列 とする。 を満たす整数の組 で となるものを「転倒」とよぶ(転倒の個数は、挿入ソートで隣り合う要素を交換する回数に等しいことが知られている)。配列 に含まれる転倒の個数を とするとき、期待値 を求めよ。
指示変数と期待値の線形性
数えたい量を事象の指示変数の和 に分け、 として期待値を求められる(独立でなくても使えることがわかる)
前提
- 確率変数の和と積(独立な場合) (数学B 統計的な推測)
この技能までの道筋(15 技能)
読み込み中…
右端(太枠)がこの技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
一覧で見る(前提が先)
- 樹形図で数え上げる (算数 場合の数)
- 積の法則と和の法則 (算数 場合の数)
- 和の法則・積の法則と樹形図 (数学A 場合の数と確率)
- 順列・円順列・重複順列 (数学A 場合の数と確率)
- 組合せ (数学A 場合の数と確率)
- 確率の定義と和事象・余事象 (数学A 場合の数と確率)
- 期待値 (数学A 場合の数と確率)
- 確率変数と確率分布 (数学B 統計的な推測)
- 平均と合計 (算数 いろいろな文章題)
- 平均値・中央値・最頻値 (中学数学 データの活用)
- 代表値(平均値・中央値・最頻値) (数学I データの分析)
- 分散と標準偏差 (数学I データの分析)
- 変量の変換と平均・分散 (数学I データの分析)
- 確率変数の期待値・分散と (数学B 統計的な推測)
- 確率変数の和と積(独立な場合) (数学B 統計的な推測)
説明
「条件を満たすものが何個あるか」という個数の確率変数 について、その分布を求めずに期待値 を計算する方法です。数えたい対象を 1 つずつに分け、それぞれが条件を満たせば 1、満たさなければ 0 をとる確率変数(指示変数)の和として を書きます。すると は、各事象の確率を足すだけで求まります。指示変数どうしが独立でなくても使えるので、ランダムな並べ替え、くじ引き、グラフのランダムな構造など、事象が互いに絡み合う場面で特に役立ちます。
なぜそうしてよいのか
事象 に対して、 が起これば 、起こらなければ をとる確率変数を の指示変数といい、 と書きます。 がとる値は と だけなので、期待値の定義から となります。つまり、指示変数の期待値はその事象の確率そのものです。
次に、和の期待値 が独立性なしで成り立つことを確かめます。 の同時分布を とすると で、、 ですから、右辺は です。この計算のどこにも独立性は使っていません(独立性が必要なのは や のほうです)。これを繰り返せば、 個の和でも が成り立ちます。
以上を組み合わせると、数えたい個数 を ( は事象 の指示変数)と書けば となります。 の分布( となる確率)は事象どうしの重なり方が複雑で求めにくくても、1 つ 1 つの事象の確率なら簡単に求まることが多い、というのがこの方法の強みです。
手順
数えたい量 が「何の個数か」をはっきりさせ、数える候補(位置・人・ペアなど)を と番号づけて、候補の総数 を正確に数える。
各候補 について事象 (「候補 が条件を満たす」)を定め、指示変数 ( が起これば 1、起こらなければ 0)をおく。すると 。
各 について を計算する。対称性があれば、すべての で同じ値になることが多い。
期待値の線形性(独立性は不要)により を計算する。すべて等しければ 。
例題
の 10 個の数を、すべての並べ方が同様に確からしいとして無作為に 1 列に並べる。隣り合う 2 つの位置にある数の差が になっている箇所の個数を とする。 を求めよ。
例題の解答
手順1:隣り合う位置の組は (1番目,2番目), (2番目,3番目), …, (9番目,10番目) の 組ある。これに と番号をつける。
手順2: を「 番目と 番目の数の差が 」という事象とし、その指示変数を とすると 。(たとえば と は 2 番目の数を共有しているので独立ではないが、期待値の線形性には独立性は不要。)
手順3: 番目と 番目に入る数の順序つきの組は、どれも同様に確からしく 通り。差が になる組は の 種類で、それぞれ並び順が 2 通りあるから 通り。よって で、これはどの でも同じ。
手順4:
答え:
よくある誤り
指示変数どうしが独立でないから は使えない、と考えてしまう誤り。正しくは、 は独立性なしで常に成り立つので、例題のように と が依存していても としてよい。
期待値と同じ感覚で分散も と足してしまう誤り。正しくは、 は独立(より一般に共分散が 0)のときに限る。依存する指示変数の和の分散には、ペアごとの も必要になる。
候補の個数 を数え間違える誤り。例題で並ぶ数が 10 個だからと としてしまうが、正しくは隣り合う位置の組は 組なので 。
の計算で順序の扱いを混同する誤り。例題で分母を順序つきの 通りにしたのに、分子を順序なしの 通りとして としてしまう。正しくは分母と分子をそろえて (順序つき)または (順序なし)とし、どちらも 。
この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。
入口の問題
互いに異なる 個の実数を、 通りの並べ方のどれもが等確率 で起こるように並べ、配列 を作る。 を満たす整数の組 のうち、 となるものを転倒といい、転倒の個数を とする( は、この配列を挿入ソートで昇順に並べかえるときに行われる隣り合う要素の交換の回数に等しい)。 の期待値 を求めよ。
長さ のビット列 を、各ビット が互いに独立に確率 ずつで または になるようにランダムに作る。このビット列の中でパターン が現れる回数 を
と定める(重なった出現も別々に数える。たとえば の中には が 回現れる)。 の期待値 を求めよ。
この技能を使う問題
昇順に並んだ互いに異なる 個の数の配列 から、値 を次の二分探索で探す。ただし、 は のどれかと必ず等しいとする。
- はじめに , とする。
- とし、 と を比較する。この比較は 回で「」「」「」のどれであるかがわかるものとし、比較 回と数える。
- ならば探索を終える。 ならば とし、 ならば として、前の手順に戻る。
が のそれぞれと等しい確率がどれも であるとき、探索を終えるまでの比較回数の期待値を求めよ。
バケット数 のチェイン法ハッシュ表に、互いに異なる 個のキーを挿入する。各キーのハッシュ値は 個のバケットのどれかに等確率 で定まり、キーどうしのハッシュ値は互いに独立であるとする。 個すべてを挿入し終えたとき、キーを 個以上含むバケットの個数の期待値を求めよ。
互いに異なる 個の数が入った配列から、小さい方から 番目の数(中央値)を、次の乱択選択アルゴリズム(乱択クイックセレクト)で求める。
- 現在の候補の集合を とし、最初は を 個の数全体とする。また、求めたい順位を とする。
- の要素が 個だけなら、それを答えとして終了する(比較は行わない)。
- そうでなければ、 の要素から つを等確率で選んでピボット とし、 を のほかのすべての要素と 回ずつ比較して、 より小さい要素の集合 と大きい要素の集合 に分ける(このとき比較は 回行われる)。
- なら を答えとして終了する。
- なら、 を に置き換えて( はそのまま)最初の手順に戻る。
- なら、 を に、 を に置き換えて最初の手順に戻る。
ピボットの選択は毎回独立に行われるものとする。このアルゴリズムが終了するまでに行う比較の回数の期待値を求めよ。
互いに異なる 個の実数からなる集合を、次の乱択クイックソートで昇順に並べかえる。
- 大きさ 以上の集合 を処理するときは、 の要素から 個をピボット として等確率で選ぶ。 を のほかのすべての要素とそれぞれちょうど 回ずつ比較し、 を より小さい要素の集合 と より大きい要素の集合 に分ける。そのあと、 と をそれぞれ同じ方法で処理する。
- 大きさ または の集合を処理するときは、何もしない(比較を行わない)。
ピボットの選択はそれぞれ独立に行うものとする。最初の集合 個全体を処理し始めてから終わるまでに行われる比較のうち、小さい方から 番目の要素がかかわる比較の回数の期待値を求めよ。
番号 の 個のスロットからなるハッシュ表が最初は空である。この表に、互いに異なる 個のキーを 個ずつ順に、次の線形探査法(オープンアドレス法)で挿入する。
- キーのハッシュ値を とし、スロット の順に(番号は を法として考え、スロット の次はスロット とする)調べ、最初に見つかった空のスロットにそのキーを入れる。
- 個のスロットを調べることを探査 回と数える。キーを入れた空のスロットを調べることも 回に数える(たとえば、スロット が空ならば探査は 回)。
各キーのハッシュ値は のどれかに等確率 で定まり、キーどうしのハッシュ値は互いに独立であるとする。 個のキーを挿入し終えるまでの探査回数の合計の期待値を求めよ。
互いに異なる 個の実数を並べた配列 の最大値と最小値を、次のアルゴリズムで同時に求める。
- 最初に , とする。
- の順に、次の操作を行う。
- まず と を比較する。 ならば とし、この についての操作を終える( とは比較しない)。
- ならば、続けて と を比較する。 ならば とする。
配列の並び方は 通りのどれも同様に確からしいとする。このアルゴリズムで行われる要素どうしの比較( と の比較、 と の比較)の回数の期待値を求めよ。
互いに異なる 個の実数を並べた配列を、次のマージソートで昇順に並べかえる。
- 長さ の列はそのまま返す。
- 長さ の列は、前半の 個と後半の残り 個に分け、それぞれを再帰的に昇順に並べかえてから、次の手続きで併合する。
- 併合の手続き: 昇順に並んだ つの列 が与えられたとき、どちらも空でない間は、 の先頭と の先頭を 回比較し、小さい方を取り出して出力の末尾に加える。一方の列が空になったら、もう一方の列に残っている要素を、比較を行わずにそのまま順に出力の末尾に加える。
入力の 個の数の並び方は 通りすべてが等確率で現れるとする。このマージソート全体で行われる要素どうしの比較回数の期待値を求めよ。
互いに異なる 個の数を並べた配列を、次のマージソートで昇順に並べかえる。
- 長さ の配列はそのまま返す。
- 長さ ( は正の整数)の配列は、前半 個と後半 個に分け、それぞれを再帰的にこのマージソートで並べかえたあと、次の「マージ」で つの昇順の列にまとめる。
- マージ: 昇順に並んだ 2 つの列の先頭どうしを 回比較し、小さい方を取り出して出力の末尾に加える。これを一方の列が空になるまで繰り返し、空になったら、もう一方の列に残っている数を比較せずにそのまま出力の末尾に加える。
入力の 個の数の並び方は 通りすべてが等確率で現れるものとする。このとき、ソート全体で行われる数どうしの比較回数の期待値を求めよ。
互いに異なる 個の実数を並べた配列 から、最大値と最小値の両方を次のアルゴリズムで求める。
- 最初に 、 とする。
- の順に、次の操作を行う。
- まず と を比較する。 であれば とし、この についての操作を終える。
- そうでなければ、 と を比較し、 であれば とする。
個の数の並び方は 通りすべてが等確率 で起こるとする。このアルゴリズムで行われる要素どうしの比較の回数の期待値を求めよ。
を素数、 を正の整数とし、 を を法とする剰余体とする。キーの集合を とし、 に対してハッシュ関数 を
で定める。ただし である。個の相異なるキーからなる集合 を固定し、 を の 個の元から一様ランダムに選ぶ。各 について、バケット に入るキーの個数を
とおく。このとき
が成り立つことを証明せよ。
この技能の次に学べること
- ソートの平均比較回数と転倒数 (大学数学 アルゴリズムと計算量)
- ハッシュの衝突の期待値 (大学数学 アルゴリズムと計算量)
- 乱択クイックソート・乱択選択の期待比較回数 (大学数学 アルゴリズムと計算量)