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

क्रुस्कल का न्यूनतम स्पैनिंग ट्री एल्गोरिथम


एक जुड़ा हुआ ग्राफ G(V, E) है और प्रत्येक किनारे के लिए वजन या लागत दी गई है। क्रुस्कल का एल्गोरिथम ग्राफ और लागत का उपयोग करके न्यूनतम फैले हुए पेड़ का पता लगाएगा।

यह मर्ज-ट्री दृष्टिकोण है। प्रारंभ में, अलग-अलग पेड़ हैं, यह एल्गोरिथम उन किनारों को ले कर उनका विलय कर देगा जिनकी लागत न्यूनतम है, और एक ही पेड़ का निर्माण करेंगे।

क्रुस्कल का न्यूनतम स्पैनिंग ट्री एल्गोरिथम

इस समस्या में, सभी किनारों को उनकी लागत के आधार पर सूचीबद्ध और क्रमबद्ध किया जाता है। सूची से, न्यूनतम लागत वाले किनारों को निकालकर पेड़ में जोड़ दिया जाता है, और हर एक की जाँच होती है कि किनारे का चक्र बनता है या नहीं, यदि यह एक चक्र बनाता है तो किनारे को सूची से हटा दें और अगले किनारे पर जाएँ।

इस एल्गोरिथ्म की समय जटिलता ओ (ई लॉग ई) या ओ (ई लॉग वी) है, जहां ई किनारों की एक संख्या है और वी कई शिखर है।

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

<पूर्व>इनपुट:आसन्नता मैट्रिक्स क्रुस्कल का न्यूनतम स्पैनिंग ट्री एल्गोरिथम आउटपुट:एज:B--A और लागत:1Edge:E--B और लागत:2Edge:F --E और लागत:2Edge:C--A और लागत:3Edge:G--F और लागत:3Edge:D--A और लागत:4कुल लागत:15

एल्गोरिदम

क्रुस्कल(g:ग्राफ़, t:ट्री)

इनपुट - दिया गया ग्राफ g, और एक खाली पेड़ t

आउटपुट - ट्री टी चयनित किनारों के साथ

 ग्राफ़ जी में प्रत्येक शीर्ष के लिए सेट बनाना शुरू करें शीर्ष के प्रत्येक सेट के लिए आप आपको वर्टेक्ससेट में जोड़ते हैं [यू] किनारे की सूची को क्रमबद्ध करें। गिनती:=0 जबकि गिनती <=वी - 1 करते हैं // क्योंकि पेड़ में वी -1 किनारों का होना चाहिए:=किनारे की सूची [गिनती] फिर वर्टेक्ससेट [स्टार्ट] और वर्टेक्ससेट [एंड] को मर्ज करें, एड को ट्री टी काउंट में जोड़ें:=काउंट +1 किया गया अंत

उदाहरण

#include#define V 7#define INF 999 नामस्थान एसटीडी का उपयोग कर;//ग्राफिंट कॉस्ट का कॉस्ट मैट्रिक्स मैट [वी] [वी] ={ {0, 1, 3, 4, आईएनएफ, 5, आईएनएफ} , {1, 0, INF, 7, 2, INF, INF}, {3, INF, 0, INF, 8, INF, INF}, {4, 7, INF, 0, INF, INF, INF}, { INF, 2, 8, INF, 0, 2, 4}, {5, INF, INF, INF, 2, 0, 3}, {INF, INF, INF, INF, 4, 3, 0}}; टाइपिफ़ संरचना {इंट यू, वी, कॉस्ट;} एज; वॉयड स्वैपिंग (एज एंड ई1, एज एंड ई2) {एज टेम्प; अस्थायी =ई1; ई1 =ई2; e2 =अस्थायी;}वर्ग वृक्ष {int n; किनारे के किनारे [वी -1]; // एक पेड़ के रूप में शीर्ष -1 किनारों को सार्वजनिक किया जाता है:वृक्ष () { n =0; } शून्य जोड़ (किनारे ई) {किनारों [एन] =ई; // एज ई को ट्री n ++ में जोड़ें; } शून्य प्रिंटएज () {//प्रिंट एज, लागत और कुल लागत int tCost =0; for(int i =0; i =0) set1.addVertex (set2.deleteVertex ()); //addToSet(vSet1, delFromSet(vSet2));}int findVertex(VSet *vertSetArr, int vert) {// के लिए (int i =0; i edgeList[j+1].cost) { स्वैपिंग (एजलिस्ट [j], edgeList[j+1]); झंडा =1; } }}void kruskal(Tree &tr) { int ecount, maxEdge =V*(V-1)/2; //अधिकतम n(n-1)/2 किनारों को ग्राफ़ किनारे के किनारे में रखा जा सकता है सूची [maxEdge], ed; इंट यूलोक, वीलोक; वीसेट वीसेटअरे [वी]; ईकाउंट =फाइंडएज (एजलिस्ट); for(int i =0; i  

आउटपुट

एज:बी--ए और लागत:1एज:ई--बी और लागत:2एज:एफ-ई और लागत:2एज:सी--ए और लागत:3एज:जी--एफ और लागत:3एज:डी--ए और लागत:4कुल लागत:15

  1. C++ में एक पूर्ण ग्राफ़ से अधिकतम संभव एज डिसजॉइंट स्पैनिंग ट्री

    मान लीजिए हमारे पास एक पूरा ग्राफ है; हमें एज डिसजॉइंट स्पैनिंग ट्री की संख्या गिननी है। एज डिसजॉइंट स्पैनिंग पेड़ फैले हुए पेड़ हैं, जहां सेट में कोई भी दो पेड़ आम तौर पर किनारे नहीं होते हैं। मान लीजिए कि N (शीर्षों की संख्या) 4 है, तो आउटपुट 2 होगा। 4 शीर्षों का उपयोग करने वाला पूरा ग्राफ नीचे जै

  1. डेटा संरचनाओं में न्यूनतम फैले हुए पेड़

    एक फैला हुआ पेड़ अप्रत्यक्ष ग्राफ़ का एक उपसमुच्चय है जिसमें सभी शीर्ष किनारों की न्यूनतम संख्या से जुड़े होते हैं। यदि सभी कोने एक ग्राफ में जुड़े हुए हैं, तो कम से कम एक फैले हुए पेड़ मौजूद हैं। ग्राफ़ में, एक से अधिक फैले हुए वृक्ष हो सकते हैं। न्यूनतम फैले हुए पेड़ एक न्यूनतम स्पैनिंग ट्री (MS

  1. पायथन में लीफ वैल्यू से न्यूनतम लागत का पेड़

    मान लीजिए कि हमारे पास सकारात्मक पूर्णांकों की एक सरणी है, सभी बाइनरी पेड़ों पर विचार करें जैसे कि - प्रत्येक नोड में 0 या 2 बच्चे होते हैं; गिरफ्तारी सरणी के मान पेड़ के इन-ऑर्डर ट्रैवर्सल में प्रत्येक पत्ते के मूल्यों के अनुरूप होते हैं। प्रत्येक गैर-पत्ती नोड का मान क्रमशः इसके बाएँ और दाएँ उपप्