इस लेख में हम दी गई समस्या के समाधान के बारे में जानेंगे।
समस्या कथन
हमें n वस्तुओं के वजन और मूल्य दिए गए हैं, हमें इन वस्तुओं को क्षमता W के बैग में अधिकतम क्षमता w तक रखना है। हमें अधिकतम वस्तुओं को ले जाने की आवश्यकता है और उसका मूल्य वापस करना है।
उदाहरण (साधारण दृष्टिकोण)
# बैग द्वारा संग्रहीत किए जा सकने वाले अधिकतम मूल्य को लौटाता है
def knapSack(W, wt, val, n):
# प्रारंभिक शर्तें
if n == 0 or W == 0:
return 0
# यदि वजन क्षमता से अधिक है तो इसे शामिल नहीं किया जाता
if (wt[n-1] > W):
return knapSack(W, wt, val, n-1)
# या तो nth आइटम शामिल है या नहीं
else:
return max(val[n-1] + knapSack(W-wt[n-1], wt, val, n-1),
knapSack(W, wt, val, n-1))
# उपरोक्त फ़ंक्शन का परीक्षण करने के लिए
val = [50, 100, 150, 200]
wt = [8, 16, 32, 40]
W = 64
n = len(val)
print(knapSack(W, wt, val, n))
आउटपुट
350
उदाहरण (डायनामिक दृष्टिकोण)
# एक डायनामिक दृष्टिकोण
# बैग द्वारा संग्रहीत किए जा सकने वाले अधिकतम मूल्य को लौटाता है
def knapSack(W, wt, val, n):
K = [[0 for x in range(W + 1)] for x in range(n + 1)]
# बॉटम-अप तरीके से टेबल
for i in range(n + 1):
for w in range(W + 1):
if i == 0 or w == 0:
K[i][w] = 0
elif wt[i-1] <= w:
K[i][w] = max(val[i-1] + K[i-1][w-wt[i-1]], K[i-1][w])
else:
K[i][w] = K[i-1][w]
return K[n][W]
# मुख्य
val = [50, 100, 150, 200]
wt = [8, 16, 32, 40]
W = 64
n = len(val)
print(knapSack(W, wt, val, n))
आउटपुट
350
निष्कर्ष
इस लेख में हमने 0-1 नैपसैक समस्या के पायथन प्रोग्राम के बारे में सीखा।