Több elemből álló keresési (Multiple-Item Search) algoritmus C++ nyelven – magyarázat, példa és kód

A több elemből álló keresési algoritmus a lista egy adott elemének minden előfordulását megkeresi. Az egyelemes keresési algoritmusokkal ellentétben ez a megközelítés nyomon követi a célelem többszöri előfordulását, és visszaadja a pozícióik listáját.

Hogyan működik

  1. Kezdje a lista elejétől.
  2. Ismételje meg a lista minden elemét.
  3. Hasonlítsa össze az aktuális elemet a célértékkel.
  4. Ha az aktuális elem megegyezik a célértékkel, rögzítse a pozícióját.
  5. Folytassa a következő elemmel, és ismételje meg a 3-4.
  6. A teljes lista iterációja után adja vissza a rögzített pozíciók listáját.

Példa

Tekintsük az egész számok listáját, és meg akarjuk találni a 23 szám összes előfordulását.

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

  1. Kezdje elölről: 12. Nem a kívánt szám.
  2. Ugrás a következő elemre: 23. Egyezés található, a pozíció rögzítése 1-ként.
  3. Ugrás a következő elemre: 45. Nem a kívánt szám.
  4. Ugrás a következő elemre: 23. Talált egyezés, rögzítse a pozíciót 3-asként.
  5. Ugrás a következő elemre: 56. Nem a kívánt szám.
  6. Ugrás a következő elemre: 23. Talált egyezés, a pozíció rögzítése 5-ként.
  7. Ugrás a következő elemre: 89. Nem a kívánt szám.
  8. Ugrás a következő elemre: 90. Nem a kívánt szám.
  9. Az iteráció után adja vissza a pozíciók listáját: [1, 3, 5].

Példakód C++ nyelven

#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;  
}  

Az adott példában a multipleItemSearch függvényt arra használjuk, hogy megkeressük a 23-as szám összes előfordulását egy egész számok listájában. Az eredmény egy vektor lesz, amely tartalmazza az összes előfordulás helyét(a pozíciók 0-tól kezdődnek).