Competitive Programming Academy · पाठ

Space-Optimized Knapsack

2D को एक single row में बदलें

पाठ 2, कुल 4 में से13 चरण

Space-Optimized Knapsack, CoddyKit पर Competitive Programming Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Competitive Programming Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Competitive Programming Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

स्थान का अनुकूलन क्यों करें

पूरी सारणी के लिए n गुणा cap स्मृति चाहिए, जो बड़े आगत पर बहुत अधिक हो सकती है। स्थान अनुकूलन इसे दोबारा उपयोग की जाने वाली एक पंक्ति तक घटा देता है।

केवल पिछली पंक्ति महत्वपूर्ण है

ध्यान दीजिए कि हर खाना केवल पिछली पंक्ति पढ़ता है, उससे पहले की किसी पंक्ति को नहीं। इसलिए पूरी सारणी को एक साथ सहेजने की आवश्यकता नहीं है।

एक सारणी तक सीमित करें

cap+1 लंबाई वाली एक dp सारणी रखिए। हर वस्तु को संसाधित करते समय, नई पंक्ति दर्शाने के लिए उसी में मान बदलते जाइए।

dp = [0] * (cap + 1)

पुनः उपयोग का जाल

यदि आप क्षमता पर बाएँ से दाएँ चलते हैं, तो dp[w - wt[i]] इसी वस्तु के लिए पहले ही बदल चुका हो सकता है। इससे आप वस्तु i को दो बार ले पाएँगे।

क्षमता पर पीछे की ओर चलें

इसका समाधान है कि क्षमता पर बड़े मान से छोटे मान की ओर लूप चलाया जाए। पीछे की ओर चलने से dp[w - wt[i]] में पिछली पंक्ति का मान ही बना रहता है।

for w in range(cap, wt[i] - 1, -1):
    dp[w] = max(dp[w], val[i] + dp[w - wt[i]])

पीछे की ओर चलना क्यों काम करता है

जब आप dp[w] निकालते हैं, तब छोटा सूचकांक w - wt[i] इस चरण में अभी भी अछूता रहता है, इसलिए वह अपेक्षित पिछली पंक्ति को दर्शाता है।

भार तक ही जल्दी रुकें

wt[i] से कम क्षमताओं में वस्तु नहीं समा सकती, इसलिए लूप wt[i] पर रुक जाता है। उन्हें छोड़ने से कुछ अनावश्यक चक्र बच जाते हैं।

पूरा लूप

पूरा समाधान एक सारणी पर चलने वाले दो नेस्टेड लूप हैं। बाहर वस्तुएँ, भीतर क्षमता पर पीछे की ओर चलना, और उत्तर अपने-आप मिल जाता है।

for i in range(n):
    for w in range(cap, wt[i] - 1, -1):
        dp[w] = max(dp[w], val[i] + dp[w - wt[i]])

अंतिम खाना पढ़ें

सभी वस्तुओं के बाद dp[cap] में अधिकतम मूल्य होता है। कम स्मृति में यह वही संख्या देता है जो 2D सारणी देती।

वही समय, कम स्मृति

आपने एल्गोरिदम को तेज़ नहीं किया; इसमें अब भी n गुणा cap काम लगता है। आपने केवल स्मृति को द्विघाती से रैखिक कर दिया है।

कब इसका लाभ मिलता है

जब cap बड़ा हो और 2D सारणी स्मृति-सीमा पार कर जाए, तब यह तरकीब आपको बचाती है। यह प्रतियोगिताओं में बार-बार काम आने वाली महत्वपूर्ण विधि है।

त्वरित जाँच

1D थैला-समस्या के मुख्य नियम की जाँच कीजिए।

पुनरावृत्ति

आपने 2D सारणी को एक सारणी में बदल दिया और सही परिणाम के लिए क्षमता पर पीछे की ओर लूप चलाया, यानी द्विघाती स्मृति को रैखिक स्मृति से बदल दिया। 🚀

शुरुआत निःशुल्क

एआई शिक्षक के साथ Python सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
30
पाठ
120

अक्सर पूछे जाने वाले प्रश्न

क्या “Space-Optimized Knapsack” पाठ निःशुल्क है?

हाँ—“Space-Optimized Knapsack” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Competitive Programming Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Competitive Programming Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“Space-Optimized Knapsack” में मैं क्या सीखूँगा?

2D को एक single row में बदलें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Competitive Programming Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Competitive Programming Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Competitive Programming Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“Space-Optimized Knapsack” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Competitive Programming Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Competitive Programming Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. 0/1 Knapsack: लें या छोड़ें
  2. Space-Optimized Knapsack
  3. Unbounded और Coin-Change DP
  4. Subset Sum और Partition
← Competitive Programming Academy पर वापस जाएँ