Wyszukiwanie binarne to algorytm wyszukiwania używany do wyszukiwania elementów docelowych w pojemniku, w którym elementy muszą być ułożone w kolejności rosnącej. Zasadniczo wyszukiwanie binarnych jest używane do wyszukiwania numeru indeksu elementu docelowego w posortowanej tablicy.
Wyszukiwanie binarne wykorzystuje podejście podziału i podbijania, w którym dzieli tablicę na równe części, aż znajdzie element docelowy.
Algorytm wyszukiwania binarnego jest wdrażany zarówno iteracyjny, jak i rekurencyjny. Wyszukiwanie binarne jest bardziej wydajne i szybsze w porównaniu z wyszukiwaniem liniowym.
Algorytm wyszukiwania binarnego
- Sortuj i ułóż elementy w tablicy arr w kolejności rosnącej.
- Algorytmy porównują element środkowy N z elementem docelowym cel.
- Algorytm zwraca wskaźnik pozycji elementu środkowego, jeśli element docelowy jest równy elementowi środkowego,
- Algorytm przeszukuje dolną połowę tablicy, jeśli element docelowy jest mniejszy niż element środkowy.
- Algorytm przeszukuje górną połowę tablicy, jeśli element docelowy jest większy niż element środkowy.
- Algorytm powtarza 4. i 5. kroki, aż długość tablicy stanie się jednym lub mniej niż 1.
Do końca albo wartość indeksu elementu jest zwracana, albo element nie istnieje w tablicy.
Pseudocode wyszukiwania binarnego
Wielokrotny
funkcja binary_search (arr, n, cel) jest
po lewej: = 0
po prawej: = n - 1
podczas gdy lewe ≤ prawy
Środek: = podłoga ((po lewej + prawej) / 2)
Jeśli ARR [środkowy] cel, to
po prawej: = środkowy - 1
w przeciwnym razie:
powrót środka
powrót nieudany
Rekurencyjny
funkcja binary_search (ARR, lewy, prawy, cel) jest
Jeśli po prawej> = lewy
Middle = (lewy+prawy) // 2
Jeśli ARR [Middle] == cel
powrót środka
W przeciwnym razie, jeśli arr [środkowy]> target
return binary_search (ARR, niski, połowa 1, cel)
w przeciwnym razie
return binary_search (ARR, MID+1, po prawej, cel)
w przeciwnym razie
powrót nieudany
Wdrożyć wyszukiwanie binarne w Python
Wielokrotny
W podejściu iteracyjnym używamy pętli do wdrożenia wyszukiwania binarnego.
def binary_search (arr, n, cel):
po lewej = 0
Right = n-1
Middle = 0
w lewo<=right:
Middle = (prawy+lewy) // 2
#Jeśli element środkowy jest równy elementowi docelowi
Jeśli ARR [Middle] == cel:
powrót środka
# Jeśli element docelowy jest większy niż element środkowy
Elif Arr [Middle]< target:
po lewej = środkowy+1
# Jeśli element docelowy jest mniejszy niż element środkowy
w przeciwnym razie:
Right = Middle-1
# Jeśli element docelowy nie jest obecny w tablicy
zwrot -1
Jeśli __name__ == '__main__':
# posortowana tablica
sorted_arr = [0,4,7,10,14,23,45,47,53]
# długość tablicy
n = len (sorted_arr)
#Element do wyszukiwania
Target = 47
pozycja = binary_search (sorted_arr, n, cel)
Jeśli pozycja != -1:
print (f "element targ obecny w indeksowaniu pozycja")
w przeciwnym razie:
print (f "element targ nie występuje w tablicy")
Wyjście
Element 47 obecny na indeksie 7
Rekurencyjny
W Recursive zamiast używania pętli, ciągle wywołujemy funkcję, aż stan podstawowy nie zostanie zadowolony
def binary_search (ARR, lewy, prawy, cel):
#base warunek
Jeśli RightTarget:
return binary_search (ARR, po lewej, środkowej 1, cel)
#if Element docelowy jest mniejszy niż element środkowy
w przeciwnym razie:
return binary_search (ARR, Middle+1, po prawej, cel)
Jeśli __name__ == '__main__':
# posortowana tablica
sorted_arr = [0,4,7,10,14,23,45,47,53]
po lewej = 0
right = len (sorted_arr) -1
#Element do wyszukiwania
Target = 47
pozycja = binary_search (sorted_arr, lewy, prawy, cel)
Jeśli pozycja != -1:
print (f "element targ obecny w indeksowaniu pozycja")
w przeciwnym razie:
print (f "element targ nie występuje w tablicy")
Wyjście
Element 90 nie jest obecny w tablicy
Złożoność
Wyszukiwanie binarne ma złożoność czasu O (log n), gdzie N to liczba elementów obecnych w tablicy.
Wyszukiwanie binarne ma złożoność przestrzeni O (1), ponieważ w algorytmie wykonujemy wyszukiwanie na miejscu.
Wniosek
Wyszukiwanie binarne jest jednym z najlepszych i wydajnych algorytmów wyszukiwania. Złożoność czasu i przestrzeni wyszukiwania binarnego jest również bardzo niska; Jedynym warunkiem wyszukiwania binarnego jest to, że tablica wejściowa powinna być sortowana w kolejności rosnącej.