কম্পিউটার

C++ প্রোগ্রামে একটি অ্যারের সর্বাধিক পণ্য উপসেট


সমস্যাতে, আমাদেরকে n পূর্ণসংখ্যার মানের একটি অ্যারে অ্যারে দেওয়া হয়েছে। আমাদের কাজ হল একটি অ্যারের সর্বাধিক পণ্য উপসেট খুঁজে পেতে একটি প্রোগ্রাম তৈরি করা৷

সমস্যা বর্ণনা − এখানে, আমাদের একটি অ্যারের উপাদানগুলির একটি উপসেটের সর্বাধিক সম্ভাব্য গুণফল গণনা করতে হবে৷

সাবসেট − একটি অ্যারে সাব[] অ্যারে অ্যারের একটি উপসেট [] যদি সাব[] এর সমস্ত উপাদান arr[] এ উপস্থিত থাকে।

সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,

ইনপুট

arr[] = {4, 5, 2, −1, 3}

আউটপুট

40

ব্যাখ্যা

Subset sub[] = {4, 5, 2}
Prod = 4*5*2 = 40

সমাধান পদ্ধতি

সমস্যা সমাধানের জন্য একটি সহজ এবং সহজ পদ্ধতি হল অ্যারের সমস্ত সম্ভাব্য উপসেট তৈরি করা। তাদের পণ্যগুলি খুঁজুন এবং তাদের সর্বাধিক ফেরত দিন৷

এই সমাধানটি বাস্তবায়ন করা সহজ কিন্তু O(n 2 ) এর ক্রমকে জটিল করে তুলতে নেস্টেড লুপগুলির প্রয়োজন *n)।

এখানে বাস্তবায়নের চেষ্টা করুন।

কার্যকর সমাধান অ্যারে থেকে নেগেটিভ’স(nofNeg) এবং শূন্যের (nof0) সংখ্যা গণনা করে এবং তারপর এই শর্তগুলির উপর ভিত্তি করে maxProd গণনা করে৷

কেস 1 (nof0 =0 এবং nofNeg সমান)− পণ্যের অ্যারের সমস্ত উপাদান বিবেচনা করুন৷

maxProd =arr[0] * arr[1] * … arr[n−1]

কেস 2 (nof0 =0 এবং nofNeg বিজোড়)− অ্যারের বৃহত্তম নেতিবাচক উপাদান (0-এর কাছাকাছি) ছাড়া অ্যারের সমস্ত উপাদান বিবেচনা করুন।

কেস 3 (nof0 !=0)− পণ্যের জন্য অ্যারের সমস্ত শূন্য ছেড়ে দিন। এবং কেস 1 এবং 2 এর মতো কেস নিন।

বিশেষ মামলা − 0 ছাড়া শুধুমাত্র একটি উপাদান ঋণাত্মক। maxProd =0.

অ্যালগরিদম

শুরু করুন

maxProd = 1;

ধাপ 1

Loop the array and count, nof0(number of zeros) and
nofNeg(number of negatives), and find maxProd.
maxProd = maxProd*arr[i], i −> 0 to n−1

ধাপ 2

consider the following cases −
Case 1− if(nofNeg%2 == 0): maxProd
Case 2− if(nofNeg%2 != 0): maxProd = maxProd/(largestNeg)
Case 3 − if(nof0 == (n-1) and nofNeg == 1), maxProd = 0.

ধাপ 3

Print maxProd.

উদাহরণ

আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম,

#include <iostream>
using namespace std;
int findMaxSubsetProd(int arr[], int n){
   int larNeg = −1000;
   int nofNeg = 0, Nof0 = 0;
   int maxProd = 1;
   for (int i = 0; i < n; i++) {
      if (arr[i] == 0){
         Nof0++;
         continue;
      }
      else if (arr[i] < 0) {
         nofNeg++;
         if(larNeg < arr[i])
         larNeg = arr[i];
      }
      maxProd = maxProd * arr[i];
   }
   if(nofNeg%2 == 0){
      return maxProd;
   }
   else if(nofNeg%2 != 0)
      return (maxProd / larNeg);
   if(Nof0 == (n−1) and nofNeg == 1)
      return 0;
   return maxProd;
}
int main(){
   int arr[] = {4, −2, 5, −1, 3, −6};
   int n = sizeof(arr)/sizeof(arr[0]);
   cout<<"The maximum product subset of an array is "<<findMaxSubsetProd(arr, n);
   return 0;
}

আউটপুট

The maximum product subset of an array is 720

  1. C++ এ একটি অ্যারের বিটনোসিটি পরীক্ষা করার জন্য প্রোগ্রাম

  2. C++ এ পূর্ণসংখ্যার অ্যারেতে সর্বাধিক পণ্য সহ একটি জোড়া খুঁজুন

  3. C++ এ একটি পণ্য অ্যারে ধাঁধা?

  4. বিট অ্যারে বাস্তবায়নের জন্য C++ প্রোগ্রাম