バケット数 のチェイン法ハッシュ表に、互いに異なる 個のキーを挿入する。各キーのハッシュ値は 個のバケットのどれかに等確率 で定まり、キーどうしのハッシュ値は互いに独立であるとする。 個のキーから選んだ 個のキーの組(順序は考えない)のうち、 個が同じバケットに入る組を「衝突する組」と呼ぶ。衝突する組の個数の期待値を求めよ。
ハッシュの衝突の期待値
一様ハッシュのチェイン法で、衝突する組の個数・キーを 2 個以上含むバケットの個数・最初の衝突までの挿入回数 などの期待値を求められる
前提
- 指示変数と期待値の線形性 (大学数学 アルゴリズムと計算量)
- 条件付き確率と乗法定理 (数学A 場合の数と確率)
- 独立な試行と反復試行 (数学A 場合の数と確率)
- ハッシュの衝突確率(誕生日問題) (大学数学 暗号理論)
この技能までの道筋(70 技能)
読み込み中…
右端(太枠)がこの技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
一覧で見る(前提が先)
- 樹形図で数え上げる (算数 場合の数)
- 積の法則と和の法則 (算数 場合の数)
- 和の法則・積の法則と樹形図 (数学A 場合の数と確率)
- 順列・円順列・重複順列 (数学A 場合の数と確率)
- 組合せ (数学A 場合の数と確率)
- 確率の定義と和事象・余事象 (数学A 場合の数と確率)
- 期待値 (数学A 場合の数と確率)
- 確率変数と確率分布 (数学B 統計的な推測)
- 平均と合計 (算数 いろいろな文章題)
- 平均値・中央値・最頻値 (中学数学 データの活用)
- 代表値(平均値・中央値・最頻値) (数学I データの分析)
- 分散と標準偏差 (数学I データの分析)
- 変量の変換と平均・分散 (数学I データの分析)
- 確率変数の期待値・分散と (数学B 統計的な推測)
- 確率変数の和と積(独立な場合) (数学B 統計的な推測)
- 指示変数と期待値の線形性 (大学数学 アルゴリズムと計算量)
- 条件付き確率と乗法定理 (数学A 場合の数と確率)
- 独立な試行と反復試行 (数学A 場合の数と確率)
- 分数のたし算・ひき算 (算数 計算と数のきまり)
- 小数の四則計算 (算数 計算と数のきまり)
- 正負の数の加法・減法 (中学数学 数と式)
- 分数のかけ算・わり算 (算数 計算と数のきまり)
- 四則の混じった計算の順序 (算数 計算と数のきまり)
- 正負の数の乗除・累乗と四則混合 (中学数学 数と式)
- 分配法則を使った計算のくふう (算数 計算と数のきまり)
- 文字式の計算(同類項・分配法則) (中学数学 数と式)
- 乗法公式による展開 (中学数学 数と式)
- 因数分解 (中学数学 数と式)
- 3 次式までの展開と因数分解 (数学I 数と式)
- 微分係数と導関数の定義 (数学II 微分法と積分法)
- 多項式の微分 (数学II 微分法と積分法)
- 小数と分数のまじった計算 (算数 計算と数のきまり)
- 逆算(□ を求める) (算数 計算と数のきまり)
- 1 次方程式の解き方 (中学数学 方程式)
- 比例・反比例の式とグラフ (中学数学 関数)
- 約数の見つけ方 (算数 整数の性質)
- 素因数分解と約数の個数 (算数 整数の性質)
- 平方根の意味と根号の簡単化 (中学数学 数と式)
- 関数 の式と変域 (中学数学 関数)
- 平方完成と 2 次関数のグラフ (数学I 2次関数)
- 2 次不等式 (数学I 2次関数)
- 剰余の定理・因数定理と高次方程式 (数学II 複素数と方程式)
- 増減表と極値 (数学II 微分法と積分法)
- 等間隔にならんだ数の和 (算数 計算と数のきまり)
- 等差・等比数列の和と Σ (数学B 数列)
- 数列の極限 (数学III 極限)
- 関数の極限 (数学III 極限)
- 関数の連続性と中間値の定理 (数学III 極限)
- 平均値の定理 (数学III 微分法)
- 積と商の微分 (数学III 微分法)
- 第 2 次導関数とグラフの凹凸 (数学III 微分法)
- 合成関数の微分 (数学III 微分法)
- 円の周の長さと面積 (算数 平面図形)
- おうぎ形の弧の長さと面積 (算数 平面図形)
- 弧の長さからおうぎ形の中心角と面積を求める (中学数学 平面図形)
- 三角形・四角形の面積 (算数 平面図形)
- 三平方の定理 (中学数学 相似と三平方の定理)
- 特別な直角三角形の辺の比 (中学数学 相似と三平方の定理)
- 弧度法と単位円による三角関数 (数学II 三角関数)
- の極限 (数学III 極限)
- 加法定理と 2 倍角・半角・積和の公式 (数学II 三角関数)
- 三角関数の導関数 (数学III 微分法)
- 根号の乗除と加減 (中学数学 数と式)
- 指数の拡張と指数関数 (数学II 指数関数と対数関数)
- 対数の定義と性質 (数学II 指数関数と対数関数)
- 自然対数の底 (数学III 極限)
- 指数関数・対数関数の導関数 (数学III 微分法)
- 増減・凹凸・漸近線とグラフ (数学III 微分法)
- テイラー展開 (大学数学 微分積分)
- ハッシュの衝突確率(誕生日問題) (大学数学 暗号理論)
説明
チェイン法のハッシュ表では、各バケットがキーのリストを持ちます。同じバケットに入ったキーどうしは「衝突」したことになり、リストが長くなるほど探索に時間がかかります。この技能では、 個のキーを 個のバケットに一様に入れたときの「衝突する組の個数」「キーを 2 個以上含むバケットの個数」「最初の衝突が起こるまでの挿入回数」の期待値を、指示変数と期待値の線形性を使って求めます。表の大きさ をどう決めるかなど、ハッシュ表の性能を見積もる場面で使います。
なぜそうしてよいのか
一様ハッシュのモデルでは、各キーは 個のバケットのどれかに確率 ずつで入り、キーごとの行き先は互いに独立だとします。数えたい量を「小さな事象が起きたら 1、起きなければ 0」という指示変数の和に分けます。期待値の線形性は独立性を必要としないので、各事象の確率を足すだけで期待値が求まります。たとえば相異なるキー の組ごとに「同じバケットに入る」という事象を考えます。 の行き先が の行き先と一致する確率は です。組は 個あるので、衝突する組の個数の期待値は です。バケット ごとに「キーを 2 個以上含む」という事象を考えると、反復試行の確率から が得られます。これを 倍したものが、キーを 2 個以上含むバケットの個数の期待値です。
最初の衝突までの挿入回数 は、「何番目に入れたキーが、すでにキーのあるバケットに初めて入ったか」を表します。 は正の整数値をとり、鳩の巣原理から です。正の整数 は、 のうち をみたすもの( の 個)を数えた値に等しくなります。つまり と指示変数の和で書けます。線形性から です。
事象「」は「最初の 個のキーがすべて異なるバケットに入る」ことと同じです。乗法定理で順に掛ければ となり、これは誕生日問題の「すべて異なる確率」そのものです。 では 、 では になります。
手順
モデルを確認する:キー 個、バケット 個で、各キーは独立に確率 ずつで各バケットに入る。
数えたい量を指示変数の和に分ける。衝突する組なら組 ごと、2 個以上含むバケットならバケットごとに指示変数を置く。最初の衝突時刻なら と書く。
各事象の確率を求める。組が衝突する確率は 、バケットが 2 個以上含む確率は 、 である()。
期待値の線形性で確率を足し合わせる。たとえば と計算する( の項は )。
例題
バケットが 個のチェイン法のハッシュ表に、キーを 1 個ずつ挿入する。各キーは独立に確率 ずつでどれかのバケットに入るとする。すでにキーのあるバケットに初めてキーが入ったときの挿入回数(何個目のキーか)を とする。 を求めよ。
例題の解答
手順 1:キーは独立に確率 ずつで各バケットに入る。バケットは 4 個なので、鳩の巣原理より である。
手順 2: は正の整数なので と書ける。よって である。
手順 3: は「最初の 個がすべて異なるバケットに入る」ことである。乗法定理より、各項は次のとおり。
-
-
-
-
-
- では
手順 4:足し合わせる。
(検算)分布を直接求めると次のとおり。
-
-
-
-
よって となり、一致する。
答え:
よくある誤り
と を混同して、 のように項を 1 つ落とす誤り。上の例では が 小さい になってしまう。正しくは で、 の項 も含める。
「バケットがキーを 2 個以上含む確率」を としてしまう誤り。これは「1 個以上含む」確率である。正しくは、ちょうど 1 個の場合も引いて とする。
衝突する組の個数と、衝突に関わるキーの個数を混同する誤り。3 個のキーが同じバケットに入ると、衝突する組は 組ある。組の個数の期待値は で、 ではない。
各バケットの指示変数が独立でないので、線形性が使えないと考えてしまう誤り。期待値の線形性は独立性を必要としないので、 はそのまま成り立つ。
この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。
入口の問題
バケット数 のチェイン法ハッシュ表が最初は空である。この表に、互いに異なる 個のキーを挿入する。各キーのハッシュ値は 個のバケットのどれかに等確率 で定まり、キーどうしのハッシュ値は互いに独立であるとする。 個のキーをすべて挿入し終えたとき、キーを 個以上含むバケットの個数の期待値を求めよ。
スロット番号が の 個のスロットからなるハッシュ表を、オープンアドレス法(線形探査)で使う。はじめはすべてのスロットが空である。0 以上の整数のキー を挿入するときは、 の順にスロット
を調べ、最初に見つかった空のスロットに を格納する。1 回の挿入で調べたスロットの個数(格納先の空のスロットも含める)を、その挿入の「探査回数」と呼ぶ。キー
をこの順に挿入するとき、 回の挿入の探査回数の合計を求めよ。
この技能を使う問題
バケット数 のチェイン法ハッシュ表に、互いに異なる 個のキーを挿入する。各キーのハッシュ値は 個のバケットのどれかに等確率 で定まり、キーどうしのハッシュ値は互いに独立であるとする。 個すべてを挿入し終えたとき、キーを 個以上含むバケットの個数の期待値を求めよ。
番号 の 個のスロットからなるハッシュ表が最初は空である。この表に、互いに異なる 個のキーを 個ずつ順に、次の線形探査法(オープンアドレス法)で挿入する。
- キーのハッシュ値を とし、スロット の順に(番号は を法として考え、スロット の次はスロット とする)調べ、最初に見つかった空のスロットにそのキーを入れる。
- 個のスロットを調べることを探査 回と数える。キーを入れた空のスロットを調べることも 回に数える(たとえば、スロット が空ならば探査は 回)。
各キーのハッシュ値は のどれかに等確率 で定まり、キーどうしのハッシュ値は互いに独立であるとする。 個のキーを挿入し終えるまでの探査回数の合計の期待値を求めよ。
番号 の 個のセルからなる、線形探査法(オープンアドレス法)のハッシュ表がある。最初はすべてのセルが空である。この表に、互いに異なる 個のキーを 個ずつ順に挿入する(削除は行わない)。
キー を挿入するときは、ハッシュ値 から始めて、セル (番号は を法として考え、セル の次はセル とする)の順に調べ、最初に見つかった空のセルにキーを格納する。調べたセルの個数(キーを格納した空のセルも 個と数える)を、その挿入の探査回数とよぶ。
各キーのハッシュ値は のどれかに等確率 で定まり、キーどうしのハッシュ値は互いに独立であるとする。 個のキーの挿入における探査回数の合計の期待値を求めよ。
バケット数 のチェイン法ハッシュ表が最初は空である。互いに異なるキーを 個ずつ順に挿入していき、すでに 個以上のキーが入っているバケットにキーが挿入された時点(最初の衝突が起きた時点)で挿入をやめる。各キーのハッシュ値は 個のバケットのそれぞれに確率 で、ほかのキーとは独立に定まるものとする。挿入をやめるまでに挿入したキーの個数を とする(衝突を起こしたキーも数える)。 の期待値 を求めよ。
を素数、 を正の整数とし、 を を法とする剰余体とする。キーの集合を とし、 に対してハッシュ関数 を
で定める。ただし である。個の相異なるキーからなる集合 を固定し、 を の 個の元から一様ランダムに選ぶ。各 について、バケット に入るキーの個数を
とおく。このとき
が成り立つことを証明せよ。