Algoritam pretraživanja više stavki (Multiple-Item Search) u C++- objašnjenje, primjer i kod

Algoritam pretraživanja višestrukih stavki koristi se za pronalaženje svih pojavljivanja određenog elementa na popisu. Za razliku od algoritama pretraživanja jedne stavke, ovaj pristup prati više pojavljivanja ciljnog elementa i vraća popis njihovih pozicija.

Kako radi

  1. Počnite od početka popisa.
  2. Iterirajte kroz svaki element na popisu.
  3. Usporedite trenutni element s ciljnom vrijednošću.
  4. Ako je trenutni element jednak ciljanoj vrijednosti, zabilježite njegovu poziciju.
  5. Nastavite do sljedećeg elementa i ponovite korake 3-4.
  6. Nakon ponavljanja kroz cijeli popis, vratite popis snimljenih pozicija.

Primjer

Razmotrimo popis cijelih brojeva i želimo pronaći sva pojavljivanja broja 23.

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

  1. Kreni ispočetka: 12. Nije željeni broj.
  2. Prijeđi na sljedeći element: 23. Podudaranje pronađeno, zabilježi poziciju kao 1.
  3. Prijeđi na sljedeći element: 45. Nije željeni broj.
  4. Prelazak na sljedeći element: 23. Podudaranje pronađeno, zabilježite poziciju kao 3.
  5. Prijeđi na sljedeći element: 56. Nije željeni broj.
  6. Prijeđi na sljedeći element: 23. Podudaranje pronađeno, zabilježi poziciju kao 5.
  7. Prijeđi na sljedeći element: 89. Nije željeni broj.
  8. Prijeđi na sljedeći element: 90. Nije željeni broj.
  9. Nakon ponavljanja, vratite popis pozicija: [1, 3, 5].

Primjer koda u 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;  
}  

U navedenom primjeru multipleItemSearch funkcija se koristi za pronalaženje svih pojavljivanja broja 23 na popisu cijelih brojeva. Rezultat će biti vektor koji sadrži položaje svih pojavljivanja(pozicije počinju od 0).