সমস্যাতে, আমাদেরকে 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