アルゴリズムと計算量の問題
スロット番号が の 個のスロットからなるハッシュ表を、オープンアドレス法(線形探査)で使う。はじめはすべてのスロットが空である。0 以上の整数のキー を挿入するときは、 の順にスロット
を調べ、最初に見つかった空のスロットに を格納する。1 回の挿入で調べたスロットの個数(格納先の空のスロットも含める)を、その挿入の「探査回数」と呼ぶ。
キー
をこの順に挿入するとき、 回の挿入の探査回数の合計を求めよ。
この問題で使うもの
- ハッシュの衝突の期待値(説明と入口の問題)
この問題を解けるようになるまで(71 技能)
読み込み中…
右端(太枠)がこの問題で使う技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
一覧で見る(前提が先)
- 樹形図で数え上げる
- 積の法則と和の法則
- 和の法則・積の法則と樹形図
- 順列・円順列・重複順列
- 組合せ
- 確率の定義と和事象・余事象
- 期待値
- 確率変数と確率分布
- 平均と合計
- 平均値・中央値・最頻値
- 代表値(平均値・中央値・最頻値)
- 分散と標準偏差
- 変量の変換と平均・分散
- 確率変数の期待値・分散と
- 確率変数の和と積(独立な場合)
- 指示変数と期待値の線形性
- 条件付き確率と乗法定理
- 独立な試行と反復試行
- 分数のたし算・ひき算
- 小数の四則計算
- 正負の数の加法・減法
- 分数のかけ算・わり算
- 四則の混じった計算の順序
- 正負の数の乗除・累乗と四則混合
- 分配法則を使った計算のくふう
- 文字式の計算(同類項・分配法則)
- 乗法公式による展開
- 因数分解
- 3 次式までの展開と因数分解
- 微分係数と導関数の定義
- 多項式の微分
- 小数と分数のまじった計算
- 逆算(□ を求める)
- 1 次方程式の解き方
- 比例・反比例の式とグラフ
- 約数の見つけ方
- 素因数分解と約数の個数
- 平方根の意味と根号の簡単化
- 関数 の式と変域
- 平方完成と 2 次関数のグラフ
- 2 次不等式
- 剰余の定理・因数定理と高次方程式
- 増減表と極値
- 等間隔にならんだ数の和
- 等差・等比数列の和と Σ
- 数列の極限
- 関数の極限
- 関数の連続性と中間値の定理
- 平均値の定理
- 積と商の微分
- 第 2 次導関数とグラフの凹凸
- 合成関数の微分
- 円の周の長さと面積
- おうぎ形の弧の長さと面積
- 弧の長さからおうぎ形の中心角と面積を求める
- 三角形・四角形の面積
- 三平方の定理
- 特別な直角三角形の辺の比
- 弧度法と単位円による三角関数
- の極限
- 加法定理と 2 倍角・半角・積和の公式
- 三角関数の導関数
- 根号の乗除と加減
- 指数の拡張と指数関数
- 対数の定義と性質
- 自然対数の底
- 指数関数・対数関数の導関数
- 増減・凹凸・漸近線とグラフ
- テイラー展開
- ハッシュの衝突確率(誕生日問題)
- ハッシュの衝突の期待値
ヒント
行き詰まったら、上から順に 1 つずつ開いてください。
ヒント 1
キーを与えられた順に 1 つずつ挿入し、どのスロットが埋まっているかを毎回書き出していきましょう。最初に調べるスロットは です。
ヒント 2
埋まっていたら次のスロット(番号 )を調べます。スロット の次はスロット に戻ることに注意します。
ヒント 3
の探査回数は順に で、この時点でスロット が埋まっています。残りの を続けて調べましょう。
答えと解説
答えを見る
どこでつまずきましたか?(選ぶと、戻る場所を案内します)
解説を読む
方針:キーを 1 つずつ挿入し、そのたびに埋まっているスロットを記録する。
まず各キーの (最初に調べるスロット)を求めます。
線形探査では、スロットが埋まっていれば番号を ずつ増やして次を調べ、 の次は に戻ります。
- :スロット は空 → 格納。探査回数 。埋まっているスロット
- :スロット は空 → 格納。探査回数 。
- :(埋)→ (空)に格納。探査回数 。
- :(埋)→ (埋)→ (空)に格納。探査回数 。
- :スロット は空 → 格納。探査回数 。
- :(埋)→ (空)に格納。探査回数 。
- :(埋)→ (埋、 の次は に戻る)→ (空)に格納。探査回数 。
- :(埋)→ (空)に格納。探査回数 。
よって探査回数の合計は
(線形探査では、埋まったスロットが連続した塊(クラスタ)になり、その塊にハッシュされたキーほど探査回数が増えます。この例でもスロット から始まる塊が伸びるにつれて探査回数が大きくなっています。)
別解
各キーのハッシュ値 を求め、順に挿入する。
- 22: 22 mod 11 = 0。スロット0は空 → 格納。探査1回。
- 5: 5。スロット5は空 → 探査1回。
- 16: 16 mod 11 = 5。スロット5は使用中、スロット6は空 → 探査2回。
- 27: 27 mod 11 = 5。スロット5、6は使用中、スロット7は空 → 探査3回。
- 10: 10。スロット10は空 → 探査1回。
- 38: 38 mod 11 = 5。スロット5、6、7は使用中、スロット8は空 → 探査4回。
- 21: 21 mod 11 = 10。スロット10は使用中、スロット0も使用中、スロット1は空 → 探査3回。
- 6: 6。スロット6、7、8は使用中、スロット9は空 → 探査4回。
合計は 1+1+2+3+1+4+3+4 = 19。
確認: 最終的な表は 0:22, 1:21, 5:5, 6:16, 7:27, 8:38, 9:6, 10:10 である。各キーについて、ハッシュ値から格納先までの距離+1が探査回数になる。22:1、5:1、16:2、27:3、10:1、38:4、21:(1-10) mod 11 + 1 = 3、6:(9-6)+1 = 4。合計19で一致する。