CodeGym /Kursy /Python SELF PL /Rekurencyjne wyszukiwanie binarne

Rekurencyjne wyszukiwanie binarne

Python SELF PL
Poziom 57 , Lekcja 2
Dostępny

3.1 Zasada działania rekurencyjnego wyszukiwania binarnego

Wyszukiwanie binarne to algorytm do znajdowania elementu w posortowanej tablicy, który działa na zasadzie "dziel i rządź". Porównuje szukany element z elementem w środku tablicy i decyduje, w której połowie tablicy szukać dalej. Rekurencyjne wyszukiwanie binarne powtarza ten proces, wywołując samo siebie z zaktualizowanymi granicami tablicy.

Kroki algorytmu:

  1. Porównujemy szukany element z elementem w środku tablicy.
  2. Jeśli element w środku jest równy szukanemu, zwracamy jego indeks.
  3. Jeśli szukany element jest mniejszy, powtarzamy wyszukiwanie w lewej połowie tablicy.
  4. Jeśli szukany element jest większy, powtarzamy wyszukiwanie w prawej połowie tablicy.
  5. Powtarzamy proces, aż znajdziemy element lub wyczerpiemy tablicę.

Implementacja rekurencyjnego wyszukiwania binarnego

Przykład w Python:


def binary_search_recursive(arr, target, left, right):
    if left > right:
        return -1  # Przypadek bazowy: element nie znaleziony
            
    mid = (left + right) // 2  # Znajdujemy środek tablicy
            
    if arr[mid] == target:
        return mid  # Przypadek bazowy: element znaleziony
    elif arr[mid] < target:
        return binary_search_recursive(arr, target, mid + 1, right)  # Szukamy w prawej połowie
    else:
        return binary_search_recursive(arr, target, left, mid - 1)  # Szukamy w lewej połowie
        
# Przykład użycia:
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"Element znaleziony na pozycji: {result}")  # Wyświetli: Element znaleziony na pozycji: 6
        

3.2 Porównanie z iteracyjnym wyszukiwaniem binarnym

Iteracyjne wyszukiwanie binarne:


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  # Element nie znaleziony
        
# Przykład użycia:
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
target = 7
result = binary_search_iterative(arr, target)
print(f"Element znaleziony na pozycji: {result}")  # Wyświetli: Element znaleziony na pozycji: 6
        

Porównanie:

Prostota realizacji:

  • Rekurencyjny algorytm jest zazwyczaj prostszy i krótszy, ale wymaga zrozumienia wywołań rekurencyjnych.
  • Iteracyjny algorytm używa pętli, co może być łatwiejsze dla początkujących programistów.

Pamięć:

  • Rekurencyjny algorytm używa stosu wywołań, co może prowadzić do zwiększonego użycia pamięci przy dużych tablicach.
  • Iteracyjny algorytm używa stałej ilości pamięci, co czyni go bardziej efektywnym pod względem użycia pamięci.

Wydajność:

  • Oba algorytmy mają złożoność czasową O(log n).
  • Rekurencyjny algorytm może być wolniejszy z powodu narzutów na wywołania rekurencyjne, szczególnie jeśli głębokość rekurencji jest duża.

3.3 Przykłady zadań dla rekurencyjnego wyszukiwania binarnego

Rekurencyjne wyszukiwanie binarne to potężny algorytm, który szybko znajduje elementy w posortowanych tablicach. Opiera się na zasadzie "dziel i rządź" i używa rekurencji do dzielenia zadania na mniejsze podzadania.

Porównanie rekurencyjnego i iteracyjnego podejścia pokazuje, że każde z nich ma swoje zalety i wady w zależności od konkretnego zadania. Zrozumienie tych algorytmów i ich zastosowanie pozwala skutecznie rozwiązywać zadania wyszukiwania w programowaniu.

Na przykład takie:

Wyszukiwanie elementu w posortowanej tablicy:

Szukanie konkretnego elementu w tablicy liczb, np. oceny testów, wyszukiwanie w bazie danych po posortowanych kluczach i tak dalej.

Sprawdzanie obecności elementu:

Sprawdzanie, czy określona wartość znajduje się na liście dozwolonych użytkowników, identyfikatorów i tak dalej.

Wyszukiwanie najbliższej wartości:

Wyszukiwanie elementu, który jest najbliższy zadanej wartości w tablicy, np. przy wyszukiwaniu najbliższego sklepu, stacji i tak dalej.

Optymalizacja:

Rozwiązywanie zadań wymagających wyszukiwania optymalnej wartości w posortowanej tablicy, np. znalezienie punktu minimum lub maksimum w funkcjach.

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION