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

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

मान लीजिए हमें एक ग्राफ दिया गया है और उस ग्राफ से 'न्यूनतम स्पैनिंग ट्री' (एमएसटी) का पता लगाने के लिए कहा गया है। ग्राफ़ का MST भारित ग्राफ़ का एक उपसमुच्चय होता है जहाँ सभी शीर्ष मौजूद होते हैं और जुड़े होते हैं, और उपसमुच्चय में कोई चक्र मौजूद नहीं होता है। एमएसटी को न्यूनतम कहा जाता है क्योंकि एमएसटी का कुल बढ़त वजन ग्राफ से न्यूनतम संभव है। इसलिए, यहां हम प्राइम के एमएसटी एल्गोरिदम का उपयोग करते हैं और दिए गए ग्राफ से एमएसटी के कुल किनारे के वजन का पता लगाते हैं।

तो, अगर इनपुट पसंद है

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

, शीर्षों की संख्या (n) 4 है, और प्रारंभ शीर्ष (s) =3 है, तो आउटपुट 14 होगा।

इस ग्राफ से MST यह होगा -

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

इस एमएसटी का कुल एज वेट 14 है।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • एक फ़ंक्शन परिभाषित करें mst_find() । इसमें G, s
      . लगेगा
    • दूरी :=आकार G की एक नई सूची को मान ऋणात्मक अनंत के साथ प्रारंभ किया गया
    • दूरी[s] :=0
    • itr :=आकार G की एक नई सूची को गलत मान के साथ प्रारंभ किया गया
    • सी :=0
    • सच होने पर, करें
      • न्यूनतम वजन:=अनंत
      • m_idx :=-1
      • i के लिए 0 से G के आकार की सीमा में, करें
        • यदि itr[i] असत्य के समान है, तो
          • यदि दूरी[i]
          • न्यूनतम वजन:=दूरी[i]
          • m_idx :=i
    • यदि m_idx -1 के समान है, तो
      • लूप से बाहर आएं
    • c :=c + min_weight
    • itr[m_idx] :=सच
    • प्रत्येक जोड़ी के लिए i, j के मानों में G[m_idx], do
      • दूरी[i] :=न्यूनतम दूरी[i], j
  • वापसी सी
  • G :=अन्य मानचित्रों वाला एक नया मानचित्र
  • किनारों में प्रत्येक आइटम के लिए, करें
    • यू:=आइटम [0]
    • v:=आइटम[1]
    • w:=आइटम[2]
    • u :=u - 1
    • v :=v - 1
    • min_weight =min(G[u, v], w)
    • G[u, v] :=min_weight
    • G[v, u] :=min_weight
  • वापस mst_find(G, s)
  • उदाहरण

    आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

    def mst_find(G, s):दूरी =[float("inf")] * len(G) दूरी[s] =0 itr =[False] * len(G) c =0 जबकि True:min_weight =फ्लोट ("इनफ") m_idx =-1 के लिए मैं रेंज में (लेन (जी)):अगर आईटीआर [i] ==गलत:अगर दूरी [i]  

    इनपुट

    4, [(1, 2, 5), (1, 3, 5), (2, 3, 7), (1, 4, 4)], 3

    आउटपुट

    14

    1. पायथन का उपयोग करके बाइनरी ट्री के सबसे कम सामान्य पूर्वज का पता लगाने का कार्यक्रम

      मान लीजिए, हमें एक बाइनरी ट्री दिया गया है और दो विशिष्ट नोड x और y भी दिए गए हैं। हमें बाइनरी ट्री से दो नोड्स के सबसे कम सामान्य पूर्वज का पता लगाना है। बाइनरी ट्री में सबसे कम सामान्य पूर्वज सबसे निचला नोड होता है, जिसके दोनों नोड x और y वंशज होते हैं। साथ ही, एक विशेष नोड स्वयं का वंशज भी हो सकत

    1. यह पता लगाने के लिए कार्यक्रम कि क्या दो अभिव्यक्ति पेड़ पायथन का उपयोग करने के बराबर हैं

      मान लीजिए, हमें दो व्यंजक वृक्ष दिए गए हैं। हमें एक प्रोग्राम लिखना है जो दो एक्सप्रेशन ट्री की जांच करता है और यह निर्धारित करता है कि एक्सप्रेशन ट्री समान मान उत्पन्न करते हैं या नहीं। दो एक्सप्रेशन ट्री हमें इन-ऑर्डर तरीके से प्रदान किए जाते हैं और यदि वे मेल खाते हैं तो हम एक ट्रू वैल्यू लौटाते

    1. पायथन का उपयोग करके बाइनरी ट्री में दाईं ओर नोड का पता लगाने का कार्यक्रम

      मान लीजिए, हमें एक बाइनरी ट्री प्रदान किया जाता है। हमें एक नोड (u नाम दिया गया) के लिए एक पॉइंटर भी दिया जाता है और हमें दिए गए नोड के ठीक दाईं ओर स्थित नोड को खोजना होता है। दिए गए नोड के दाईं ओर स्थित नोड समान स्तर पर रहना चाहिए और दिया गया नोड या तो लीफ नोड या आंतरिक नोड हो सकता है। तो, अगर इनप