探索 / Binary Search(二分探索)

真ん中を見て、
探索範囲を半分に絞る。

整列済み配列に対して高速に探索する方法です。毎回半分の候補を捨てられるため O(log n) になります。

探索比較教材動作イメージ付き

目次

このページの目次

このページでわかること

先に知っておくポイント

1. 何を比較するか
2. 候補がどう減るか
3. 前提条件があるか

概要

概要

整列済み配列に対して高速に探索する方法です。毎回半分の候補を捨てられるため O(log n) になります。

考え方

擬似コード

low = 0, high = n - 1
while low <= high
  mid = floor((low + high) / 2)
  if a[mid] == target return mid
  if a[mid] < target then low = mid + 1 else high = mid - 1

要点

要点まとめ

最良時計算量

O(1)

平均時計算量

O(log n)

最悪時計算量

O(log n)

前提

整列済み

補足

向いている場面と注意点

なぜ速いか

1 回比較するごとに候補が半分になるからです。

前提

整列されていないと左右どちらを捨てるか判断できません。

比較対象

Linear Search と並べると差が際立ちます。

動きで確認

動きを見てたしかめる

ここでは「何を比較するか」を見ながら、上で読んだ内容を動きと結びつけます。

注目発見除外

次に見る

次に見るページ

比較すると違いがわかりやすいページを先に置いています。