コンテンツへスキップ
uencoder

Binary Search

二分探索はソート済み配列の中央と比較して探索範囲を毎半分に狭め、O(log n) で目的の値を探す。効率的な探索アルゴリズムの基礎である。

目的

ソート済みデータから要素を効率的に見つけ、探索に対数の計算量を適用する。

メカニズム

区間 [lo, hi] を保ち、mid=(lo+hi)/2 とする。mid と目的の値を比較し、等しければ返し、目的の値が大きければ右半分を、小さければ左半分を探索する。区間は各ステップで半分になり、O(log n) となる。ソート済みであることが前提である。変種として下限、上限、挿入位置の探索がある。

ユースケース

  • ソート済み配列の検索
  • データベースの B+ 木インデックス
  • バージョン管理の bisect
  • 関数のゼロ点探索(バイセクション法)

例

  • 入力
    Search 5 in [1,3,5,7,9]
    Output
    Index 2

    2 comparisons

よくあるエラー

lo+hi integer overflow
Use lo+(hi-lo)/2

関連用語

References