Алгоритми опрацювання масивів: пошук за певними критеріями

Алгоритми пошуку є фундаментом Computer Science. Кожного разу, коли ви використовуєте пошуковий рядок у Google, шукаєте композицію у Spotify або застосовуєте фільтри в інтернет-магазині, за лаштунками працюють математично вивірені механізми обробки даних.

Ефективність алгоритмів та масштабування

Для невеликого списку з 10 елементів метод пошуку не має критичного значення. Однак у професійній розробці ми оперуємо базами даних із мільйонами записів. Використання неефективного алгоритму може призвести до зупинки роботи системи. Основна мета розробника — знайти необхідні дані за мінімально можливу кількість ітерацій (кроків).

Класифікація основних видів пошуку

1. Лінійний пошук (Linear Search)

Це базовий метод, що полягає у послідовному переборі елементів від початку до кінця масиву та порівнянні кожного значення з шуканим критерієм.

  • Часова складність: $O(n)$. Якщо масив містить 100 елементів, у найгіршому випадку знадобиться 100 перевірок.
  • Перевага: працює з будь-якими, навіть невідсортованими масивами.
  • Недолік: низька швидкість обробки великих масивів даних.

2. Бінарний пошук (Binary Search)

Алгоритм, заснований на принципі «розділяй і володарюй». Замість послідовного перебору система щоразу ділить масив навпіл, відсікаючи половину, де шукане значення точно відсутнє.

  • Обов’язкова умова: масив має бути попередньо відсортованим.
  • Часова складність: $O(\log n)$. Для масиву з 1 000 000 елементів алгоритму знадобиться лише близько 20 кроків.
  • Логіка роботи: перевіряється центральний елемент. Якщо він більший за шуканий — пошук триває в лівій частині, якщо менший — у правій.

3. Інтерполяційний пошук

Удосконалена версія бінарного пошуку, що імітує людську логіку (наприклад, пошук слова в паперовому словнику). Алгоритм не просто ділить масив навпіл, а обчислює ймовірну позицію елемента на основі значень крайніх точок.

Технічна реалізація на Python: Пошук за критерієм

Розглянемо практичне завдання: знайти в масиві оцінок лише ті, що відповідають високому рівню навчальних досягнень (10, 11 або 12 балів).

Python

# Масив оцінок учнів
marks = [5, 12, 8, 10, 3, 11, 7, 12]
high_level_marks = []

# Критерій пошуку: значення >= 10
for i in range(len(marks)):
    if marks[i] >= 10:
        high_level_marks.append(marks[i])
        print(f"Знайдено високий бал на позиції {i}: {marks[i]}")

print(f"Загальна кількість результатів високого рівня: {len(high_level_marks)}")

Порівняльна характеристика алгоритмів

АлгоритмШвидкість виконанняУмова застосуванняРекомендована сфера
ЛінійнийНизькаБудь-який тип масивуСписки до 1000 елементів
БінарнийВисокаВідсортований масивВеликі бази даних
СтрибкамиСередняВідсортований масивСистеми з обмеженим доступом

Домашнє завдання

Виконайте завдання у середовищі розробки та завантажте результати для перевірки.

Рівень «Junior»

Створіть масив із 10 довільних цілих чисел. Напишіть програму, яка запитує у користувача число та виводить кількість його входжень у масив.

Рівень «Middle»

Задано масив цін: prices = [150, 45, 300, 80, 120, 25, 500]. Напишіть алгоритм, який знаходить та виводить усі ціни в діапазоні від 50 до 200 включно, а також обчислює їхню загальну суму.

Рівень «Senior»

Реалізуйте алгоритм бінарного пошуку для відсортованого масиву: [2, 5, 8, 12, 16, 23, 38, 56, 72, 91]. Програма повинна вивести індекс знайденого елемента та кількість ітерацій, які знадобилися для отримання результату.

Рекомендація: пам’ятайте, що оптимізація коду — це ознака професійного підходу до розробки. Швидкість роботи програми безпосередньо впливає на користувацький досвід. Успіхів!