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

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


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

यह एक बढ़ता हुआ वृक्ष दृष्टिकोण है। इस एल्गोरिदम को पेड़ शुरू करने के लिए बीज मूल्य की आवश्यकता है। बीज के शीर्ष को पूरा पेड़ बनाने के लिए उगाया जाता है।

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

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

इस समस्या की समय जटिलता O(V^2) है। यहाँ V शीर्षों की संख्या है।

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

<पूर्व>इनपुट:आसन्न सूची:प्राइम का न्यूनतम स्पैनिंग ट्री एल्गोरिथम आउटपुट:(0)--(1|1) (0)---(2|3 ) (0)---(3|4)(1)---(0|1) (1)---(4|2)(2)---(0|3)(3)-- -(0|4)(4)---(1|2) (4)---(5|2)(5)---(4|2) (5)---(6|3) (6)---(5|3)

एल्गोरिदम

prims(g:Graph, t:tree, start)

इनपुट - ग्राफ़ g, एक खाली पेड़ और 'स्टार्ट' नाम का बीज शीर्ष

आउटपुट - किनारों को जोड़ने के बाद पेड़।

आरंभ दो सेटों को यूज्डवर्ट, अनयूज्डवर्ट यूज्डवर्ट[0] :=स्टार्ट और अनयूज्डवर्ट[0] के रूप में परिभाषित करें:=स्टार्ट को छोड़कर सभी वर्टिस के लिए यूज्ड करेंवर्ट[i] :=unusedVert[i] :=i // Add all अप्रयुक्त सूची में कोने, जबकि इस्तेमाल किए गए वर्टिकल वी डू // वी कुल नोड्स की संख्या है मिनट:=उपयोग किए गए सभी कोने के लिए वर्टिकल सरणी ग्राफ के सभी कोने के लिए करते हैं यदि न्यूनतम> लागत [i, j] और मैं जे तो न्यूनतम:=लागत [i, j] एड:=i और j के बीच का किनारा, और एड की लागत:=मिनट अप्रयुक्त किया गया Vert [ed का गंतव्य]:=ट्री में एज एड जोड़ें टी का स्रोत जोड़ें इस्तेमाल किया हुआ संपादित करेंसमाप्त किया गयाअंत

उदाहरण

#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]; // एक पेड़ के रूप में शीर्ष -1 किनारों को सार्वजनिक किया जाता है:वृक्ष () { n =0; } शून्य जोड़ (किनारे ई) {किनारों [एन] =ई; // एज ई को ट्री n ++ में जोड़ें; } शून्य प्रिंटएज () {//प्रिंट एज, लागत और कुल लागत int tCost =0; for(int i =0; i costMat[i][j] &&कॉस्टमैट [i] [जे]! =0) {// न्यूनतम लागत के साथ किनारे का पता लगाएं // जैसे कि आपको माना जाता है और वी को अभी तक नहीं माना जाता है मिन =कॉस्टमैट [i] [जे]; ed.u =मैं; एड.वी =जे; एड.लागत =मिनट; } } } } अप्रयुक्तवर्ट [ed.v] =-1; // unusedVertex tr.addEdge (ed) से v हटाएं; यूज्डवर्ट [p] =ed.u; पी++; // यू को यूज्ड वर्टेक्स में जोड़ें}} मुख्य () {ट्री टीआर; प्राइम्स (टीआर, 0); // प्रारंभ नोड 0 tr.printEdges();}

आउटपुट

(0)---(1|1) (0)---(2|3) (0)---(3|4)(1)---(0|1) (1) ---(4|2)(2)---(0|3)(3)---(0|4)(4)---(1|2) (4)---(5| 2)(5)---(4|2) (5)---(6|3)(6)---(5|3)

  1. C++ में बाइनरी ट्री की न्यूनतम गहराई

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें उस वृक्ष की न्यूनतम गहराई ज्ञात करनी है। जैसा कि हम जानते हैं कि न्यूनतम गहराई रूट नोड से निकटतम लीफ नोड तक सबसे छोटे पथ के साथ नोड्स की संख्या है। तो, अगर इनपुट पसंद है तो आउटपुट 2 . होगा इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - ट्री नोड्स

  1. एम-आर्य वृक्ष

    कंप्यूटर विज्ञान में एक एम-आर्य पेड़ को नोड्स के संग्रह के रूप में परिभाषित किया जाता है जिसे सामान्य रूप से निम्न तरीके से पदानुक्रम में दर्शाया जाता है। पेड़ रूट नोड पर शुरू होता है। पेड़ का प्रत्येक नोड अपने चाइल्ड नोड्स के लिए पॉइंटर्स की एक सूची रखता है। चाइल्ड नोड्स की संख्या मी से कम या उसके

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

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