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

C++ प्रोग्राम: डिस्जॉइंट सेट डेटा स्ट्रक्चर इम्प्लीमेंट करें


डिस्जॉइंट सेट मूल रूप से सेट्स का एक समूह है जहां कोई आइटम एक से अधिक सेट में नहीं हो सकता। यह सबसेट्स पर यूनियन और फाइंड ऑपरेशन का समर्थन करता है।

Find(): इसका उपयोग यह पता लगाने के लिए किया जाता है कि कोई विशेष तत्व किस सबसेट में है और उस विशेष सेट के प्रतिनिधि को लौटाता है।

Union(): यह दो अलग-अलग सबसेट्स को एक सिंगल सबसेट में मर्ज करता है और एक सेट का प्रतिनिधि दूसरे का प्रतिनिधि बन जाता है।

फंक्शन और छद्मकोड

Begin    मान लें k तत्व है    makeset(k):       k.parent = k.    Find(x):    If k.parent == k       return k.    else    return Find(k.parent)    Union (a,b):       दो सेट a और b को इनपुट के रूप में लें।       aroot = Find(a)       broot = Find(b)       aroot.parent = broot End

उदाहरण

#include <iostream> #include <vector> #include <unordered_map> using namespace std; class DisjointSet { //डिस्जॉइंट सेट को प्रस्तुत करने के लिए    unordered_map<int, int> parent;    public:    void makeSet(vector<int> const &wholeset){    //makeset ऑपरेशन निष्पादित करें       for (int i : wholeset) // प्रत्येक आइटम के लिए n डिस्जॉइंट सेट बनाएं       (one for each item)       parent[i] = i;    }    int Find(int l) { // जिस सेट में तत्व l है उसका रूट खोजें       if (parent[l] == l) // यदि l रूट है          return l;       return Find(parent[l]); // रूट मिलने तक पैरेंट के लिए रिकर्स करें    }    void Union(int m, int n) { // दो सबसेट्स m और n का यूनियन निष्पादित करें         int x = Find(m);       int y = Find(n);       parent[x] = y;    } }; void print(vector<int> const &universe, DisjointSet &dis) {    for (int i : universe)    cout << dis.Find(i) << " ";    cout << '\n'; } int main() {    vector<int> wholeset = { 6,7,1,2,3 }; // पूरे सेट के आइटम    DisjointSet dis; //DisjointSet क्लास इनिशियलाइज़ करें    dis.makeSet(wholeset); // wholeset के आइटम्स का व्यक्तिगत सेट बनाएं    dis.Union(7, 6); // 7,6 एक ही सेट में हैं    print(wholeset, dis);    if (dis.Find(7) == dis.Find(6)) // यदि वे एक ही सेट से संबंधित हैं या नहीं।       cout<<"Yes"<<endl;    else       cout<<"No";    if (dis.Find(3) == dis.Find(4))       cout<<"Yes"<<endl;    else       cout<<"No";    return 0; }

आउटपुट

6 6 1 2 3 Yes No

  1. C++ STL में Set_Union का कार्यान्वयन C++ STL में Set_Union का कार्यान्वयन

    दो सेट का यूनियन उन तत्वों द्वारा बनाया जाता है जो या तो एक सेट में मौजूद होते हैं, या दोनों में। दूसरे सेट के वे तत्व जिनका पहला सेट में समान तत्व होता है, परिणाम सेट में कॉपी नहीं किए जाते। सामान्य सेट ऑपरेशन हैं: Set Union Set Intersection Symmetric Set Difference या Exclusive-OR Set Difference

  1. C++ STL में Set_Intersection का कार्यान्वयन C++ STL में Set_Intersection का कार्यान्वयन

    दो सेट का इंटरसेक्शन केवल उन तत्वों द्वारा बनता है जो दोनों सेट में कॉमन होते हैं। फंक्शन द्वारा कॉपी किए गए तत्व हमेशा पहले सेट से उसी क्रम में आते हैं। दोनों सेट में तत्व पहले से क्रमबद्ध होने चाहिए। सामान्य सेट ऑपरेशन हैं: Set Union Set Intersection Symmetric Set Difference या Exclusive-OR Set

  1. C++ STL में Set_Difference का कार्यान्वयन C++ STL में Set_Difference का कार्यान्वयन

    दो सेट का डिफरेंस केवल उन तत्वों द्वारा बनता है जो पहले सेट में मौजूद होते हैं, दूसरे सेट में नहीं। फंक्शन द्वारा कॉपी किए गए तत्व हमेशा पहले सेट से उसी क्रम में आते हैं। दोनों सेट में तत्व पहले से क्रमबद्ध होने चाहिए। सामान्य सेट ऑपरेशन हैं: Set Union Set Intersection Symmetric Set Difference या