データ構造とアルゴリズム

ハッシュテーブルの衝突を処理する方法として、チェイン法(同じ位置の要素を連結リストでつなぐ)とオープンアドレス法(表の中の空いている別の位置を探す)を比べた説明として正しいものはどれか。負荷率は、格納した要素数を表の大きさで割った値とする。

  1. Aチェイン法では負荷率が1を超えても格納できるが、オープンアドレス法では表の大きさを超えて格納できず、負荷率が1に近づくと探索の回数が急に増える
  2. Bオープンアドレス法では衝突が起こらないので、負荷率によらず探索は1回で済む
  3. Cチェイン法では、負荷率がいくら高くなっても探索の手間は変わらない
答えと解説を見る

正解:A. チェイン法では負荷率が1を超えても格納できるが、オープンアドレス法では表の大きさを超えて格納できず、負荷率が1に近づくと探索の回数が急に増える

チェイン法は同じ位置の要素をリストにつなぐので、要素数が表の大きさを超えても格納できますが、平均のリストの長さは負荷率に比例して伸び、探索の手間も増えます。オープンアドレス法は表の中だけに格納するので要素数は表の大きさまでで、負荷率が1に近づくと空きを探す回数が急に増えます。どちらの方法でも、負荷率が決めた値(例えば0.5〜0.75程度)を超えたら表を大きくして全要素を入れ直す(リハッシュ)のが普通です。オープンアドレス法でも衝突は起こり、空いた位置を探すことで対処しています。

  • A. 正しい。格納できる数と、負荷率が高いときの探索の増え方の違いを正しく述べています。
  • B. オープンアドレス法でも衝突は起こり、空いている別の位置を探して対処します。
  • C. リストの平均の長さは負荷率に比例するので、負荷率が高いと探索の手間が増えます。
この分野を解く 分野ページへ

関連する計算ツール

データ構造とアルゴリズムの参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

データ構造とアルゴリズムのほかの問題

  1. 配列の中央の要素と比べて、探す範囲を半分ずつに絞っていく二分探索を使うための前提条件として正しいものはどれか。
  2. 昇順に整列された異なる1,000個の値から二分探索で値を探す。1回の比較で「一致・より小さい・より大きい」が分かるものとすると、見つかる場合も見つからない場合も含めて、比較の回数は最大で何回か。
  3. 昇順に並んだ配列 a[0]〜a[9] = 3, 8, 12, 17, 23, 31, 38, 45, 52, 60 から、二分探索で38を探す。探す範囲を下端 lo = 0、上端 hi = 9 から始め、中央の位置を (lo + hi) ÷ 2 の切り捨てとする。38と比べられる要素の値を順に並べたものはどれか。
  4. 配列 5, 3, 8, 1, 4 をバブルソートで昇順に並べる。先頭から隣どうしを比べ、左の方が大きければ交換する操作を末尾まで1回行った(1パス)後の配列はどれか。
  5. 配列 29, 10, 14, 37, 13 を選択ソート(未整列の部分から最小値を探し、未整列の部分の先頭と交換する)で昇順に並べる。この操作を2回行った後の配列はどれか。