Algorithm ya Utafutaji wa Vipengee Nyingi (Multiple-Item Search) katika C++- Maelezo, Mfano na Msimbo

Algorithm ya utafutaji wa vipengee vingi hutumiwa kupata matukio yote ya kipengele maalum katika orodha. Tofauti na algoriti za utafutaji za kipengee kimoja, mbinu hii hufuatilia matukio mengi ya kipengele lengwa na kurudisha orodha ya nafasi zao.

Inavyofanya kazi

  1. Anza kutoka mwanzo wa orodha.
  2. Rudia kupitia kila kipengele kwenye orodha.
  3. Linganisha kipengele cha sasa na thamani inayolengwa.
  4. Ikiwa kipengele cha sasa ni sawa na thamani inayolengwa, rekodi nafasi yake.
  5. Endelea kwenye kipengele kinachofuata na kurudia hatua 3-4.
  6. Baada ya kurudia orodha nzima, rudisha orodha ya nafasi zilizorekodiwa.

Mfano

Wacha tuchunguze orodha ya nambari kamili na tunataka kupata matukio yote ya nambari 23.

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

  1. Anza tangu mwanzo: 12. Sio nambari inayotakiwa.
  2. Nenda kwenye kipengele kinachofuata: 23. Inayolingana imepatikana, rekodi nafasi kama 1.
  3. Nenda kwa kipengele kinachofuata: 45. Sio nambari inayotakiwa.
  4. Nenda kwenye kipengele kinachofuata: 23. Inayolingana imepatikana, rekodi nafasi kama 3.
  5. Nenda kwenye kipengele kinachofuata: 56. Sio nambari inayotakiwa.
  6. Nenda kwenye kipengele kinachofuata: 23. Inayolingana imepatikana, rekodi nafasi kama 5.
  7. Nenda kwenye kipengele kinachofuata: 89. Sio nambari inayotakiwa.
  8. Nenda kwenye kipengele kinachofuata: 90. Sio nambari inayotakiwa.
  9. Baada ya kurudia, rudisha orodha ya nafasi: [1, 3, 5].

Msimbo wa Mfano katika 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;  
}  

Katika mfano uliotolewa, multipleItemSearch chaguo la kukokotoa linatumika kupata matukio yote ya nambari 23 katika orodha ya nambari kamili. Matokeo yake yatakuwa vekta iliyo na nafasi za matukio yote(nafasi huanza kutoka 0).