خوارزمية البحث عن عناصر متعددة (Multiple-Item Search) في C++- الشرح والمثال والكود

يتم استخدام خوارزمية البحث متعدد العناصر للعثور على كافة تكرارات عنصر معين في القائمة. على عكس خوارزميات البحث عن عنصر واحد، يقوم هذا الأسلوب بتتبع التكرارات المتعددة للعنصر المستهدف وإرجاع قائمة بمواضعها.

كيف تعمل

  1. ابدأ من بداية القائمة.
  2. التكرار من خلال كل عنصر في القائمة.
  3. قارن العنصر الحالي بالقيمة المستهدفة.
  4. إذا كان العنصر الحالي يساوي القيمة المستهدفة، فقم بتسجيل موضعه.
  5. انتقل إلى العنصر التالي وكرر الخطوات من 3 إلى 4.
  6. بعد تكرار القائمة بأكملها، قم بإرجاع قائمة المواضع المسجلة.

مثال

دعونا نفكر في قائمة الأعداد الصحيحة ونريد العثور على جميع تواجدات الرقم 23.

القائمة: {12، 23، 45، 23، 56، 23، 89، 90}

  1. ابدأ من البداية: 12. ليس العدد المطلوب.
  2. انتقل إلى العنصر التالي: 23. تم العثور على تطابق، سجل الموضع كـ 1.
  3. انتقل إلى العنصر التالي: 45. ليس الرقم المطلوب.
  4. انتقل إلى العنصر التالي: 23. تم العثور على تطابق، سجل الموضع كـ 3.
  5. انتقل إلى العنصر التالي: 56. ليس الرقم المطلوب.
  6. انتقل إلى العنصر التالي: 23. تم العثور على تطابق، سجل الموضع كـ 5.
  7. انتقل إلى العنصر التالي: 89. ليس الرقم المطلوب.
  8. انتقل إلى العنصر التالي: 90. ليس الرقم المطلوب.
  9. بعد التكرار، قم بإرجاع قائمة المواضع: [1، 3، 5].

رمز المثال في 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;  
}  

في المثال الموضح، multipleItemSearch يتم استخدام الدالة للعثور على كافة تكرارات الرقم 23 في قائمة الأعداد الصحيحة. ستكون النتيجة متجهًا يحتوي على مواضع جميع الأحداث(تبدأ المواضع من 0).