কম্পিউটার

C++ এ একটি নির্দিষ্ট XOR মান আছে এমন উপসেটের সংখ্যা গণনা করুন


ধনাত্মক পূর্ণসংখ্যা এবং একটি মান মিল ধারণকারী একটি অ্যারে arr[ ] দেওয়া হয়েছে। লক্ষ্য হল arr[] এর উপসেটগুলি খুঁজে বের করা যাতে XOR =মিল আছে এমন উপাদান রয়েছে।

উদাহরণস্বরূপ

ইনপুট

arr[] = {4, 2, 8, 10} match=12

আউটপুট

Count of number of subsets having a particular XOR value are: 2

ব্যাখ্যা

Subsets of arr with XOR of elements as 0 are −
[ 4,8 ], [4,2,10]

ইনপুট

arr[] = {3,5,2,7} match=5

আউটপুট

Count of number of subsets having a particular XOR value are− 2

ব্যাখ্যা

ubsets of arr with XOR of elements as 0 are−
[ 5 ], [2,7]

নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি

এই পদ্ধতিতে আমরা একটি গতিশীল প্রোগ্রামিং সমাধান ব্যবহার করব। অ্যারের arr_2[][] সূচী i,j-এ মান থাকবে যেমন arr_2[ i ][ j ]-এ arr[ 0 থেকে i−1 ] এর উপসেটগুলির উপাদানগুলির XOR মান রয়েছে। প্রাথমিক মান arr_2[0][0] কে 1 হিসাবে ধরুন, যেমন একটি খালি সেটের জন্য XOR হল 1। সেট করুন arr_2[i][j] =arr_2[i−1][j] + arr_2[i−1][j] ^ arr[i−1]], সাবসেট arr[0 থেকে i−2]-এ j হিসাবে XOR থাকলে সাবসেট arr[0 থেকে i−1]-এও XOR j থাকে। এছাড়াও যদি সাবসেট arr[0 থেকে i−2]-এ XOR থাকে j^arr[i], তাহলে সাবসেট arr[0 থেকে i−1]-এও j^arr[i−1] ^ arr[i−1] হিসাবে XOR j থাকে। ফলাফল পাওয়া যাবে arr_2[ আকার ][ ম্যাচ ]।

  • একটি পূর্ণসংখ্যা অ্যারে অ্যার[] নিন।

  • পরিবর্তনশীল মিলকে পূর্ণসংখ্যা হিসাবে নিন।

  • ফাংশন subset_XOR(int arr[], int size, int match) একটি ইনপুট অ্যারে এবং এর দৈর্ঘ্য নেয় এবং একটি নির্দিষ্ট XOR মান সহ উপসেটের সংখ্যার একটি গণনা প্রদান করে৷

  • প্রাথমিকভাবে সর্বোচ্চ =arr[0] নিন। এখন লুপ ব্যবহার করে পুরো arr[] অতিক্রম করুন এবং সর্বোচ্চ হিসাবে সর্বোচ্চ মান খুঁজুন।

  • কম্পিউট temp =(1 <<(int)(log2(সর্বোচ্চ) + 1) ) −1 সর্বাধিক সম্ভাব্য XOR মান হিসাবে।

  • XORs সঞ্চয় করতে array_2[size+1][temp+1] নিন।

  • লুপ ব্যবহার করে পুরো arr_2 0s দিয়ে শুরু করুন।

  • arr_2[0][0] =1.

    সেট করুন
  • লুপের জন্য i=0 থেকে i<=size, এবং j=0 থেকে j<=size, সেট করুন temp_2 =arr_2[i−1][j ^ arr[i−1]] এবং arr_2[i][j সেট করুন ] =arr_2[i−1][j] + temp_2.

  • লুপের জন্য উভয়ের শেষে আমাদের কাছে একটি নির্দিষ্ট XOR মান সহ উপসেটের সংখ্যা হিসাবে arr_2[size][match] থাকবে।

  • ফলাফল হিসাবে arr_2[size][match] ফেরত দিন।

উদাহরণ

#include<bits/stdc++.h>
using namespace std;
int subset_XOR(int arr[], int size, int match){
   int highest = arr[0];
   for (int i = 1; i < size; i++){
      if(arr[i] > highest){
         highest = arr[i];
      }
   }
   int temp = (1 << (int)(log2(highest) + 1) ) − 1;
   if( match > temp){
      return 0;
   }
   int arr_2[size+1][temp+1];
   for (int i = 0; i<= size; i++){
      for (int j = 0; j<= temp; j++){
         arr_2[i][j] = 0;
      }
   }
   arr_2[0][0] = 1;
   for (int i=1; i<=size; i++){
      for (int j=0; j<=temp; j++){
         int temp_2 = arr_2[i−1][j ^ arr[i−1]];
         arr_2[i][j] = arr_2[i−1][j] + temp_2;
      }
   }
   return arr_2[size][match];
}
int main(){
   int arr[] = {4, 2, 8, 10, 3, 4, 4};
   int match = 2;
   int size = sizeof(arr)/sizeof(arr[0]);
   cout<<"Count of number of subsets having a particular XOR value are: "<<subset_XOR(arr, size, match);
   return 0;
}

আউটপুট

যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −

উৎপন্ন করবে
Count of number of subsets having a particular XOR value are − 8

  1. C++ এ বিভাজ্য 'k' সমষ্টি সহ সাব-ম্যাট্রিক্স গণনা করুন

  2. C++ এ একটি বনে গাছের সংখ্যা গণনা করুন

  3. C++ এ একটি নির্দিষ্ট XOR মান আছে এমন উপসেটের সংখ্যা গণনা করুন

  4. একটি সেটকে C++-এ k উপসেটে ভাগ করার উপায় গণনা করুন