Wyszukiwanie liniowe

Przypomnijmy sobie najważniejsze informacje dotyczące algorytmu wyszukiwania liniowego.

Polega on na sprawdzaniu, czy kolejne elementy zbioru są szukaną liczbą. Możemy wyróżnić najprostszą wersję algorytmu oraz jego modyfikację – algorytm wyszukiwania liniowego z wartownikiem.

Specyfikacja problemu:

Dane:

  • n – liczba naturalna; liczba elementów w tablicy tablica

  • tablican-elementowa tablica liczb naturalnych

  • szukana – liczba naturalna

Wynik:

  • komunikat wskazujący indeks, pod którym znajduje się szukana liczba lub informujący, że w tablicy nie ma szukanej liczby

Wyszukiwanie liniowe bez wartownika

Zapiszmy nagłówek funkcji. Przyjmuje ona trzy argumenty – tablicę liczb, szukany element oraz liczbę elementów tablicy.

Na początku przypisujemy dwóm zmiennym pomocniczym odpowiednie wartości. Zmiennej znaleziono przypisujemy wartość fałsz, a zmiennej i wartość 0.

W kolejnym kroku zapisujemy pętlę dopóki. Będzie się ona wykonywać tak długo, jak długo będą spełnione dwa warunki – zmienna znaleziono będzie przechowywać wartość logiczną fałsz oraz wartość zmiennej i będzie mniejsza od długości tablicy, czyli wartości zmiennej n.

W pętli zapisujemy warunek logiczny jeżeli. Będziemy sprawdzać, czy wartość i-tego elementu tablicy jest równa szukanej liczbie  – jeżeli tak, wypiszemy odpowiedni komunikat, przypiszemy zmiennej znaleziono wartość prawda i zakończymy działanie algorytmu; jeżeli nie, zwiększymy wartość zmiennej i o 1.

W sytuacji, gdy po wyjściu z pętli dopóki wartością zmiennej znaleziono będzie fałsz, wypiszemy komunikat, że szukana liczba nie została znaleziona.

Linia 1. funkcja wyszukiwanie podkreślnik liniowe otwórz nawias okrągły tablica przecinek szukana przecinek n zamknij nawias okrągły. Linia 2. znaleziono ← fałsz. Linia 3. i ← 0. Linia 4. dopóki znaleziono wykrzyknik znak równości prawda oraz i otwórz nawias ostrokątny n wykonuj dwukropek. Linia 5. jeżeli tablica otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości szukana. Linia 6. wypisz cudzysłów Znaleziono liczbę na pozycji cudzysłów plus i. Linia 7. znaleziono ← prawda. Linia 8. zakończ działanie pętli. Linia 9. i ← i plus 1. Linia 11. jeśli znaleziono znak równości fałsz. Linia 12. wypisz cudzysłów Nie znaleziono szukanej liczby cudzysłów.

Operacjami, które najbardziej wpływają na złożoność tego algorytmu, są operacje porównania (wykonujące się w pętli dopóki). Dla n liczb może się ich wykonać, zależnie od ułożenia danych, od 1 do n, ponieważ w najgorszym wypadku musimy sprawdzić wszystkie liczby. Zatem złożoność czasowa tego algorytmu to On.

Wyszukiwanie liniowe z wartownikiem

Wartownika dodajemy na początku lub na końcu tablicy. Zależnie od implementacji może to być zarówno liczba, która nie występuje w tablicy, jak i wartość szukana.

Przedstawimy wersję, w której wartownik jest szukaną liczbą. Umieścimy go na końcu tablicy.

Zapiszmy nagłówek funkcji. Ponownie przyjmuje ona trzy argumenty – tablicę liczb, szukany element oraz liczbę elementów tablicy.

Na początku umieszczamy wartownika na końcu tablicy, a zmiennej pomocniczej i przypisujemy wartość 0.

W kolejnym kroku zapisujemy pętlę dopóki. Będzie się wykonywać tak długo, jak długo wartość i-tego elementu tablicy będzie różna od szukanej liczby.

W każdej iteracji pętli będziemy zwiększać wartość zmiennej pomocniczej o 1.

Zapisujemy warunek logiczny jeżeli. Będziemy sprawdzać, czy wartość zmiennej jest mniejsza od różnicy długości tablicy oraz liczby 1. Jeśli tak, wypiszemy odpowiedni komunikat mówiący o tym, że szukana liczba została znaleziona pod indeksem równym i. W przeciwnym wypadku wypiszemy komunikat mówiący o tym, że szukana liczba nie została znaleziona.

Linia 1. funkcja wyszukiwanie podkreślnik liniowe podkreślnik wartownik otwórz nawias okrągły tablica przecinek szukana przecinek n zamknij nawias okrągły. Linia 2. tablica otwórz nawias kwadratowy n zamknij nawias kwadratowy ← szukana. Linia 3. i ← 0. Linia 5. dopóki tablica otwórz nawias kwadratowy i zamknij nawias kwadratowy wykrzyknik znak równości szukana wykonuj dwukropek. Linia 6. i ← i plus 1. Linia 8. jeśli i otwórz nawias ostrokątny n minus 1 dwukropek. Linia 9. wypisz cudzysłów Znaleziono liczbę na pozycji cudzysłów plus i. Linia 10. w przeciwnym przypadku dwukropek. Linia 11. wypisz cudzysłów Nie znaleziono szukanej liczby cudzysłów.

Ponownie operacjami, które najbardziej wpływają na złożoność tego algorytmu, są operacje porównania (wykonujące się w pętli dopóki). Może się ich wykonać, zależnie od ułożenia danych, od 1 do n. Zatem złożoność czasowa tego algorytmu to również On. Zwróćmy jednak uwagę na to, że poprzez dodanie wartownika wyeliminowaliśmy konieczność sprawdzania przy każdym kolejnym elemencie, czy nie przekroczyliśmy rozmiaru tablicy – zredukowaliśmy zatem liczbę instrukcji.

Polecenie 1

Porównaj ze sobą dwie implementacje. Jakie dostrzegasz różnice? Czy potrafisz wskazać korzyści związane z wykorzystaniem wartownika?