ロジック:
- バイナリサーチは、ソートされたリストや配列でのみ使用できます。まず、探索対象のリストを昇順または降順にソートします。
- 探索範囲の開始点を0、終了点をリストの要素数-1とします。
- 探索範囲の中央の要素を取得します。中央のインデックスは、(開始点 + 終了点) / 2 で計算できます。
- 中央の要素と目的の要素を比較します。 a. もし中央の要素が目的の要素と一致する場合、探索は成功です。中央のインデックスを返して終了します。 b. もし中央の要素が目的の要素よりも大きい場合、探索範囲を中央より前の部分に変更します。終了点を中央-1に更新します。 c. もし中央の要素が目的の要素よりも小さい場合、探索範囲を中央より後の部分に変更します。開始点を中央+1に更新します。
- 新しい探索範囲でステップ3に戻ります。探索範囲が空になるまで繰り返します。
コード例:
def binary_search(arr, target):
start = 0
end = len(arr) - 1
while start <= end:
mid = (start + end) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
start = mid + 1
else:
end = mid - 1
return -1
上記のコードは、バイナリサーチを実装する基本的な例です。arr
はソートされたリストや配列であり、target
は探索対象の要素です。関数は目的の要素が見つかった場合はそのインデックスを返し、見つからなかった場合は-1を返します。
このロジックとコード例を使って、効率的な要素の検索やソートされたデータセットの操作を行うことができます。