Алгоритми пошуку
Лінійний та бінарний пошук у даних: ідея, код, та коли який алгоритм обирати.
1 Що таке пошук?
Пошук — це задача знайти елемент у наборі даних або визначити, що його там немає. У програмуванні пошук зустрічається всюди: знайти товар у кошику, користувача за ID, слово у тексті, потрібний рівень у списку балів.
Ключова думка
Вибір алгоритму залежить від структури даних і того, чи відсортовані вони.
2 Лінійний пошук (Linear Search)
Лінійний пошук перевіряє елементи по черзі: перший, другий, третій… поки не знайде потрібний або не закінчаться дані. Він працює з будь-якими списками — навіть якщо вони не відсортовані.
def linear_search(items, target):
for i in range(len(items)):
if items[i] == target:
return i
return -1
nums = [7, 1, 9, 3]
print(linear_search(nums, 9)) # 2
print(linear_search(nums, 5)) # -1
3 Бінарний пошук (Binary Search)
Бінарний пошук працює лише тоді, коли дані відсортовані. Ідея проста: ми кожного разу ділимо відрізок навпіл і відкидаємо половину, яка точно не підходить.
Важливо
Якщо список не відсортований — бінарний пошук може повернути неправильний результат.
def binary_search(items, target):
left = 0
right = len(items) - 1
while left <= right:
mid = (left + right) // 2
if items[mid] == target:
return mid
elif items[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
sorted_nums = [1, 3, 7, 9, 12, 20]
print(binary_search(sorted_nums, 9)) # 3
4 Пошук у Python “по-дорослому”
Часто вам не потрібно писати пошук вручну:
Оператор in
Перевіряє, чи є елемент у списку.
nums = [1, 3, 7]
print(3 in nums) # True
print(9 in nums) # False
Метод index()
Повертає індекс (але якщо елемента нема — буде помилка).
nums = [1, 3, 7]
print(nums.index(7)) # 2
Висновок
Лінійний пошук — універсальний, але повільніший. Бінарний — дуже швидкий, але потребує відсортованих даних. У реальних задачах швидкість часто залежить від того, як ви зберігаєте і готуєте дані.