อัลกอริทึม การค้นหาหลายรายการ (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)