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

C++ प्रोग्राम: बाइनरी ट्री में सबसे बड़े इंडिपेंडेंट सेट (LIS) का साइज़ ढूंढना

यह दिए गए बाइनरी ट्री में सबसे बड़े इंडिपेंडेंट सेट (LIS) का साइज़ ढूंढने का C++ प्रोग्राम है।

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

एल्गोरिदम

शुरुआत
    डेटा d, लेफ्ट चाइल्ड पॉइंटर l और राइट चाइल्ड पॉइंटर r घोषित करने के लिए n स्ट्रक्चर बनाएं
    दो इंटीजर्स के बीच अधिकतम लौटाने के लिए max() फ़ंक्शन कॉल करें
    दिए गए बाइनरी ट्री में सबसे बड़े इंडिपेंडेंट सेट का साइज़ लौटाने के लिए LIS() फ़ंक्शन बनाएं
    वर्तमान नोड को छोड़कर साइज़ निकालें
    int size_excl = LIS(root->l) + LIS(root->r)
    वर्तमान नोड को शामिल करके साइज़ निकालें
    int size_incl = 1
    if (root->l)
        size_incl += LIS(root->l->l) + LIS(root->l->r)
    if (root->right)
        size_incl += LIS(root->r->l) + LIS(root->r->r)
    दोनों साइज़ का अधिकतम लौटाएं
    नया नोड बनाने के लिए फ़ंक्शन बनाएं
समाप्ति

उदाहरण कोड

#include <iostream>
using namespace std;

struct n {
    int d;
    int lis;
    struct n *l, *r;
};

int max(int x, int y) {
    return (x > y) ? x : y;
}

int LIS(struct n *root) {
    if (root == NULL)
        return 0;
    if (root->lis)
        return root->lis;
    if (root->l == NULL && root->r == NULL)
        return (root->lis = 1);

    int lis_excl = LIS(root->l) + LIS(root->r);
    int lis_incl = 1;
    if (root->l)
        lis_incl += LIS(root->l->l) + LIS(root->l->r);
    if (root->r)
        lis_incl += LIS(root->r->l) + LIS(root->r->r);

    root->lis = max(lis_incl, lis_excl);
    return root->lis;
}

struct n* newnode(int d) {
    struct n* t = (struct n *) malloc(sizeof(struct n));
    t->d = d;
    t->l = t->r = NULL;
    t->lis = 0;
    return t;
}

int main() {
    struct n *root = newnode(30);
    root->l = newnode(20);
    root->l->l = newnode(10);
    root->l->r = newnode(7);
    root->l->r->l = newnode(9);
    root->l->r->r = newnode(6);
    root->r = newnode(50);
    root->r->r = newnode(26);
    cout << "सबसे बड़े इंडिपेंडेंट सेट का साइज़ है " << LIS(root);
    return 0;
}

आउटपुट

सबसे बड़े इंडिपेंडेंट सेट का साइज़ है 5

ट्री संरचना

        30
       /  \
     20    50
    / \     \
   10  7     26
     / \
    9   6

LIS नोड्स: {10, 9, 6, 26, 30} या {10, 9, 6, 26, 50} - साइज़ 5

समय जटिलता

  • बिना मेमोइज़ेशन: O(2^n) - एक्सपोनेंशियल
  • मेमोइज़ेशन के साथ (जैसा कोड में है): O(n) - प्रत्येक नोड एक बार प्रोसेस होता है

DP दृष्टिकोण

कोड lis फील्ड का उपयोग करके मेमोइज़ेशन करता है, जिससे प्रत्येक नोड के लिए LIS केवल एक बार गणना होता है।

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

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

  1. C++ में दिए गए परफेक्ट बाइनरी ट्री के सभी नोड्स का योग ज्ञात करें C++ में दिए गए परफेक्ट बाइनरी ट्री के सभी नोड्स का योग ज्ञात करें

    मान लीजिए हमारे पास एक धनात्मक पूर्णांक L है, जो परफेक्ट बाइनरी ट्री में स्तरों की संख्या दर्शाता है। इस परफेक्ट बाइनरी ट्री में पत्ती नोड्स को 1 से n तक संख्या दी गई है। जहां n पत्ती नोड्स की संख्या है। पैरेंट नोड बच्चों का योग है। हमारा कार्य इस परफेक्ट बाइनरी ट्री के सभी नोड्स का योग प्रिंट करने

  1. पायथन में दिए गए बाइनरी ट्री में BST का सबसे बड़ा योग मान ढूंढने का प्रोग्राम पायथन में दिए गए बाइनरी ट्री में BST का सबसे बड़ा योग मान ढूंढने का प्रोग्राम

    मान लीजिए हमें एक बाइनरी ट्री प्रदान की गई है। हमें यह ढूंढना है कि क्या उसके सबट्रीज में बाइनरी सर्च ट्री (BST) मौजूद हैं और सबसे बड़े BST का योग ढूंढना है। योग ढूंढने के लिए, हम उस BST में प्रत्येक नोड के मान जोड़ते हैं। हम आउटपुट के रूप में योग मान लौटाते हैं। इसलिए, यदि इनपुट है: तो आउटपुट 12