二分探索とは

にぶんたんさく

整列済みのデータで、中央の要素と比べて探す範囲を半分ずつに絞っていく探索の方法。n 個のデータから最大でも ⌊log₂ n⌋ + 1 回の比較で見つかり、計算量は O(log n)。データが整列されていることが前提になる。

「二分探索」は、3分野の7問の練習問題に出てきます(データ構造とアルゴリズム, AD/DA変換, ソフトウェア開発とプロジェクト管理など)。

この用語の分野: データ構造とアルゴリズム

二分探索の練習問題に挑戦

配列の中央の要素と比べて、探す範囲を半分ずつに絞っていく二分探索を使うための前提条件として正しいものはどれか。

  1. Aデータの個数が2のべき乗であること
  2. Bデータがキーの順に整列されていること
  3. Cデータに同じ値が含まれていないこと
答えと解説を見る

正解:B. データがキーの順に整列されていること

二分探索は、中央の要素と比べた結果から、目的の値が前半と後半のどちらにあるかを決めて範囲を半分にします。これはデータが整列されているから言えることで、整列されていない配列には使えません。データの個数が2のべき乗でなくても、中央の位置を (下端 + 上端) ÷ 2 の切り捨てなどで決めれば問題なく動きます。同じ値が含まれていても探索はでき、その値のどれか1つが見つかります(最初の位置を求めるには少し工夫が要ります)。

昇順に整列された異なる1,000個の値から二分探索で値を探す。1回の比較で「一致・より小さい・より大きい」が分かるものとすると、見つかる場合も見つからない場合も含めて、比較の回数は最大で何回か。

  1. A10回
  2. B32回
  3. C500回
答えと解説を見る

正解:A. 10回

1回の比較で探す範囲がほぼ半分になり、2¹⁰ = 1024 ≥ 1000 なので、最大でも10回で範囲がなくなります(⌊log₂ 1000⌋ + 1 = 10)。計算量は O(log n) で、100万個でも最大20回で済みます。32回は √1000 ≈ 31.6 に当たる値で、500回は線形探索の平均(約 n/2)に近い値です。ただし、二分探索を使うにはデータが整列されている必要があり、整列にかかる O(n log n) の手間も考える必要があります。

解説の中の「二分探索」

「二分探索」が出てくる問題(7問)

  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. 正しく動くことが分かっているファームウェアの版の後に1,000個のコミットがあり、最新のコミットでは不具合が起こる。不具合はある1つのコミットで入り、それ以降のコミットではすべて起こるとする。git bisect のように二分探索で原因のコミットを特定するとき、ビルドしてテストする回数の最大値はどれか。
  5. 逐次比較型(SAR型)ADコンバータの動作として正しいものはどれか。
  6. Nビットの逐次比較型ADコンバータが、1回の変換で行う比較の回数として基本的に正しいものはどれか。
  7. 異なる100個の値が入った配列から、先頭から順に1つずつ比べる線形探索で目的の値を探す。目的の値は必ず配列の中にあり、どの位置にある確率も等しいとき、比較の回数の平均はいくらか。

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

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

半導体・電子回路・情報の計算ツール

関連する用語

配列 計算量 逐次比較型ADC Git マイコン(マイクロコントローラ) オーバーサンプリング 安定ソート キュー 再帰 スタック

用語集の一覧へ