探索アルゴリズムは、データ構造の中から特定の値を見つけ出すための手法です。プログラミングやアルゴリズムの学習において、探索アルゴリズムの理解は非常に重要です。この教材では、探索アルゴリズムの時間計算量に焦点を当て、基本的な線形探索と二分探索の実装を行い、それぞれの計算量について解説します。
線形探索は、リストや配列の全ての要素を順番に確認しながら、目的の要素が存在するかどうかを探す方法です。
# 配列内でターゲット値を探す
arr = [1, 3, 5, 7, 9]
target = 9
for i in range(len(arr)):
if arr[i] == target:
print(f"Found at index {i}")
break
このコードでは、最悪でリストの最後まで探索することになります。
二分探索は、ソートされたリストや配列に対して使用できるアルゴリズムで、中央から範囲を半分に分割して探索します。
def binary_search(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
mid = left + (right - left) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
arr = [1, 3, 5, 7, 9]
target = 9
print(binary_search(arr, target)) # 出力は 4(インデックス)
このコードでは、中央の要素に対する比較のみを行い、範囲を半分ずつ減らしていきます。
小さなデータサイズ: ( n ) が小さい場合、線形探索でも二分探索でもそこまで大きな違いが生まれません。しかし、データが増えると違いが顕著になります。
大きなデータサイズ:
実際のパフォーマンス:
大規模なソート済みデータを扱う場合には、二分探索が特に有効なアルゴリズムになります。