Пошук екстремальних значень (максимуму та мінімуму) — це фундаментальна задача програмування, яка лежить в основі аналізу даних, штучного інтелекту та систем автоматизації. У цій статті ми детально розглянемо теоретичні аспекти та практичну реалізацію цих алгоритмів.
Теоретична основа: Метод послідовного порівняння
Комп’ютер обробляє дані дискретно, тобто крок за кроком. Оскільки процесор не може «охопити поглядом» весь масив одночасно, він використовує ітераційний підхід. Найпоширенішим є алгоритм, який часто називають «методом чемпіона».
Основні етапи алгоритму:
- Ініціалізація (Вибір еталона): Перед початком перебору необхідно визначити початкове значення для пошуку. Найбільш надійним методом є призначення першого елемента масиву (
array[0]) як поточного максимуму або мінімуму.- Альтернатива: Використання системних констант (наприклад, від’ємна нескінченність для максимуму), проте вибір першого елемента є більш універсальним, оскільки він гарантує, що результат належатиме до самого набору даних.
- Перебір (Цикл): Програма послідовно переглядає всі елементи масиву, починаючи з другого (індекс
1). - Порівняння та оновлення: На кожному кроці поточний елемент порівнюється з «чемпіоном».
- При пошуку максимуму: якщо
поточний > макс, томакс = поточний. - При пошуку мінімуму: якщо
поточний < мін, томін = поточний.
- При пошуку максимуму: якщо
Складність та ефективність
Оскільки алгоритм вимагає перегляду кожного елемента масиву рівно один раз, його ефективність визначається наступними параметрами:
- Часова складність: $O(n)$, де $n$ — кількість елементів. Це оптимальна складність для невідсортованих даних.
- Пам’ять: $O(1)$ — для роботи алгоритму потрібна лише одна або дві додаткові змінні, незалежно від розміру вхідних даних.
Практична реалізація: Аналіз ігрових результатів
Уявімо систему, яка зберігає бали гравців. Нам потрібно знайти найкращий результат (максимум) та найгірший (мінімум), а також визначити, під якими номерами вони знаходяться.
Python
# Масив балів гравців
scores = [450, 120, 890, 530, 210, 890, 75]
# Ініціалізація
max_score = scores[0]
min_score = scores[0]
max_idx = 0
min_idx = 0
# Прохід по масиву
for i in range(1, len(scores)):
# Логіка для максимуму
if scores[i] > max_score:
max_score = scores[i]
max_idx = i
# Логіка для мінімуму
if scores[i] < min_score:
min_score = scores[i]
min_idx = i
print(f"Кращий результат: {max_score} (гравець №{max_idx + 1})")
print(f"Найгірший результат: {min_score} (гравець №{min_idx + 1})")
Домашнє завдання: Реалізуйте програму, яка знаходить різницю між максимальним та мінімальним елементами введеного користувачем масиву.