Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> प्रोग्रामिंग

सबसे बड़ा इंडिपेंडेंट सेट समस्या

इंडिपेंडेंट सेट सभी बाइनरी ट्री नोड्स का सबसेट है जब उस सबसेट में किन्हीं दो नोड्स के बीच कोई एज नहीं होता।

अब तत्वों के एक सेट से, हम सबसे लंबा इंडिपेंडेंट सेट ढूंढेंगे। यानी यदि तत्वों से बाइनरी ट्री बनाया जाए, तो सबसे बड़ा सबसेट जहां उस सबसेट में कोई भी तत्व एक-दूसरे से जुड़े नहीं हैं।

इनपुट और आउटपुट

इनपुट: एक बाइनरी ट्री।
आउटपुट: सबसे बड़े इंडिपेंडेंट सेट का आकार है: 5

एल्गोरिदम

longSetSize(root)

इस एल्गोरिदम में बाइनरी ट्री बनेगा, उस ट्री का प्रत्येक नोड डेटा और setSize रखेगा।

इनपुट: बाइनरी ट्री का रूट नोड।
आउटपुट: सबसे लंबे सेट का आकार।

शुरुआत
    यदि root = φ, तो
        वापस 0
    यदि setSize(root) ≠ 0, तो
        वापस setSize(root)
    यदि root का कोई बच्चा नहीं है, तो
        setSize(root) := 1
        वापस setSize(root)
    setSizeEx := longSetSize(left(root)) + longSetSize(right(root)) // रूट को छोड़कर
    setSizeIn := 1
    यदि बायां बच्चा मौजूद है, तो
        setSizeIn := setSizeIn + longSetSize(left(left(root))) + longSetSize(left(right(root)))
    यदि दायां बच्चा मौजूद है, तो
        setSizeIn := setSizeIn + longSetSize(right(left(root))) + longSetSize(right(right(root)))
    यदि setSizeIn > setSizeEx, तो
        setSize(root) := setSizeIn
    अन्यथा
        setSize(root) := setSizeEx
    वापस setSize(root)
अंत

उदाहरण (C++ कोड)

#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)
        return (root->setSize = 1);
    
    int setSizeEx = longSetSize(root->left) + longSetSize(root->right);
    int setSizeIn = 1;
    
    if (root->left)
        setSizeIn += longSetSize(root->left->left) + longSetSize(root->left->right);
    if (root->right)
        setSizeIn += longSetSize(root->right->left) + longSetSize(root->right->right);
    
    root->setSize = (setSizeIn > setSizeEx) ? setSizeIn : setSizeEx;
    return root->setSize;
}

struct node* getNode(int 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. वर्टेक्स कवर समस्या वर्टेक्स कवर समस्या

    एक अनडायरेक्टेड ग्राफ के लिए, वर्टेक्स कवर वर्टेक्स का एक सबसेट है, जहां ग्राफ के प्रत्येक एज (u, v) के लिए या तो u या v सेट में होता है। बाइनरी ट्री का उपयोग करके, हम वर्टेक्स कवर समस्या को आसानी से हल कर सकते हैं। इस समस्या को दो सब-प्रॉब्लम्स में विभाजित किया जा सकता है। जब रूट वर्टेक्स कवर का

  1. C++ में अनडायरेक्टेड ग्राफ में दिए गए आकार का इंडिपेंडेंट सेट मौजूद है या नहीं खोजें C++ में अनडायरेक्टेड ग्राफ में दिए गए आकार का इंडिपेंडेंट सेट मौजूद है या नहीं खोजें

    अवधारणाएक दिए गए अनडायरेक्टेड ग्राफ के संबंध में, सत्यापित करें कि क्या इसमें आकार l का एक इंडिपेंडेंट सेट है। यदि आकार l का एक इंडिपेंडेंट सेट मौजूद है तो Yes प्रिंट करें, अन्यथा No प्रिंट करें। यह ध्यान दिया जाना चाहिए कि एक ग्राफ में इंडिपेंडेंट सेट को उन शीर्षों के समूह के रूप में परिभाषित किया

  1. Python में अनिर्देशित ग्राफ में दिए गए आकार का स्वतंत्र सेट है या नहीं जांचना Python में अनिर्देशित ग्राफ में दिए गए आकार का स्वतंत्र सेट है या नहीं जांचना

    मान लीजिए हमारे पास एक दिया गया अनिर्देशित ग्राफ है; हमें जांचना है कि क्या इसमें आकार l का एक स्वतंत्र सेट है। यदि आकार l का कोई स्वतंत्र सेट है तो Yes वापस करें अन्यथा No। हमें इस बात का ध्यान रखना है कि एक ग्राफ में स्वतंत्र सेट को उन शीर्षों के समूह के रूप में परिभाषित किया गया है जो सीधे एक-दूस