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

নির্দিষ্ট XOR মান বিশিষ্ট সাবসেট গণনা C++-এ


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

ইনপুট

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

আউটপুট

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

ব্যাখ্যা

XOR ১২ হয় এমন সাবসেটগুলো: [4,8], [4,2,10]

ইনপুট

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

আউটপুট

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

ব্যাখ্যা

XOR ৫ হয় এমন সাবসেটগুলো: [5], [2,7]

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

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

  • ইন্টিজার অ্যারে arr[] নেওয়া হয়।
  • ভেরিয়েবল match ইন্টিজার হিসেবে।
  • subset_XOR(int arr[], int size, int match) ফাংশন ইনপুট অ্যারে এবং দৈর্ঘ্য নিয়ে নির্দিষ্ট XOR মান বিশিষ্ট সাবসেটের কাউন্ট রিটার্ন করে।
  • ইনিশিয়ালি highest = arr[0]। পুরো অ্যারে ট্রভারস করে সর্বোচ্চ মান highest বের করা হয়।
  • temp = (1 << (int)(log2(highest) + 1)) - 1 সর্বোচ্চ সম্ভাব্য XOR মান হিসেবে।
  • match > temp হলে ০ রিটার্ন।
  • arr_2[size+1][temp+1] অ্যারে XOR স্টোর করার জন্য।
  • পুরো arr_2 ০ দিয়ে ইনিশিয়ালাইজ। arr_2[0][0] = 1।
  • ডাবল ফর লুপ: i=1 থেকে size, j=0 থেকে temp। temp_2 = arr_2[i-1][j ^ arr[i-1]] এবং arr_2[i][j] = arr_2[i-1][j] + temp_2।
  • শেষে 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. সাব-ম্যাট্রিক্সের সম k দিয়ে বিভাজ্য হলে তাদের সংখ্যা গণনা (C++)

  2. ফরেস্টে ট্রির সংখ্যা গণনা C++-এ

  3. নির্দিষ্ট XOR মান বিশিষ্ট সাবসেট গণনা C++-এ

  4. C++-এ একটি সেটকে k সাবসেটে ভাগ করার পদ্ধতির সংখ্যা গণনা