এই সমস্যায়, আমাদেরকে একটি অ্যারে দেওয়া হয়েছে যা শুধুমাত্র 1 এবং -1 এবং একটি পূর্ণসংখ্যার মান k নিয়ে গঠিত। আমাদের কাজ হল -1 এবং +1 এর অ্যারেতে 0 যোগ সহ K আকারের কোনো উপসেট আছে কিনা তা খুঁজে বের করা।
সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,
ইনপুট: arr[] ={-1, 1, -1, -1, 1, 1, -1}, k =4
আউটপুট: হ্যাঁ
ব্যাখ্যা:
সাইজ 4, {-1, 1, -1, 1} এর উপসেট। যোগফল =-1 + 1 - 1 + 1 =0
সমাধান পদ্ধতি:
আমাদের চেক করতে হবে যে আকারের k আকারের কোনো উপসেট আছে কিনা যার যোগফল 0 এর সমান। একটি উপসেট হিসাবে আমরা অ্যারের যেকোনো উপাদান বিবেচনা করতে পারি, যোগফল হবে 0, যদি 1 এবং -1 এর সমান সংখ্যা থাকে উপসেট উপসেটের আকার সমান হলেই এটি সম্ভব।
সহজভাবে,
k জোড় হলে, সত্য ফেরত দিন।
k বিজোড় হলে মিথ্যা ফেরত দিন।
আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম,
উদাহরণ
#include <iostream> using namespace std; int countOne(int a[], int n) { int i, count = 0; for (i = 0; i < n; i++) if (a[i] == 1) count++; return count; } bool isSubSetSumZeroFound(int arr[], int n, int K) { int totalOne = countOne(arr, n); int totalNegOne = n - totalOne; return (K % 2 == 0 && totalOne >= K / 2 && totalNegOne >= K / 2); } int main() { int arr[] = { 1, 1, -1, -1, 1, -1, 1, 1, -1 }; int size = sizeof(arr) / sizeof(arr[0]); int K = 4; if (isSubSetSumZeroFound(arr, size, K)) cout<<"Subset of size "<<K<<" with sum of all elements 0 exists."; else cout<<"No subset found"; return 0; }
আউটপুট
Subset of size 4 with sum of all elements 0 exists.