Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में pthreads का उपयोग करके एक बहुत बड़ी सरणी में अधिकतम तत्व

समस्या कथन

पूर्णांकों की एक बहुत बड़ी सरणी को देखते हुए, मल्टीथ्रेडिंग का उपयोग करके सरणी के भीतर अधिकतम खोजें

उदाहरण

अगर इनपुट ऐरे {10, 14, -10, 8, 25, 46, 85, 1673, 63, 65, 93, 101, 125, 50, 73, 548} है तो

इस सरणी में अधिकतम तत्व 1673 है

एल्गोरिदम

  • आइए हम सरणी आकार को Total_elements कहते हैं
  • एन थ्रेड बनाएं
  • प्रत्येक थ्रेड (total_elementes/N) सरणी तत्वों को संसाधित करेगा और उसमें से अधिकतम तत्व ढूंढेगा।
  • अंत में प्रत्येक थ्रेड द्वारा रिपोर्ट किए गए अधिकतम मान से अधिकतम की गणना करें।

उदाहरण

#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <limits.h>
#define MAX 10
#define SIZE(arr) (sizeof(arr) / sizeof(arr[0])) typedef struct struct_max {
   int start;
   int end;
   int thread_num;
} struct_max;
int arr[] = {10, 14, -10, 8, 25, 46, 85, 1673, 63, 65, 93, 101, 125, 50, 73, 548};
int max_values_from_threds[MAX];
void *thread_fun(void *arg) {
   struct_max *s_max = (struct_max*)arg;
   int start = s_max->start;
   int end = s_max->end;
   int thread_num = s_max->thread_num;
   int cur_max_value = INT_MIN;
   for (int i = start; i < end; ++i) {
      if (arr[i] > cur_max_value) {
         cur_max_value = arr[i];
      }
   }
   max_values_from_threds[thread_num] = cur_max_value;
   return NULL;
}
int main() {
   int total_elements = SIZE(arr);
   int n_threads = 4;
   struct_max thread_arr[4];
   for (int i = 0; i < 4; ++i) {
      thread_arr[i].thread_num = i + 1;
      thread_arr[i].start = i * 4;
      thread_arr[i].end = thread_arr[i].start + 4;
   }
   pthread_t threads[4];
   for (int i = 0; i < 4; ++i) {
      pthread_create(&threads[i], NULL, thread_fun, &thread_arr[i]);
   }
   for (int i = 0; i < 4; ++i) {
      pthread_join(threads[i], NULL);
   }
   int final_max_val = max_values_from_threds[0];
   for (int i = 0; i < n_threads; ++i) {
      if (max_values_from_threds[i] > final_max_val) {
         final_max_val = max_values_from_threds[i];
      }
   }
   printf("Maximum value = %d\n", final_max_val);
   return 0;
}

आउटपुट

जब आप उपरोक्त प्रोग्राम को संकलित और निष्पादित करते हैं। यह निम्नलिखित आउटपुट उत्पन्न करता है -

Maximum value = 1673

  1. सी ++ में एसटीएल का उपयोग कर ऐरे का अधिकतम तत्व कैसे खोजें?

    यहां हम देखेंगे कि अधिकतम तत्व कैसे खोजें। तो अगर सरणी [12, 45, 74, 32, 66, 96, 21, 32, 27] की तरह है, तो अधिकतम तत्व 96 है। हम एल्गोरिदम में मौजूद max_element () फ़ंक्शन का उपयोग कर सकते हैं। प्राप्त करने के लिए हेडर फ़ाइल अधिकतम तत्व। उदाहरण #include<iostream> #include<algorithm> using

  1. एसटीएल का उपयोग कर सी ++ में ऐरे उत्पाद

    यह ऐरे उत्पाद का पता लगाने के लिए C++ प्रोग्राम का एक उदाहरण है। एल्गोरिदम Begin Initialize the values of array. Call used defined function accumulate to return the product of array. Print the solution. End. उदाहरण कोड #include <iostream> #include <numeric> using namespace std;

  1. सी ++ प्रोग्राम बाइनरी सर्च का उपयोग करके एक ऐरे में अधिकतम तत्व खोजने के लिए

    बाइनरी सर्च ट्री का उपयोग करके किसी सरणी के अधिकतम तत्व को खोजने के लिए यह एक सी ++ प्रोग्राम है। इस कार्यक्रम की समय जटिलता O(log(n)) है। एल्गोरिदम Begin Construct the Binary Search Tree using the given data elements. Next traverse the root pointer to the rightmost child node available. Pr