エンジニア成長日記 swaponQ

コンピュータサイエンス専攻の一般人のブログです。

Python で アルゴリズム 実装 第2回 二分探索

はじめに

Hello, Terminal!swaponQです!

今回は 第2回 二分探索 です!

二分探索

アルゴリズム

ソート済みのリストや配列に入ったデータ(同一の値はないものとする)に対する検索を行うにあたって、 中央の値を見て、検索したい値との大小関係を用いて、検索したい値が中央の値の右にあるか、左にあるかを判断して、片側には存在しないことを確かめながら検索していく。
大小関係を用いるため、未ソートのリストや大小関係の定義されない要素を含むリストには二分探索を用いることはできない。
n個のデータがある場合、時間計算量はO(logn)である。
n個のデータの中央の値を見ることで、1回の操作でn/2個程度(奇数の場合は(n-1)/2個、偶数の場合はn/2個または(n/2)-1個)の要素を無視することができる。
二分探索 - Wikipedia

実装

binary_search.py
def binary_search(data, value):
    min = 0
    max = len(data) - 1
    while min <= max:
        mid = (min + max) // 2
        if data[mid] == value:
            return mid
        elif data[mid] < value:
            min = mid + 1
        else:
            max = mid - 1
    return -1

if __name__ == '__main__':
    data = [i for i in range(10)]
    print('data =', data)
    value = int(input('input value = '))
    print('index =', binary_search(data, value))
result
data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
input value = 4
index = 4

おわり

今回もお疲れ様でした!
この記事へのコメント・お問い合わせフォームはいつでも大歓迎です。

Goodbye, Terminal… swaponQでした!