Wyjaśnienie algorytmów wyszukiwania liniowego i binarnego

Wyjaśnienie algorytmów wyszukiwania liniowego i binarnego

Umiejętność wyszukiwania niektórych danych jest ważnym aspektem informatyki. Algorytmy wyszukiwania służą do wyszukiwania określonego elementu w zestawie danych.





Algorytmy zwracają wynik logiczny (prawda lub fałsz) do zapytania wyszukiwania. Można je również modyfikować, aby uzyskać względną pozycję znalezionej wartości.





W tym artykule algorytmy skoncentrują się na określeniu, czy wartość istnieje.





Algorytmy wyszukiwania liniowego

Wyszukiwanie liniowe jest również znane jako wyszukiwanie sekwencyjne. W tym typie wyszukiwania, każda wartość na liście jest odwiedzana jedna po drugiej w uporządkowany sposób, sprawdzając, czy żądana wartość istnieje.

Algorytm sprawdza wartość po wartości, aż znajdzie szukaną wartość lub zabraknie wartości do wyszukania. Gdy zabraknie wartości do przeszukania, oznacza to, że wyszukiwanego hasła nie ma na liście.



Sekwencyjny algorytm wyszukiwania przyjmuje listę wartości i żądany element na liście jako parametry. Zwracany wynik jest inicjowany jako Fałszywe i zmieni się na Prawdziwe po znalezieniu żądanej wartości.

Zobacz implementację Pythona poniżej jako przykład:





def linearSearch(mylist, item):
found = False
index = 0
while index if mylist[index] == item:
found = True
else:
index = index+1
return found

Analiza algorytmu

Najlepszy scenariusz ma miejsce, gdy pożądana pozycja jest pierwszą na liście. Najgorszy przypadek ma miejsce, gdy pożądana pozycja jest ostatnia na liście (n-ta pozycja). Dlatego złożoność czasowa wyszukiwania liniowego wynosi O(n).

Średni scenariusz przypadku w powyższym algorytmie to n/2.





Związane z: Co to jest notacja Big-O?

Ważne jest, aby wiedzieć, że używany algorytm zakłada, że ​​dostarczona jest mu losowa lista elementów. Oznacza to, że pozycje listy nie są w określonej kolejności.

jak zrobić własny filtr zatrzaskowy

Załóżmy, że elementy były w określonej kolejności, powiedzmy od najmniejszego do największego. Można by osiągnąć pewną przewagę w obliczeniach.

Weźmy na przykład szukanie 19 na podanej liście: [2, 5, 6, 11, 15, 18, 23, 27, 34]. Po osiągnięciu 23, stanie się jasne, że szukanej pozycji nie ma na liście. Dlatego dalsze przeszukiwanie pozostałych elementów listy nie byłoby już ważne.

Algorytmy wyszukiwania binarnego

Widziałeś, jak uporządkowana lista może zmniejszyć potrzebne obliczenia. Algorytm wyszukiwania binarnego jeszcze bardziej wykorzystuje tę wydajność, niż wprowadza uporządkowana lista.

Algorytm rozpoczyna się od pobrania średniej wartości uporządkowanej listy i sprawdzenia, czy jest to pożądana wartość. Jeśli tak nie jest, sprawdzana jest wartość, czy jest mniejsza lub większa od żądanej wartości.

Jeśli jest mniej, to nie ma potrzeby sprawdzania dolnej połowy listy. W przeciwnym razie, jeśli jest większy, przechodzi do górnej połowy listy.

Powiązane: Co to jest rekurencja i jak z niej korzystać?

Niezależnie od wybranej podlisty (lewej lub prawej), ponownie zostanie określona środkowa wartość. Wartość jest ponownie sprawdzana, jeśli jest to wartość wymagana. Jeśli tak nie jest, sprawdzane jest, czy jest mniejsze lub większe niż żądana wartość.

dlaczego mój telefon nie łączy się z komputerem?

Ten proces jest powtarzany, dopóki nie zostanie znaleziona wartość, jeśli tam jest.

Poniższa implementacja Pythona dotyczy algorytmu wyszukiwania binarnego.

def binarySearch(mojalista, element):

low = 0
high = len(mylist) - 1
found = False
while low <= high and not found: mid = (low + high) // 2
if mylist[mid] == item:found = True
elif item else:low = mid + 1
return found

Analiza algorytmu

Najlepszy scenariusz ma miejsce, gdy żądany element zostanie uznany za element środkowy. Jednak najgorszy scenariusz nie jest tak prosty. Postępuj zgodnie z poniższą analizą:

Po pierwszym porównaniu pozostanie n/2 pozycji. Po drugim pozostanie n/4 pozycji. Po trzecim n/8.

Zauważ, że liczba pozycji zmniejsza się o połowę, aż osiągną n/2i, gdzie i jest liczbą porównań. Po całym podziale otrzymujemy tylko 1 przedmiot.

Oznacza to:

n/2i=1 Dlatego wyszukiwanie binarne to O(log n).

Przejście do sortowania

W wyszukiwaniu binarnym rozważaliśmy przypadek, w którym dana tablica była już uporządkowana. Załóżmy jednak, że masz nieuporządkowany zbiór danych i chcesz przeprowadzić na nim wyszukiwanie binarne. Co byś zrobił?

Odpowiedź jest prosta: posortuj. Istnieje wiele technik sortowania w informatyce, które zostały dobrze zbadane. Jedną z tych technik, którą możesz zacząć studiować, jest algorytm sortowania przez wybór, ale mamy też mnóstwo poradników dotyczących innych dziedzin.

Udział Udział Ćwierkać E-mail Jak korzystać z sortowania wyboru

Sortowanie przez wybór jest trochę trudne do zrozumienia dla początkujących, ale nie jest zbyt trudne, gdy zrozumiesz, co się dzieje.

Czytaj dalej
Powiązane tematy
  • Programowanie
  • Wyjaśnienie technologii
  • Programowanie
  • Algorytmy
  • Analiza danych
O autorze Jerome Davidson(22 opublikowane artykuły)

Jerome jest pisarzem sztabowym w MakeUseOf. Zajmuje się artykułami na temat programowania i systemu Linux. Jest także entuzjastą kryptowalut i zawsze śledzi branżę kryptograficzną.

Więcej od Jerome'a ​​Davidsona

Zapisz się do naszego newslettera

Dołącz do naszego newslettera, aby otrzymywać porady techniczne, recenzje, bezpłatne e-booki i ekskluzywne oferty!

Kliknij tutaj, aby zasubskrybować