Menu
Coddy logo textTech

Wyszukiwanie liniowe

Ostatnia aktualizacja

Wyszukiwanie liniowe (nazywane też sekwencyjnym) to najprostszy algorytm wyszukiwania: zaczynasz od pierwszego elementu i porównujesz każdy kolejny z celem, aż znajdziesz dopasowanie albo skończą się elementy. Algorytm nie zakłada niczego o danych, więc tablica może być nieposortowana, a elementami może być wszystko, co da się porównać pod kątem równości.

Animacja powyżej podświetla każde porównanie, gdy przeglądanie przesuwa się od lewej do prawej, i zatrzymuje się w chwili, gdy pojawi się cel. Prostota kosztuje szybkość: w najgorszym przypadku sprawdzany jest każdy element, więc algorytm działa w O(n). Gdy dane są posortowane, wyszukiwanie binarne znajduje tę samą odpowiedź w O(log n), a jeśli najpierw potrzebujesz posortować dane, zobacz merge sort.

Złożoność czasowa i pamięciowa

PrzypadekZłożonośćUwagi
Najlepszy przypadekO(1)Pierwszy element jest celem.
Średni przypadekO(n)Średnio połowa elementów jest sprawdzana przed trafieniem.
Najgorszy przypadekO(n)Cel jest ostatni albo w ogóle go nie ma.
PamięćO(1)Przechowywany jest tylko bieżący indeks.

Krok po kroku

KrokCo się dzieje
1Zacznij od indeksu 0, czyli pierwszego elementu tablicy.
2Porównaj bieżący element z szukaną wartością.
3Jeśli są równe, zwróć bieżący indeks (znaleziono).
4W przeciwnym razie przesuń się o jedną pozycję w prawo i powtórz.
5Jeśli dojdziesz do końca tablicy bez dopasowania, celu nie ma (zwróć -1).

Przykład krok po kroku

Szukanie 5 w [7, 3, 9, 1, 5, 8, 2]:

PorównanieIndeksElementWynik
1077 ≠ 5: przeglądaj dalej.
2133 ≠ 5: przeglądaj dalej.
3299 ≠ 5: przeglądaj dalej.
4311 ≠ 5: przeglądaj dalej.
5455 = 5: znaleziono pod indeksem 4.

Kiedy używać wyszukiwania liniowego

Używaj, gdyUnikaj, gdy
Dane są nieposortowane lub ciągle się zmieniająDane są posortowane, więc wyszukiwanie binarne jest wykładniczo szybsze
Kolekcja jest mała, więc wygrywa prostotaZbiór danych jest duży i przeszukiwany wielokrotnie
Masz tylko dostęp sekwencyjny (strumienie, listy jednokierunkowe)Stać cię na indeks lub tablicę haszującą z wyszukiwaniem w O(1)

Linear Search: kod

Przejrzysta, gotowa do uruchomienia implementacja algorytmu Linear Search w językach: Python, JavaScript, Java, C++, C, Pseudocode. Wybierz język, skopiuj kod albo otwórz go od razu w edytorze online Coddy.

Linear Search: kod (Python)

Python
1def linear_search(a, target):2    # Scan left to right until the target appears3    for i in range(len(a)):4        if a[i] == target:5            return i6    return -17
8
9nums = [7, 3, 9, 1, 5, 8, 2]10print("Index of 5:", linear_search(nums, 5))11print("Index of 4:", linear_search(nums, 4))
Uruchom ten kod w edytorze Python online

Wyszukiwanie liniowe: najczęstsze pytania

Jaka jest złożoność czasowa wyszukiwania liniowego?
O(n) w średnim i najgorszym przypadku (przeglądanie może wymagać odwiedzenia każdego elementu) oraz O(1) w najlepszym przypadku, gdy pierwszy element jest celem. Zużywa O(1) dodatkowej pamięci.
Czy wyszukiwanie liniowe wymaga posortowanych danych?
Nie, i to jego główna zaleta. Wyszukiwanie liniowe działa na całkowicie nieposortowanych danych, bo sprawdza równość każdego elementu; kolejność nigdy nie ma znaczenia. Wyszukiwanie binarne działa natomiast tylko na posortowanych tablicach.
Kiedy wyszukiwanie liniowe jest lepsze od binarnego?
Gdy dane są nieposortowane i przeszukujesz je tylko raz (wcześniejsze sortowanie kosztowałoby O(n log n)), gdy kolekcja jest malutka albo gdy masz tylko dostęp sekwencyjny, na przykład strumień lub listę jednokierunkową. Przy wielokrotnych wyszukiwaniach w posortowanych tablicach wygrywa wyszukiwanie binarne.
Czy wyszukiwanie liniowe to to samo co wyszukiwanie sekwencyjne?
Tak, obie nazwy opisują ten sam algorytm: przeglądaj elementy po kolei, aż znajdziesz cel albo skończy się kolekcja.
Ile porównań średnio wykonuje wyszukiwanie liniowe?
Jeśli cel istnieje i z równym prawdopodobieństwem może być wszędzie, średnio około n/2 porównań; jeśli celu nie ma, dokładnie n. Ten liniowy wzrost jest powodem nazwy wyszukiwanie liniowe.
Ilustracja języków programowania w Coddy

Opanuj algorytmy z Coddy

ZACZNIJ