Algoritm de căutare cu mai multe articole (Multiple-Item Search) în C++- Explicație, Exemplu și Cod

Algoritmul de căutare cu mai multe elemente este utilizat pentru a găsi toate aparițiile unui anumit element dintr-o listă. Spre deosebire de algoritmii de căutare cu un singur articol, această abordare ține evidența aparițiilor multiple ale elementului țintă și returnează o listă a pozițiilor acestora.

Cum functioneaza

  1. Începeți de la începutul listei.
  2. Repetați fiecare element din listă.
  3. Comparați elementul curent cu valoarea țintă.
  4. Dacă elementul curent este egal cu valoarea țintă, înregistrați-i poziția.
  5. Continuați cu următorul element și repetați pașii 3-4.
  6. După ce parcurgeți întreaga listă, întoarceți lista de poziții înregistrate.

Exemplu

Să luăm în considerare o listă de numere întregi și vrem să găsim toate aparițiile numărului 23.

Listă: {12, 23, 45, 23, 56, 23, 89, 90}

  1. Începeți de la început: 12. Nu este numărul dorit.
  2. Treceți la următorul element: 23. Potrivire găsită, înregistrați poziția ca 1.
  3. Treceți la următorul element: 45. Nu este numărul dorit.
  4. Treceți la următorul element: 23. Potrivire găsită, înregistrați poziția ca 3.
  5. Treceți la următorul element: 56. Nu este numărul dorit.
  6. Treceți la următorul element: 23. Potrivire găsită, înregistrați poziția ca 5.
  7. Treceți la următorul element: 89. Nu este numărul dorit.
  8. Treceți la următorul element: 90. Nu este numărul dorit.
  9. După iterare, returnați o listă de poziții: [1, 3, 5].

Exemplu de cod în 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;  
}  

În exemplul dat, multipleItemSearch funcția este folosită pentru a găsi toate aparițiile numărului 23 într-o listă de numere întregi. Rezultatul va fi un vector care conține pozițiile tuturor aparițiilor(pozițiile încep de la 0).