【にぶんたんさく】

二分探索 とは?

💡 「数当てゲーム」のアルゴリズム
📌 このページのポイント
二分探索(Binary Search) Step 1 2 5 8 12 15 19 23 中央 探す値: 19 12 < 19 → 右半分へ Step 2 2 5 8 12 15 19 23 中央 19 == 19 発見! 一致 → 探索終了 結果: インデックス 5 で発見(7個中 2回の比較で完了) 計算量: O(log n) — データが倍になっても比較回数は1回増えるだけ
ソート済み配列を半分ずつ絞り込んで高速に探索するアルゴリズム
ひよこ ひよこ

どういう仕組みなの?

ペンギン先生 ペンギン先生

1〜100の数当てゲームと同じ。「50より大きい?」→Yes→「75より大きい?」→No→「63より大きい?」…と半分ずつ絞る。100個のデータなら最大7回(log₂100≈7)、100万個でも最大20回で見つかる。毎回半分に絞れるから指数的に候補が減るんだよ

ひよこ ひよこ

実装で注意することは?

ペンギン先生 ペンギン先生

古典的なバグとして「中間地点の計算でオーバーフロー」がある。mid = (left + right) / 2だとleft + rightが整数の上限を超えることがある。mid = left + (right - left) / 2と書くのが安全。あとoff-by-oneエラー(境界条件の1つずれ)に注意。left < rightかleft <= rightかで結果が変わるよ

ひよこ ひよこ

二分探索の応用は?

ペンギン先生 ペンギン先生

①lower_bound/upper_bound(ソート済み配列で条件を満たす最初/最後の位置)、②「答えを二分探索する」パターン(条件を満たす最小値を探す)、③実数の二分探索(数値計算の精度を上げる)。競技プログラミングでは超頻出のテクニックだよ

ひよこ ひよこ

IPA試験での出題パターンは?

ペンギン先生 ペンギン先生

「n個のデータから二分探索で最大何回の比較が必要か」→⌈log₂n⌉回。「1024個のデータの二分探索の最大比較回数は?」→10回(log₂1024=10)。トレース問題(手順を追って中間値を答える)も定番。線形探索との比較で「データ数が増えた時の効率差」を問う問題もよく出るよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「二分探索」って出てきたら「ソート済みデータを半分ずつ絞り込む高速検索」と思えればだいたいOK!
📖 おまけ:英語の意味
「Binary Search」 = 二分探索
💬 Binary(二つに分ける)。辞書で単語を引くとき真ん中あたりを開いて探すのと同じだよ
← 用語集にもどる