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

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

मान लीजिए कि हमारे पास सकारात्मक पूर्णांकों की एक सरणी है, सभी बाइनरी पेड़ों पर विचार करें जैसे कि -

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

सभी संभावित द्विआधारी पेड़ों में से, हमें प्रत्येक गैर-पत्ती नोड के मूल्यों का सबसे छोटा संभव योग खोजना होगा। इसलिए यदि इनपुट गिरफ्तारी [6,2,4] है, तो आउटपुट 32 होगा, क्योंकि संभवतः दो पेड़ हो सकते हैं -

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

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

  • मेमो नाम का एक नक्शा बनाएं
  • एक विधि dp() परिभाषित करें, यह i और j को पैरामीटर के रूप में लेगा। यह इस प्रकार काम करेगा -
  • अगर j <=i, तो वापस 0
  • यदि (i, j) मेमो में है, तो मेमो वापस करें[(i, j)]
  • res :=अनंत
  • k के लिए i से j – 1 की श्रेणी में
    • res :=res का मिनट, dp(i, k) + dp(k + 1, j) + (इंडेक्स i से k + 1 तक एआर की अधिकतम सबएरे) * k + 1 से एआर की अधिकतम सबएरे से जे + 1
  • ज्ञापन[(i, j)] :=res
  • रिटर्न मेमो[(i, j)]
  • मुख्य विधि इस dp() विधि को - कॉल dp(0, गिरफ्तारी की लंबाई -1) के रूप में बुलाएगी

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

उदाहरण

class Solution(object):
   def mctFromLeafValues(self, arr):
      """
      :type arr: List[int]
      :rtype: int
      """
      self. memo = {}
      def dp(i,j):
         if j<=i:
            return 0
         if (i,j) in self.memo:
            return self.memo[(i,j)]
         res = float('inf')
         for k in range(i,j):
            res = min(res,dp(i,k) + dp(k+1,j) + (max(arr[i:k+1])*max(arr[k+1:j+1])))
         self.memo[(i,j)]=res
         return self.memo[(i,j)]
      return dp(0,len(arr)-1)

इनपुट

[6,2,4]

आउटपुट

32

  1. पायथन में बाइनरी ट्री से स्ट्रिंग का निर्माण

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है जिसे हमें एक स्ट्रिंग बनाना है जिसमें प्रीऑर्डर ट्रैवर्सिंग तरीके से एक बाइनरी ट्री से कोष्ठक और पूर्णांक होते हैं। एक अशक्त नोड को खालीपैरेंटेसिस जोड़ी () द्वारा दर्शाया जाएगा। और हमें उन सभी खाली कोष्ठक युग्मों को छोड़ना होगा जो स्ट्रिंग और मूल बाइनरी ट्री

  1. पायथन में न्यूनतम लागत वाले शहरों को जोड़ना

    मान लीजिए कि 1 से N तक N शहरों की संख्या है। हमारे पास कनेक्शन हैं, जहां प्रत्येक कनेक्शन [i] [शहर 1, शहर 2, लागत] है, यह शहर 1 और शहर 2 को एक साथ जोड़ने की लागत का प्रतिनिधित्व करता है . हमें न्यूनतम लागत का पता लगाना होगा ताकि शहरों की प्रत्येक जोड़ी के लिए, कनेक्शन का एक मार्ग मौजूद हो (संभवतः लं

  1. पायथन में पत्ती से शुरू होने वाला सबसे छोटा तार

    मान लीजिए कि हमारे पास एक बाइनरी ट्री की जड़ है, प्रत्येक नोड में 0 से 25 तक का मान होता है, जो ए से जेड अक्षरों का प्रतिनिधित्व कर रहा है:0 का मान ए का प्रतिनिधित्व करता है, 1 का मान बी का प्रतिनिधित्व करता है , और इसी तरह। हमें शब्दावली की दृष्टि से सबसे छोटी स्ट्रिंग की खोज करनी है जो इस पेड़ के