アルゴリズムと計算量の問題
番号 の 個のセルからなる、線形探査法(オープンアドレス法)のハッシュ表がある。最初はすべてのセルが空である。この表に、互いに異なる 個のキーを 個ずつ順に挿入する(削除は行わない)。
キー を挿入するときは、ハッシュ値 から始めて、セル (番号は を法として考え、セル の次はセル とする)の順に調べ、最初に見つかった空のセルにキーを格納する。調べたセルの個数(キーを格納した空のセルも 個と数える)を、その挿入の探査回数とよぶ。
各キーのハッシュ値は のどれかに等確率 で定まり、キーどうしのハッシュ値は互いに独立であるとする。 個のキーの挿入における探査回数の合計の期待値を求めよ。
この問題で使うもの
- ハッシュの衝突の期待値(説明と入口の問題)
- 組合せ(説明と入口の問題)
- 期待値(説明と入口の問題)
この問題を解けるようになるまで(71 技能)
読み込み中…
右端(太枠)がこの問題で使う技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
一覧で見る(前提が先)
- 樹形図で数え上げる
- 積の法則と和の法則
- 和の法則・積の法則と樹形図
- 順列・円順列・重複順列
- 組合せ
- 確率の定義と和事象・余事象
- 期待値
- 確率変数と確率分布
- 平均と合計
- 平均値・中央値・最頻値
- 代表値(平均値・中央値・最頻値)
- 分散と標準偏差
- 変量の変換と平均・分散
- 確率変数の期待値・分散と
- 確率変数の和と積(独立な場合)
- 指示変数と期待値の線形性
- 条件付き確率と乗法定理
- 独立な試行と反復試行
- 分数のたし算・ひき算
- 小数の四則計算
- 正負の数の加法・減法
- 分数のかけ算・わり算
- 四則の混じった計算の順序
- 正負の数の乗除・累乗と四則混合
- 分配法則を使った計算のくふう
- 文字式の計算(同類項・分配法則)
- 乗法公式による展開
- 因数分解
- 3 次式までの展開と因数分解
- 微分係数と導関数の定義
- 多項式の微分
- 小数と分数のまじった計算
- 逆算(□ を求める)
- 1 次方程式の解き方
- 比例・反比例の式とグラフ
- 約数の見つけ方
- 素因数分解と約数の個数
- 平方根の意味と根号の簡単化
- 関数 の式と変域
- 平方完成と 2 次関数のグラフ
- 2 次不等式
- 剰余の定理・因数定理と高次方程式
- 増減表と極値
- 等間隔にならんだ数の和
- 等差・等比数列の和と Σ
- 数列の極限
- 関数の極限
- 関数の連続性と中間値の定理
- 平均値の定理
- 積と商の微分
- 第 2 次導関数とグラフの凹凸
- 合成関数の微分
- 円の周の長さと面積
- おうぎ形の弧の長さと面積
- 弧の長さからおうぎ形の中心角と面積を求める
- 三角形・四角形の面積
- 三平方の定理
- 特別な直角三角形の辺の比
- 弧度法と単位円による三角関数
- の極限
- 加法定理と 2 倍角・半角・積和の公式
- 三角関数の導関数
- 根号の乗除と加減
- 指数の拡張と指数関数
- 対数の定義と性質
- 自然対数の底
- 指数関数・対数関数の導関数
- 増減・凹凸・漸近線とグラフ
- テイラー展開
- ハッシュの衝突確率(誕生日問題)
- ハッシュの衝突の期待値
ヒント
行き詰まったら、上から順に 1 つずつ開いてください。
ヒント 1
期待値の線形性を使い、 番目の挿入の探査回数の期待値を ごとに求めて足す。各挿入の期待値は、その直前の表の「埋まったセルの連続部分(ブロック)」の長さの組だけで決まる。
ヒント 2
長さ のブロックの中にハッシュ値が落ちたときの探査回数の和は なので、探査回数の期待値は と書ける。
ヒント 3
個目をセル に固定すると、2 個挿入後は「隣接」が確率 、それ以外が で、。3 個挿入後のブロック構成 の確率を場合分けで求める。
答えと解説
答えを見る
どこでつまずきましたか?(選ぶと、戻る場所を案内します)
解説を読む
期待値の線形性より、 番目()の挿入の探査回数の期待値 を求めて足せばよい。
ブロックによる表し方. ある時点で、埋まっているセルが連続して並ぶ極大な部分(環状に考える)をブロックとよぶ。挿入するキーのハッシュ値が長さ のブロックの先頭から 番目()のセルなら、そのブロックの残り 個の埋まったセルと、その直後の空のセル 個を調べるので、探査回数は である。ハッシュ値が空のセルなら探査回数は である。ハッシュ値は 個のセルに等確率なので、埋まったセルが 個以下(つねに空のセルがある)のとき
となる。
. 表は空なので 。
. ブロックは長さ が 個なので 。
2 個挿入後の状態. 回転対称性より、 個目のキーはセル に入ったとしてよい。 個目のハッシュ値 によって
- のとき占有 、 のとき :隣接(確率 )
- :間が つ空いた セル(確率 )
- :向かい合う セル(確率 )
. 隣接ならブロック で 、それ以外はブロック で 。よって
3 個挿入後の状態. 占有セルを (隣接)とすると、 のときキーはセル に、 のときセル に入り、長さ のブロックになる( 通り)。 のときはブロック ( 通り)。
占有セルを とすると、 でブロック ( 通り)、 でブロック ( 通り)、 でブロック ( 通り)。
占有セルを とすると、どの でもブロック になる。
したがって
(和は になる。)
. はブロック で 、 で 、 で なので
合計.
別解
線形探査法では、 個のキーを挿入した直後の占有セルは、空きセルの直後から始まる連続した占有セルの塊(巡回的に数える)に分かれる。長さ の塊に対し、ハッシュ値がその塊の先頭から 番目()のセルなら、探査回数は である。ハッシュ値が空きセルなら探査回数は である。したがって次の挿入の探査回数の期待値は
となる。
個挿入後の塊の分布を求める。長さ の塊が複数あるとき、その占有パターンになるハッシュ列の数は である。各塊の中は駐車関数の個数 で数え、キーをどの塊に振り分けるかを多項係数で数える。
の期待値を とおく。
- : 。
- : なので 。
- : 隣接する 2 セルは 6 通りで、重みは各 、。隣接しない 2 セルは 9 通りで、重みは各 、。総重み 。よって 。
- : 長さ 3 の塊は 6 通りで、重みは各 、。長さ 2 と長さ 1 の塊は 12 通りで、重みは各 、。長さ 1 の塊が 3 つ並ぶ配置は 2 通りで、重みは各 、。総重み 。よって 。
。
期待値の合計は
検算として、各 の総重みが に一致することを確認した( で 、 で )。