二分探索
独学で初めて最近自分のプログラムが遅いという壁に当たり
アルゴリズムを勉強し始めました。
まずは、アルゴリズム入口??の二分探索を実装してみました。
python3.6
#二分探索 def binary_search(arry, item): low = 0 high = len(arry) - 1#リストの長さを測定する #lowとhighが一致するか、ひっくり返るまで検索 while low <= high: mid = (low + high) // 2#真ん中の要素の位置が整数になるように計算する if arry[mid] == item:#値が同じなら場所を返して終了 return(mid) elif arry[mid] > item:#大きすぎたら半分より前を再度検索 high = mid - 1 else :#小さすぎたら半分より後を再度検索 low = mid + 1 return(None)#一致するものがなければNoneを返す
適当なリストを作って試してみます。
#適当なリストの作成 arry = list(range(0, 10,2)) #[0, 2, 4, 6, 8] #検索するitem item = 4 #二分探索 print(binary_search(arry, item)) #2
処理時間を測定しました。
10個の要素から検索するのに245ns
1億個の要素から検索するのに3.72µs
要素の個数は1000万倍だけど、処理時間は15倍!!