応用情報技術者 2014年 春期 午前2 問06
問題文
従業員番号と氏名の対が件格納されている表に線形探索法を用いて、与えられた従業員番号から氏名を検索する。この処理における平均比較回数を求める式はどれか。ここで検索する従業員番号はランダムに出現し、探索は常に表の先頭から行う。また、与えられた従業員番号がこの表に存在しない確率をaとする。
選択肢
ア:
イ:
ウ:
エ:(正解)
🔒 解説は解答すると表示されます
線形探索の平均比較回数【午前2解説】
正解の理由
与えられた従業員番号が表に存在する確率を 、存在しない確率を とすると、探索開始は常に先頭から行うため、成功時の比較回数の期待値は位置の期待値に等しく になります。失敗時は表の全 件と一致しないことを確かめるために 回のキー比較が必要です。よって平均比較回数は
となり、選択肢 エ がこれに対応するため正解です。
(注)ここでの「比較回数」は「与えられた従業員番号と表中の各エントリのキーを照合する回数」を指します。
解法ステップ
-
成功時の扱い
- 「表に存在する」場合、目標は位置 1 から n のどこかに一様に現れると仮定する。位置 k にあるとき比較回数は k。
- 位置 k の平均は 。
- 成功確率は なので成功時の期待値の寄与は 。
-
失敗時の扱い
- 「表に存在しない」場合は表の先頭から最後まで各キーを比較して全部不一致を確かめる必要がある。比較回数は 。失敗確率は なので寄与は 。
-
全体の期待値
- 上の2つを足し合わせて
-
これが選択肢の エ に一致するため正解とする。
選択肢別の誤答解説
-
ア:
成功時の期待値を とした上で、失敗時の寄与を としているが、失敗時の比較回数は (全件比較)であり ではないため誤りです。代数的に比べるとアは真値より 多く見積もられます。 -
イ:
これは成功時の寄与のみを取り、失敗時(確率 )のコストを無視しています。失敗時の比較回数 を加える必要があります。 -
ウ:
失敗時コストを平均 と誤っている形です。失敗時は最後まで確認するため比較回数は であり、ここでも過小評価になっています。 -
エ:
成功時・失敗時それぞれ正しい期待値を用いており、正解です。
よくある誤解
- 失敗時の平均比較回数を「表の中央まで調べる 平均 」と誤る。先頭から最後まで順に調べる場合、失敗時は必ず全 件と比較するので比較回数は です。
- センチネル(番兵)を使うと比較回数が変わらないと単純に言い切る誤り。センチネルは境界チェック(配列終端判定)を省く実装上の最適化ですが、比較の定義次第では不成功時のキー一致比較回数が から になるなど変化する場合があります。ここでは「キーと各エントリを一致判定する比較回数」を比較回数として扱っているので、標準実装では失敗時は 回です。
- 探索対象が均一分布でない(位置に偏りがある)場合に上式が成り立たない点を見落とす。位置分布の仮定は期待値計算の前提です。
補足コラム
- 特殊ケースの確認
- (必ず表にある)なら (成功のみ)。
- (必ず表にない)なら (失敗のみ)。
- 計算上の複雑度は期待比較回数のオーダで表すと平均 (定数係数は上の式で与えられる)。最悪ケース(失敗または最後にある)は 比較で 。
FAQ
-
Q: センチネルを入れると平均比較回数はどうなる?
A: 実装によって違います。境界チェックが減りループが単純になるため実行時間は改善することが多いですが、「キーとテーブル内エントリの一致を調べる回数」という定義の比較回数は、成功時は同じ 、失敗時は実装次第で または など変わることがあります。問題文での比較回数定義を確認してください。 -
Q: 位置分布が一様でない場合は?
A: 成功時の期待比較回数は位置確率分布の重み付き平均になります。一般には ( は位置 k の出現確率)。
関連キーワード: 線形探索、順次探索、平均比較回数、期待値、失敗確率、センチネル、探索アルゴリズム、確率解析

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

