基本情報技術者 2019年 春期 午前(科目A) 問18
問題文
データ検索時に使用される、理想的なハッシュ法の説明として、適切なものはどれか。
選択肢
ア:キーワード検索のヒット率を高めることを目的に作成した、一種の同義語・類義語リストを用いることによって、検索漏れを防ぐ技術である。
イ:蓄積されている膨大なデータを検索し、経営やマーケティングにとって必要な傾向、相関関係、パターンなどを導き出すための技術や手法である。
ウ:データとそれに対する処理を組み合わせたオブジェクトに、認識や判断の機能を加え、利用者の検索要求に対して、その意図を判断する高度な検索技術である。
エ:データを特定のアルゴリズムによって変換した値を格納アドレスとして用いる、高速でスケーラビリティの高いデータ検索技術である。(正解)
🔒 解説は解答すると表示されます
ハッシュ法によるデータ検索【午前解説】
正解の理由
正解: エ
エの記述は「データを特定のアルゴリズムによって変換した値(ハッシュ値)を格納アドレスとして用いる」点を的確に表しています。ハッシュ法はキーをハッシュ関数で整数に変換し、その値をインデックス(バケット)として直接アクセスすることで平均的に O(1) の高速検索を実現します。衝突(異なるキーが同じハッシュ値を持つ事象)は存在するが、チェイニングやオープンアドレッシング等の解消法で対応します。これらの特徴が、エの「高速でスケーラビリティの高いデータ検索技術」という表現と一致します。
エの記述は「データを特定のアルゴリズムによって変換した値(ハッシュ値)を格納アドレスとして用いる」点を的確に表しています。ハッシュ法はキーをハッシュ関数で整数に変換し、その値をインデックス(バケット)として直接アクセスすることで平均的に O(1) の高速検索を実現します。衝突(異なるキーが同じハッシュ値を持つ事象)は存在するが、チェイニングやオープンアドレッシング等の解消法で対応します。これらの特徴が、エの「高速でスケーラビリティの高いデータ検索技術」という表現と一致します。
解法ステップ
- 問題文のキーワード「ハッシュ法」「格納アドレス」「高速」「スケーラビリティ」を確認する。
- 各選択肢の要旨を定義と照合する(同義語リスト=シソーラス、膨大データ分析=データマイニング、意味理解=セマンティック検索)。
- 「格納アドレスとして用いる」という記述と一致する選択肢を選ぶ(ハッシュは値をアドレス化する)。
- 衝突や範囲検索の扱いを考え、該当するのがエであることを確かめる。
選択肢別の誤答解説
- ア: キーワード検索のヒット率を高める同義語・類義語リストを使う技術は「シソーラスやクエリ拡張」に該当し、ハッシュ法ではありません。
- イ: 膨大なデータから傾向や相関を導く技術は「データマイニング/機械学習」の説明であり、ハッシュ法の説明ではありません。
- ウ: データと処理に認識・判断機能を加えることは「知的検索/意味検索やエージェント的検索」の分野で、ハッシュ法の定義とは異なります。
- エ: データを特定のアルゴリズムによって変換した値を格納アドレスとして用いる、高速でスケーラビリティの高いデータ検索技術である。 → ハッシュ法(ハッシュテーブル/散列表)の正しい説明です。
よくある誤解
- ハッシュ法は同義語や類義語検索を補助する技術だと勘違いする。これは検索語拡張(スロット)やシソーラスの役割です。
- ハッシュで範囲検索(範囲指定によるソートや区間検索)が得意だと考える。実際はハッシュは等価比較に強く、範囲検索はB木などが適します。
- ハッシュ関数が衝突を完全に防ぐと誤解する。理想的な関数でも衝突の可能性はあり、衝突解消が必要です。
補足コラム
- ハッシュ関数の代表的手法には「除算法」「乗法法」「ミキシング」「ユニバーサルハッシュ」があります。分布の均一性と計算速度が評価ポイントです。
- 衝突解消法は主に「チェイニング(連鎖法)」と「オープンアドレッシング(線形探索、二次探索、再ハッシュ)」があります。用途に応じて使い分けます。
- 分散システムでは「一貫性ハッシュ(consistent hashing)」が用いられ、ノードの増減に対する影響を最小化します。
- ハッシュ索引は等価検索に非常に有効ですが、範囲検索や順序付けを要する場合はB木系インデックスを使います。試験では「等価比較=ハッシュ、範囲比較=B木」と押さえておくと良いでしょう。
FAQ
Q1: ハッシュ法は常に検索が O(1) ですか?
A1: 平均的には O(1) ですが、最悪ケースは衝突が集中すると O(n) になります。良いハッシュ関数と衝突解消で平均性能を保ちます。
A1: 平均的には O(1) ですが、最悪ケースは衝突が集中すると O(n) になります。良いハッシュ関数と衝突解消で平均性能を保ちます。
Q2: ハッシュ法で範囲検索は可能ですか?
A2: 基本的に苦手です。範囲検索や順序付けが必要ならB木(B+木)などのインデックスが適しています。
A2: 基本的に苦手です。範囲検索や順序付けが必要ならB木(B+木)などのインデックスが適しています。
Q3: ハッシュ関数と暗号ハッシュの違いは何ですか?
A3: 両者は散列を作る点で共通しますが、暗号ハッシュは衝突耐性や不可逆性、出力の予測困難性を重視します。通常のハッシュ関数は速度と均一分布を重視します。
A3: 両者は散列を作る点で共通しますが、暗号ハッシュは衝突耐性や不可逆性、出力の予測困難性を重視します。通常のハッシュ関数は速度と均一分布を重視します。
Q4: 分散環境でのハッシュはどう使う?
A4: 一貫性ハッシュを使うとノード追加・削除時の再配置コストを抑えられ、キャッシュや分散キー値ストアで有効です。
A4: 一貫性ハッシュを使うとノード追加・削除時の再配置コストを抑えられ、キャッシュや分散キー値ストアで有効です。
関連キーワード: ハッシュ法、ハッシュ関数、ハッシュテーブル、散列、衝突解消、チェイニング、オープンアドレッシング、等価検索、範囲検索、一貫性ハッシュ、ハッシュ索引、負荷分散、再ハッシュ、均一分布、O(1)検索

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

