Algoritem iskanja po več elementih (Multiple-Item Search) v C++ – razlaga, primer in koda

Algoritem iskanja po več elementih se uporablja za iskanje vseh pojavitev določenega elementa na seznamu. Za razliko od algoritmov iskanja po enem elementu ta pristop spremlja več pojavitev ciljnega elementa in vrne seznam njihovih položajev.

Kako deluje

  1. Začnite od začetka seznama.
  2. Ponavljajte skozi vsak element na seznamu.
  3. Primerjajte trenutni element s ciljno vrednostjo.
  4. Če je trenutni element enak ciljni vrednosti, zabeležite njegov položaj.
  5. Nadaljujte do naslednjega elementa in ponovite korake 3-4.
  6. Po ponovitvi celotnega seznama vrnite seznam zabeleženih položajev.

Primer

Oglejmo si seznam celih števil in želimo najti vse pojavitve števila 23.

Seznam: {12, 23, 45, 23, 56, 23, 89, 90}

  1. Začni od začetka: 12. Ni želeno število.
  2. Premakni se na naslednji element: 23. Ujemanje najdeno, zapiši položaj kot 1.
  3. Premakni se na naslednji element: 45. Ni želena številka.
  4. Premakni se na naslednji element: 23. Ujemanje najdeno, zapiši položaj kot 3.
  5. Premakni se na naslednji element: 56. Ni želena številka.
  6. Premakni se na naslednji element: 23. Ujemanje najdeno, zapiši položaj kot 5.
  7. Premakni se na naslednji element: 89. Ni želena številka.
  8. Premakni se na naslednji element: 90. Ni želena številka.
  9. Po ponavljanju vrni seznam položajev: [1, 3, 5].

Primer kode v C++

#include <iostream>  
#include <vector>  
  
std::vector<int> multipleItemSearch(const std::vector<int>& arr, int target) {  
    std::vector<int> positions;  
  
    for(int i = 0; i < arr.size(); ++i) {  
        if(arr[i] == target) {  
            positions.push_back(i);  
        }  
    }  
  
    return positions;  
}  
  
int main() {  
    std::vector<int> numbers = {12, 23, 45, 23, 56, 23, 89, 90};  
    int target = 23;  
  
    std::vector<int> result = multipleItemSearch(numbers, target);  
  
    std::cout << "Occurrences of " << target << " found at positions: ";  
    for(int pos: result) {  
        std::cout << pos << ";  
    }  
    std::cout << std::endl;  
  
    return 0;  
}  

V danem primeru multipleItemSearch je funkcija uporabljena za iskanje vseh pojavitev števila 23 na seznamu celih števil. Rezultat bo vektor, ki vsebuje položaje vseh pojavitev(položaji se začnejo z 0).