C++'da Çok Öğeli Arama (Multiple-Item Search) Algoritması- Açıklama, Örnek ve Kod

Çoklu öğe arama algoritması, bir listedeki belirli bir öğenin tüm oluşumlarını bulmak için kullanılır. Tek öğeli arama algoritmalarından farklı olarak, bu yaklaşım hedef öğenin birden çok oluşumunu izler ve konumlarının bir listesini döndürür.

Nasıl çalışır

  1. Listenin başından başlayın.
  2. Listedeki her öğeyi yineleyin.
  3. Geçerli öğeyi hedef değerle karşılaştırın.
  4. Geçerli öğe hedef değere eşitse, konumunu kaydedin.
  5. Bir sonraki öğeye geçin ve 3-4. adımları tekrarlayın.
  6. Tüm listeyi yineledikten sonra, kaydedilen konumların listesine geri dönün.

Örnek

Bir tamsayı listesi ele alalım ve 23 sayısının tüm oluşumlarını bulmak istiyoruz.

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

  1. Baştan başlayın: 12. İstenen sayı değil.
  2. Sonraki öğeye git: 23. Eşleşme bulundu, konumu 1 olarak kaydet.
  3. Sonraki öğeye git: 45. İstenen sayı değil.
  4. Sonraki öğeye git: 23. Eşleşme bulundu, pozisyonu 3 olarak kaydet.
  5. Sonraki öğeye git: 56. İstenen sayı değil.
  6. Sonraki öğeye git: 23. Eşleşme bulundu, pozisyonu 5 olarak kaydet.
  7. Sonraki öğeye git: 89. İstenen sayı değil.
  8. Sonraki öğeye git: 90. İstenen sayı değil.
  9. Yinelemeden sonra, bir konum listesi döndürün: [1, 3, 5].

C++'da Örnek Kod

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

Verilen örnekte, multipleItemSearch fonksiyon bir tamsayılar listesinde 23 sayısının tüm oluşumlarını bulmak için kullanılmıştır. Sonuç, tüm oluşumların konumlarını içeren bir vektör olacaktır(konumlar 0'dan başlar).