কম্পিউটার টিউটোরিয়াল

C++-এ পিথ্রেডস (pthreads) ব্যবহার করে খুব বড় অ্যারেতে সর্বোচ্চ উপাদান


সমস্যা বিবরণ

খুব বড় একটি ইন্টিজার অ্যারে দেওয়া আছে, মাল্টিথ্রেডিং ব্যবহার করে অ্যারেতে সর্বোচ্চ উপাদান বের করুন।

উদাহরণ

ইনপুট অ্যারে যদি {10, 14, -10, 8, 25, 46, 85, 1673, 63, 65, 93, 101, 125, 50, 73, 548} হয়, তবে

এই অ্যারেতে সর্বোচ্চ উপাদান হলো 1673

অ্যালগরিদম

  • অ্যারে সাইজকে total_elements ধরি
  • Nটি থ্রেড তৈরি করুন
  • প্রতিটি থ্রেড (total_elements/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. C++-এ মিন হিপে সর্বোচ্চ উপাদান

  2. C++-এ STL ব্যবহার করে অ্যারের ম্যাক্সিমাম এলিমেন্ট বের করা

  3. C++ STL-এ accumulate দিয়ে অ্যারে প্রোডাক্ট বের করা

  4. বাইনারি সার্চ ব্যবহার করে অ্যারেতে সর্বাধিক উপাদান খুঁজে বের করার C++ প্রোগ্রাম