基本情報技術者 2015年 春期 午前(科目A) 問06
問題文
整列された個のデータの中から、求める要素を2分探索法で探索する。この処理の計算量のオーダを表す式はどれか。
選択肢
ア:(正解)
イ:
ウ:
エ:
🔒 解説は解答すると表示されます
二分探索法の計算量【午前解説】
正解の理由
正解は ア: です。
二分探索は配列の中央要素と比較して左右どちらか半分の領域に絞り込む操作を繰り返します。探索範囲が毎回半分になるため、探索に要する比較回数は要素数の対数に比例します。大きさの違いを定数乗で吸収するため、計算量は (通常底は2だが表記上は底の違いは定数倍で無視)となります。
二分探索は配列の中央要素と比較して左右どちらか半分の領域に絞り込む操作を繰り返します。探索範囲が毎回半分になるため、探索に要する比較回数は要素数の対数に比例します。大きさの違いを定数乗で吸収するため、計算量は (通常底は2だが表記上は底の違いは定数倍で無視)となります。
解法ステップ
- 初期の候補数を とする。1 回の比較で候補は約半分になる。
- 回比較した後の候補数は概ね となる。
- 探索が終了するのは候補数が 1 以下になったときなので を解く。
- この不等式から 、すなわち 。したがって必要な比較回数は である。
- 定数や端数(切り上げや +1 のオフセット)はオーダーには影響しないため最終的に と表現する。
選択肢別の誤答解説
- ア: ア() — 正解。二分探索の比較回数は対数オーダーで表されます。
- イ: — 誤り。線形探索(未整列・逐次探索)では ですが、二分探索は整列済みで毎回半分に絞れるため該当しません。
- ウ: — 誤り。二重ループや比較ソートの最悪ケースなど二次時間アルゴリズムの表現であり、二分探索とは無関係です。
- エ: — 誤り。これは高速ソート(マージソートやヒープソート等)の時間オーダーで、探索単体の二分探索とは異なります。
よくある誤解
- 「探索は ではないか」
未整列で線形探索を行う場合は ですが、二分探索は整列済みを前提にしているため になります。前提条件の見落としが多いです。 - 「底の違い( か か)で選択が変わる」
底は定数因子にすぎず、オーダー記法では無視できます。試験では単に対数である点を重視してください。 - 「再帰だと遅くなるので または になる」
再帰/反復は実装差であり、計算量のオーダー自体は変わりません。アルゴリズムの本質を混同しないこと。
補足コラム
- 厳密な比較回数: 要素数 に対する最悪比較回数は一般に (記法や実装によっては切り上げ)となりますが、オーダーは です。
- 前提条件の重要性: 二分探索は「整列されていること」が必須です。整列されていない配列で使うと誤った結果になります。
- 応用: 平衡二分探索木やバイナリサーチを利用する標準ライブラリの lower_bound/upper_bound も計算量は です。
- 実装注意: 再帰実装でもループ実装でも計算量は同じですが、実装でのインデックスオーバーフローや中間計算のオフバイワンに注意してください。
FAQ
Q1: 平均時間と最悪時間はどちらも ですか?
A1: はい。二分探索では、平均・最悪・最良いずれも比較回数は対数オーダーで表されます(詳細に最良は 、平均・最悪は )。
A1: はい。二分探索では、平均・最悪・最良いずれも比較回数は対数オーダーで表されます(詳細に最良は 、平均・最悪は )。
Q2: の底は何を想定すればよいですか?
A2: 通常は底2()を想定しますが、オーダー記法では底の違いは定数倍に相当するため区別しません。
A2: 通常は底2()を想定しますが、オーダー記法では底の違いは定数倍に相当するため区別しません。
Q3: 未整列配列を二分探索しても時間的には速くなりますか?
A3: 正しい結果が得られないため使えません。未整列ならまずソート()するか線形探索()を選びます。
A3: 正しい結果が得られないため使えません。未整列ならまずソート()するか線形探索()を選びます。
Q4: 再帰実装は速度が落ちますか?
A4: 一般に関数呼び出しのオーバーヘッドはありますが、オーダーとしては変わりません。大規模なデータで微差が気になる場合は反復版を使うことがあります。
A4: 一般に関数呼び出しのオーバーヘッドはありますが、オーダーとしては変わりません。大規模なデータで微差が気になる場合は反復版を使うことがあります。
Q5: 具体例 — のときの比較回数は?
A5: なので実際の比較回数は概ね 20 回前後です。
A5: なので実際の比較回数は概ね 20 回前後です。
関連キーワード: 二分探索、対数計算量、探索アルゴリズム、計算量解析、半減法、検索最適化

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

