探索アルゴリズム

データの中から特定の要素を見つけるアルゴリズム。

線形探索
配列の先頭から順番に要素を検索する手法。
二分探索
ソート済みの配列で中央値と比較しながら検索範囲を半分にする手法。
ターゲット
検索する値。
ソート済み
要素が昇順または降順に並んでいる状態。
時間計算量
アルゴリズムの実行時間を表す指標。
空間計算量
アルゴリズムが使用するメモリ量を表す指標。

比較

線形探索と二分探索の特徴を比較する。

特徴 線形探索 二分探索
時間計算量 O(n) O(log n)
空間計算量 O(1) O(1)
前提条件 なし ソート済み
ランダムアクセス はい はい

計算量

探索アルゴリズムの計算量を理解する。

Complexity Comparison
# 探索アルゴリズムの比較
import time
arr = list(range(10000))
target = 9999
# 線形探索
start = time.time()
linear_search(arr, target)
end = time.time()
print(f"線形探索: {end - start:.6f}秒")
# 二分探索
arr.sort() # ソート済みの配列
start = time.time()
binary_search(arr, target)
end = time.time()
print(f"二分探索: {end - start:.6f}秒")

使用例

探索アルゴリズムの実際の使用例を確認する。

Use Cases
# 探索アルゴリズムの使用例
# データベースの検索
users = [
{"id": 1, "name": "Alice", "email": "alice@example.com"},
{"id": 2, "name": "Bob", "email": "bob@example.com"},
{"id": 3, "name": "Charlie", "email": "charlie@example.com"},
]
# 線形探索でユーザーを検索
target_id = 2
found_user = None
for user in users:
if user["id"] == target_id:
found_user = user
break
if found_user:
print(f"ユーザーが見つかりました: {found_user['name']}")
else:
print("ユーザーが見つかりませんでした")
# 二分探索でユーザーを検索(IDでソート済みと仮定)
sorted_users = sorted(users, key=lambda x: x["id"])
target_id = 2
found_user = binary_search(sorted_users, target_id)
if found_user != -1:
print(f"ユーザーが見つかりました: {sorted_users[found_user]['name']}")
else:
print("ユーザーが見つかりませんでした")

合格ライン

線形探索を実装できる
二分探索を実装できる
線形探索と二分探索の違いを理解している
探索アルゴリズムの計算量を理解している
探索アルゴリズムの使い分けができる

演習課題

課題1: 線形探索の実装
線形探索を実装し、配列から要素を検索してください。
課題2: 二分探索の実装
二分探索を実装し、ソート済みの配列から要素を検索してください。
課題3: 探索アルゴリズムの比較
線形探索と二分探索の計算量を比較し、それぞれの特徴を説明してください。

参考文献

この記事は以下の公的ガイドライン/標準に基づいています。