JavaRush /Курси /Модуль 1: Python Core /Рекурсивний бінарний пошук

Рекурсивний бінарний пошук

Модуль 1: Python Core
Рівень 18 , Лекція 2
Відкрита

3.1 Принцип роботи рекурсивного бінарного пошуку.

Бінарний пошук — це алгоритм для знаходження елемента в відсортованому масиві, який працює за принципом "розділяй і володарюй". Він порівнює шуканий елемент з елементом в середині масиву і вирішує, в якій половині масиву шукати далі. Рекурсивний бінарний пошук повторює цей процес, викликаючи сам себе з оновленими межами масиву.

Кроки алгоритму:

  1. Порівнюємо шуканий елемент з елементом в середині масиву.
  2. Якщо елемент в середині збігається з шуканим, повертаємо його індекс.
  3. Якщо шуканий елемент менший, повторюємо пошук в лівій половині масиву.
  4. Якщо шуканий елемент більший, повторюємо пошук в правій половині масиву.
  5. Повторюємо процес, поки не знайдемо елемент або не вичерпаємо масив.

Реалізація рекурсивного бінарного пошуку

Приклад на Python:


def binary_search_recursive(arr, target, left, right):
    if left > right:
        return -1  # Базовий випадок: елемент не знайдено
            
    mid = (left + right) // 2  # Знаходимо середину масиву
            
    if arr[mid] == target:
        return mid  # Базовий випадок: елемент знайдено
    elif arr[mid] < target:
        return binary_search_recursive(arr, target, mid + 1, right)  # Шукаємо в правій половині
    else:
        return binary_search_recursive(arr, target, left, mid - 1)  # Шукаємо в лівій половині
        
# Приклад використання:
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
target = 7
result = binary_search_recursive(arr, target, 0, len(arr) - 1)
print(f"Елемент знайдено на позиції: {result}")
        

3.2 Порівняння з ітеративним бінарним пошуком.

Ітеративний бінарний пошук:


def binary_search_iterative(arr, target):
    left, right = 0, len(arr) - 1
            
    while left <= right:
        mid = (left + right) // 2
                
        if arr[mid] == target:
            return mid
        elif arr[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
            
    return -1  # Елемент не знайдено
        
# Приклад використання:
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
target = 7
result = binary_search_iterative(arr, target)
print(f"Елемент знайдено на позиції: {result}")
        
        

Порівняння:

Простота реалізації:

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

Пам'ять:

  • Рекурсивний алгоритм використовує стек викликів, що може призвести до збільшення використання пам'яті при великих масивах.
  • Ітеративний алгоритм використовує постійну кількість пам'яті, що робить його більш ефективним з точки зору використання пам'яті.

Продуктивність:

  • Обидва алгоритми мають часову складність O(log n).
  • Рекурсивний алгоритм може бути повільнішим через накладні витрати на рекурсивні виклики, особливо якщо глибина рекурсії велика.

3.3 Приклади задач для рекурсивного бінарного пошуку.

Рекурсивний бінарний пошук — це потужний алгоритм, який допомагає швидко знаходити елементи в відсортованих масивах. Він базується на принципі "розділяй і володарюй" та використовує рекурсію для поділу задачі на менші підзадачі.

Порівняння рекурсивного і ітеративного підходів показує, що кожен з них має свої переваги і недоліки в залежності від конкретного завдання. Розуміння цих алгоритмів та їх застосування дозволяє ефективно розв'язувати задачі пошуку в програмуванні.

Наприклад такі:

Пошук елемента в відсортованому масиві:

Пошук конкретного елемента в масиві чисел, наприклад, оцінка тестів, пошук в базі даних за відсортованими ключами і т.д.

Перевірка присутності елемента:

Перевірка, чи присутнє певне значення в списку дозволених користувачів, ідентифікаторів і т.д.

Пошук найближчого значення:

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

Оптимізація:

Вирішення задач, що потребують пошуку оптимального значення в відсортованому масиві, наприклад, знаходження точки мінімуму або максимуму в функціях.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ