Usean kohteen hakualgoritmia käytetään etsimään kaikki tietyn elementin esiintymät luettelosta. Toisin kuin yhden kohteen hakualgoritmit, tämä lähestymistapa pitää kirjaa kohdeelementin useista esiintymisistä ja palauttaa luettelon niiden paikoista.
Kuinka se toimii
- Aloita luettelon alusta.
- Iteroi jokaisen luettelon elementin läpi.
- Vertaa nykyistä elementtiä tavoitearvoon.
- Jos nykyinen elementti on yhtä suuri kuin tavoitearvo, tallenna sen sijainti.
- Jatka seuraavaan elementtiin ja toista vaiheet 3-4.
- Kun olet käynyt läpi koko luettelon, palauta tallennettujen paikkojen luettelo.
Esimerkki
Tarkastellaan kokonaislukujen luetteloa ja haluamme löytää kaikki luvun 23 esiintymät.
Luettelo: {12, 23, 45, 23, 56, 23, 89, 90}
- Aloita alusta: 12. Ei haluttu numero.
- Siirry seuraavaan elementtiin: 23. Osuma löydetty, tallennepaikka on 1.
- Siirry seuraavaan elementtiin: 45. Ei haluttu numero.
- Siirry seuraavaan elementtiin: 23. Osuma löydetty, tallennepaikka on 3.
- Siirry seuraavaan elementtiin: 56. Ei haluttu numero.
- Siirry seuraavaan elementtiin: 23. Osuma löydetty, tallennepaikka on 5.
- Siirry seuraavaan elementtiin: 89. Ei haluttu numero.
- Siirry seuraavaan elementtiin: 90. Ei haluttu numero.
- Palauta iteroinnin jälkeen luettelo paikoista: [1, 3, 5].
Esimerkkikoodi C++:ssa
#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;
}
Annetussa esimerkissä multipleItemSearch
funktiota käytetään etsimään kaikki luvun 23 esiintymät kokonaislukuluettelosta. Tuloksena on vektori, joka sisältää kaikkien esiintymien paikat(paikat alkavat 0:sta).