მრავალი ელემენტის ძიების (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-დან).