কম্পিউটার টিউটোরিয়াল

পাইথনে ওজন ও মান দিয়ে ন্যাপস্যাক সমস্যা সমাধানের প্রোগ্রাম


मान लीजिए हमारे पास weights और values नामक दो सूचियां हैं जो समान लंबाई की हैं और एक अन्य संख्या जिसे क्षमता k कहते हैं। यहां weights[i] और values[i] i-वें आइटम का वजन और मूल्य दिखाते हैं। अब, हम अधिकतम k क्षमता का वजन ले सकते हैं, और हम प्रत्येक आइटम की अधिकतम एक प्रति ले सकते हैं, हमें प्राप्त होने वाले मूल्य की अधिकतम मात्रा ढूंढनी है।

उदाहरण के लिए, यदि इनपुट है weights = [2, 3, 4], values = [2, 6, 4], capacity = 6, तो आउटपुट होगा 8

इसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंगे:

  • n := weights का आकार
  • dp := आकार क्षमता x n का एक मैट्रिक्स, और 0 से भरें
  • i के लिए 0 से n तक की रेंज में, करें
    • j के लिए 0 से क्षमता तक की रेंज में, करें
      • यदि i, 0 के समान है या j, 0 के समान है, तो
        • dp[i, j] := 0
      • अन्यथा जब weights[i-1] <= j, तो
        • dp[i,j] = (dp[i-1, j-weights[i - 1]] + values[i-1]) और (dp[i-1, j]) का अधिकतम
      • अन्यथा,
        • dp[i, j] := dp[i-1, j]
  • dp[n, क्षमता] वापस करें

बेहतर समझ के लिए निम्नलিখित कार्यান्वयन देखें:

उदाहरण

class Solution:    def solve(self, weights, values, capacity):       n=len(weights)       dp=[[0 for i in range(capacity+1)]       for _ in range(n+1)]          for i in range(n+1):             for j in range(capacity+1):                if i==0 or j==0:                   dp[i][j]=0                   elif weights[i-1]<=j:                      dp[i][j]=max(dp[i-1][j-weights[i-1]]+values[i-1],dp[i-1][j])                   else:                      dp[i][j]=dp[i-1][j]       return dp[n][capacity] ob = Solution() weights = [2, 3, 4] values = [2, 6, 4] capacity = 6 print(ob.solve(weights, values, capacity))

इनपुट

[2, 3, 4], [2, 6, 4], 6

आउटपुट

8

  1. পাইথনে স্টক মার্কেটে একাধিকবার কেনা-বেচা করে সর্বাধিক লাভ বের করার প্রোগ্রাম

  2. পাইথনে স্টক মার্কেটে একবার কেনা-বেচা করে সর্বাধিক লাভ বের করার প্রোগ্রাম

  3. পাইথন প্রোগ্রাম ডিকশনারির সব আইটেমের যোগফল বের করা

  4. পাইথনে তিনটি সংখ্যার মধ্যে সর্বোচ্চ মান বের করা