Twoje Centrum Szkoleniowe

Nauczmy się dziś czegoś nowego!

Kurs programowania - C++

C++: Wyszukiwanie liniowe (Linear Search)

Wyszukiwanie liniowe, znane również jako poszukiwanie sekwencyjne, jest jedną z najprostszych metod przeszukiwania danych. Ta technika polega na przeglądaniu każdego elementu w zbiorze danych, jeden po drugim, aż do znalezienia szukanego elementu lub przeszukania całej kolekcji. Jedną z kluczowych zalet wyszukiwania liniowego jest jego uniwersalność - można je stosować w przypadku każdego rodzaju danych, niezależnie od ich struktury czy kolejności.

 

Implementacja wyszukiwania liniowego w C++

 

Krok po kroku: proces Implementacji

Implementacja wyszukiwania liniowego w C++ jest stosunkowo prosta i składa się z kilku kluczowych etapów:

  1. Deklaracja funkcji: Na początku tworzymy funkcję, która będzie przeszukiwać tablicę w poszukiwaniu określonej wartości. Funkcja ta przyjmuje tablicę (lub wektor) oraz wartość do wyszukania jako swoje argumenty.

  2. Przejście przez tablicę: Następnie, za pomocą pętli for lub while, przeglądamy każdy element tablicy, porównując go z szukaną wartością.

  3. Zwrócenie wyniku: Jeśli znajdziemy szukaną wartość, zwracamy jej indeks. Jeśli przeszukamy całą tablicę i nie znajdziemy wartości, zwracamy sygnał, że wartość nie została odnaleziona (na przykład -1).

 

Przykładowy kod

#include <iostream>
using namespace std;

int linearSearch(int arr[], int n, int x) {
    for (int i = 0; i < n; i++) {
        if (arr[i] == x)
            return i;
    }
    return -1;
}

int main() {
    int arr[] = {2, 4, 0, 1, 9};
    int x = 1;
    int n = sizeof(arr) / sizeof(arr[0]);
    
    int result = linearSearch(arr, n, x);
    (result == -1) ? cout << "Element not found" : cout << "Element found at index: " << result;
    return 0;
}

 

Analiza kodu

  • Pętla przeszukiwania: Pętla for w funkcji linearSearch przechodzi przez każdy element tablicy. Jest to główny mechanizm przeszukiwania.

  • Instrukcja warunkowa: Warunek if (arr[i] == x) sprawdza, czy bieżący element tablicy jest równy szukanej wartości.

  • Zwracanie wyników: Funkcja zwraca indeks elementu, gdy zostanie znaleziony (co kończy działanie pętli), lub -1, gdy element nie występuje w tablicy.

 

 

Optymalizacje i warianty wyszukiwania liniowego

 

Poprawa wydajności
  1. Wczesne zatrzymywanie: Jednym ze sposobów na poprawę wydajności wyszukiwania liniowego jest zatrzymanie procesu przeszukiwania, gdy tylko znajdziemy poszukiwany element. W standardowej implementacji, wyszukiwanie kontynuuje przeglądanie danych nawet po odnalezieniu elementu, co może być nieefektywne.

  2. Wyszukiwanie z wartownikiem: W tej wersji algorytmu, wartość poszukiwana jest dodawana na końcu tablicy jako 'wartownik'. Dzięki temu, w procesie przeszukiwania, nie jest konieczne sprawdzanie, czy doszliśmy do końca tablicy. To eliminuje jedno z porównań w każdej iteracji pętli, co może przyspieszyć wyszukiwanie w dużych zbiorach danych.

 

Warianty metody

Istnieją różne warianty wyszukiwania liniowego, które mogą być stosowane w zależności od specyficznych wymagań i kontekstu zastosowania:

  1. Wyszukiwanie dwukierunkowe: Ta metoda polega na jednoczesnym przeszukiwaniu danych od początku i końca tablicy. Może to być korzystne w przypadku, gdy istnieje większe prawdopodobieństwo znalezienia poszukiwanego elementu bliżej końców niż środka tablicy.

  2. Wyszukiwanie skokowe: Jest to metoda, która polega na przeskakiwaniu o określoną liczbę elementów w każdej iteracji, co może przyspieszyć lokalizowanie szukanej wartości w niektórych przypadkach. Należy jednak pamiętać, że ten sposób może pominąć szukany element i jest zalecany głównie w specyficznych sytuacjach.

 

 

Złożoność czasowa

Kiedy analizujemy wyszukiwanie liniowe pod kątem złożoności czasowej, kluczowym aspektem jest zrozumienie, że jego wydajność jest bezpośrednio proporcjonalna do liczby elementów w zbiorze danych. W kontekście złożoności obliczeniowej, wyszukiwanie liniowe ma złożoność O(n), gdzie 'n' to liczba elementów w tablicy. Oznacza to, że w najgorszym przypadku, kiedy poszukiwany element znajduje się na samym końcu tablicy lub nie występuje w niej wcale, algorytm będzie musiał przejrzeć każdy element.

W praktyce, średni czas wyszukiwania zależy od położenia szukanego elementu. Jeśli element znajduje się bliżej początku listy, wyszukiwanie będzie szybsze. Natomiast, jeśli element jest bliżej końca lub nie występuje w ogóle, czas wyszukiwania wydłuża się. 

Testy przypięte do lekcji
Aby uzyskać dostęp do testów i ćwiczeń interaktywnych - Zaloguj się
Aby widzieć ocenę lekcji - Zaloguj się