Kelių elementų paieškos (Multiple-Item Search) algoritmas C++ – paaiškinimas, pavyzdys ir kodas

Kelių elementų paieškos algoritmas naudojamas norint rasti visus konkretaus sąrašo elemento atvejus. Skirtingai nuo vieno elemento paieškos algoritmų, šis metodas stebi kelis tikslinio elemento įvykius ir pateikia jų pozicijų sąrašą.

Kaip tai veikia

  1. Pradėkite nuo sąrašo pradžios.
  2. Pakartokite kiekvieną sąrašo elementą.
  3. Palyginkite esamą elementą su tiksline reikšme.
  4. Jei dabartinis elementas yra lygus tikslinei vertei, užrašykite jo padėtį.
  5. Pereikite prie kito elemento ir pakartokite 3–4 veiksmus.
  6. Pakartoję visą sąrašą, grąžinkite įrašytų pozicijų sąrašą.

Pavyzdys

Panagrinėkime sveikųjų skaičių sąrašą ir norime rasti visus skaičiaus 23 atvejus.

Sąrašas: {12, 23, 45, 23, 56, 23, 89, 90}

  1. Pradėkite nuo pradžių: 12. Ne norimas skaičius.
  2. Pereiti prie kito elemento: 23. Atitiktis rasta, įrašyti poziciją kaip 1.
  3. Pereikite prie kito elemento: 45. Ne norimas skaičius.
  4. Pereiti prie kito elemento: 23. Atitiktis rasta, įrašyti poziciją kaip 3.
  5. Pereikite prie kito elemento: 56. Ne norimas skaičius.
  6. Pereiti prie kito elemento: 23. Atitiktis rasta, įrašyti poziciją kaip 5.
  7. Pereikite prie kito elemento: 89. Ne norimas skaičius.
  8. Pereikite prie kito elemento: 90. Ne norimas skaičius.
  9. Po iteracijos grąžinkite pozicijų sąrašą: [1, 3, 5].

Kodo pavyzdys 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;  
}  

Pateiktame pavyzdyje funkcija multipleItemSearch naudojama norint rasti visus skaičiaus 23 atvejus sveikųjų skaičių sąraše. Rezultatas bus vektorius, kuriame yra visų įvykių vietos(padėtys prasideda nuo 0).