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

पायथन में एक जंगल को जोड़ने का कार्यक्रम

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

पायथन में एक जंगल को जोड़ने का कार्यक्रम

तो आउटपुट 4 होगा।

हम किनारे 0 −> 5 जोड़ सकते हैं। फिर, सबसे लंबा पथ 3 −> 1 −> 0 −> 5 −> 7 या 4 −> 1 −> 0 −> 5 −> 7 में से कोई भी हो सकता है; और ये रास्ते भी उलटे दिशा वाले। तो हम दूरी 4 लौटाते हैं।

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

  • देखा :=एक नया सेट

  • डीआईसी:=ग्राफ

  • एक फ़ंक्शन ट्रीडेप्थ () को परिभाषित करें। यह नोड लेगा।

    • रिट:=0

    • फ़ंक्शन dfs1 () को परिभाषित करें। यह नोड लेगा, माता-पिता।

      • देखे गए सेट में एक नोड जोड़ें

      • best2 :=एक खाली न्यूनतम हीप संरचना

      • डीआईसी [नोड] में प्रत्येक एनएक्सटी के लिए, करें

        • अगर नेक्स्ट पैरेंट के समान नहीं है, तो

          • push(dfs1(nxt, node) + 1) best2 में

        • अगर लेन(सर्वश्रेष्ठ2)> 2, तो

          • ढेर से पॉप(सर्वश्रेष्ठ2)

        • अगर best2 खाली है, तो

          • वापसी 0

        • ret :=अधिकतम रिट, best2 के सभी तत्वों का योग

        • अधिकतम 2 लौटाएं

      • dfs1(नोड, नल)

      • वापसी रिट

  • मुख्य विधि से निम्न कार्य करें -

  • रिट:=0, ऑप्ट:=एक नई सूची, गाओ:=0

    • नोड के लिए 0 से ग्राफ़ के आकार की सीमा में, करें

      • यदि नोड दृश्य में मौजूद है, तो

        • अगले पुनरावृत्ति के लिए जाएं

      • रेस:=ट्रीडेप्थ (नोड)

      • गाना :=अधिकतम गाना, रेस

      • ऑप्ट के अंत में (res / 2) की सीलिंग डालें

    • यदि ऑप्ट का आकार <=1 है, तो

      • वापसी गाना

    • एमएक्स:=अधिकतम ऑप्ट

    • मैं के लिए 0 से लेकर ऑप्ट के आकार तक, करें

      • अगर ऑप्ट [i] एमएक्स के समान है, तो

        • ऑप्ट [i] :=ऑप्ट [i] − 1

        • लूप से बाहर आएं

    • मैं के लिए 0 से लेकर ऑप्ट के आकार तक, करें

      • ऑप्ट [i] :=ऑप्ट [i] + 1

    • high2 :=ऑप्ट से सबसे बड़े 2 तत्व।

    • अधिकतम योग (उच्च 2) लौटाएं और गाएं

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

उदाहरण

import heapq, math
class Solution:
   def solve(self, graph):
      seen = set()
      dic = graph
      def treeDepth(node):
         self.ret = 0
         def dfs1(node, parent):
            seen.add(node)
            best2 = []
            for nxt in dic[node]:
               if nxt != parent:
                  heapq.heappush(best2, dfs1(nxt, node) + 1)
                  if len(best2) > 2:
                     heapq.heappop(best2)
            if not best2:
               return 0
            self.ret = max(self.ret, sum(best2))
            return max(best2)
         dfs1(node, None)
         return self.ret
      ret = 0
      opt = []
      sing = 0
      for node in range(len(graph)):
         if node in seen:
            continue
         res = treeDepth(node)
         sing = max(sing, res)
         opt.append(int(math.ceil(res / 2)))
      if len(opt) <= 1:
         return sing
      mx = max(opt)
      for i in range(len(opt)):
         if opt[i] == mx:
            opt[i] −= 1
            break
         for i in range(len(opt)):
            opt[i] += 1
         high2 = heapq.nlargest(2, opt)
         return max(sum(high2), sing)
ob = Solution()
graph = [
   [1, 2],
   [0,3,4],
   [0],
   [1],
   [1],
   [6,7],
   [5],
   [5]
]
print(ob.solve(graph))

इनपुट

graph = [
   [1, 2],
   [0,3,4],
   [0],
   [1],
   [1],
   [6,7],
   [5],
   [5]
]

आउटपुट

4

  1. QuickSort के लिए पायथन प्रोग्राम

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे। समस्या कथन - हमें एक सरणी दी गई है, हमें इसे क्विकॉर्ट की अवधारणा का उपयोग करके क्रमबद्ध करने की आवश्यकता है यहां हम पहले सरणी को विभाजित करते हैं और क्रमबद्ध सरणी प्राप्त करने के लिए अलग विभाजन को सॉर्ट करते हैं। आइए अब नीचे दि

  1. पायथन कार्यक्रम में साधारण रुचि

    इस लेख में, हम Python 3.x में साधारण ब्याज की गणना के बारे में जानेंगे। या पहले। साधारण रुचि भुगतानों के बीच बीते दिनों की संख्या से दैनिक ब्याज दर को मूल राशि से गुणा करके गणना की जाती है। गणितीय रूप से, साधारण ब्याज =(पी एक्स टी एक्स आर)/100 कहां, पी मूल राशि है T समय है और आर दर है उदाहर

  1. पायथन प्रोग्राम में सिलेक्शन सॉर्ट

    इस लेख में, हम Python 3.x में सिलेक्शन सॉर्ट और उसके कार्यान्वयन के बारे में जानेंगे। या पहले। चयन क्रम . में एल्गोरिथम, एक सरणी को पुनरावर्ती रूप से अनसोल्ड भाग से न्यूनतम तत्व ढूंढकर और शुरुआत में सम्मिलित करके सॉर्ट किया जाता है। किसी दिए गए सरणी पर चयन क्रम के निष्पादन के दौरान दो उप-सरणी बनते