কম্পিউটার

বৃহত্তম স্বাধীন সেট সমস্যা


স্বাধীন সেট হল সমস্ত বাইনারি ট্রি নোডের সাবসেট যখন সেই সাবসেটের কোনো দুটি নোডের মধ্যে কোনো প্রান্ত থাকে না।

এখন উপাদানগুলির একটি সেট থেকে, আমরা দীর্ঘতম স্বাধীন সেটটি খুঁজে পাব। অর্থাত্ যদি উপাদানগুলিকে একটি বাইনারি ট্রি তৈরি করতে ব্যবহার করা হয়, তবে সমস্ত বৃহত্তম উপসেট, যেখানে সেই উপসেটের কোনও উপাদান একে অপরের সাথে সংযুক্ত থাকে না৷

ইনপুট এবং আউটপুট

Input:
A binary tree.
বৃহত্তম স্বাধীন সেট সমস্যা 
Output:
Size of the Largest Independent Set is: 5

অ্যালগরিদম

longSetSize(root)

এই অ্যালগরিদমে বাইনারি ট্রি তৈরি হবে, সেই গাছের প্রতিটি নোড ডেটা ধারণ করবে এবং সাইজ সেট করবে।

ইনপুট - বাইনারি গাছের রুট নোড।

আউটপুট - দীর্ঘতম সেটের আকার।

Begin
   if root = φ, then
      return 0
   if setSize(root) ≠ 0, then
      setSize(root)
   if root has no child, then
      setSize(root) := 1
      return setSize(root)
   setSizeEx := longSetSize(left(root)) + longSetSize(right(root)) //excluding root
   setSizeIn := 1

   if left child exists, then
      setSizeIn := setSizeIn + longSetSize(left(left(root))) + longSetSize(left(right(root)))

   if right child exists, then
      setSizeIn := setSizeIn + longSetSize(right(left(root))) + longSetSize(right(right(root)))

   if setSizeIn > setSizeEx, then
      setSize(root) := setSizeIn
   else
      setSize(root) := setSizeEx

   return setSize(root)
End

উদাহরণ

#include <iostream>
using namespace std;

struct node {
   int data;
   int setSize;
   node *left, *right;
};

int longSetSize(node *root) {
   if (root == NULL)
      return 0;

   if (root->setSize != 0)
      return root->setSize;

   if (root->left == NULL && root->right == NULL)    //when there is no child
      return (root->setSize = 1);

   // set size exclusive root is set size of left and set size of right

   int setSizeEx = longSetSize(root->left) + longSetSize(root->right);
   int setSizeIn = 1;             //inclusive root node

   if (root->left)               //if left sub tree is present
      setSizeIn += longSetSize(root->left->left) + longSetSize(root->left->right);

   if (root->right)                //if right sub tree is present
      setSizeIn += longSetSize(root->right->left) +longSetSize(root->right->right);
   root->setSize = (setSizeIn>setSizeEx)?setSizeIn:setSizeEx;

   return root->setSize;
}

struct node* getNode(int data) {          //create a new node with given data
   node* newNode = new node;
   newNode->data = data;
   newNode->left = newNode->right = NULL;
   newNode->setSize = 0;

   return newNode;
}

int main() {
   node *root = getNode(20);
   root->left = getNode(8);
   root->left->left = getNode(4);
   root->left->right = getNode(12);
   root->left->right->left = getNode(10);
   root->left->right->right = getNode(14);
   root->right = getNode(22);

   root->right->right = getNode(25);
   cout << "Size of the Largest Independent Set is: " << longSetSize(root);
}

আউটপুট

Size of the Largest Independent Set is − 5

  1. বৃহত্তম স্বাধীন সেট সমস্যা

  2. ভার্টেক্স কভার সমস্যা

  3. একটি অনির্দেশিত গ্রাফে C++ এ প্রদত্ত আকারের একটি স্বাধীন সেট রয়েছে কিনা তা খুঁজুন

  4. একটি অনির্দেশিত গ্রাফে পাইথনে একটি প্রদত্ত আকারের একটি স্বাধীন সেট রয়েছে কিনা তা খুঁজুন