Competitive Programming Academy · पाठ

Subset Sum और Partition

चुने हुए subset से target तक पहुँचें

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

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

उपसमुच्चय योग का प्रश्न

संख्याएँ और एक लक्ष्य दिए होने पर, क्या कोई उपसमुच्चय ठीक उसी लक्ष्य के बराबर योग दे सकता है? यह वह थैला-समस्या है जिसमें मूल्य और भार बराबर होते हैं।

मान नहीं, बूलियन DP

यहाँ आप अधिकतम मान नहीं, बल्कि पहुँच-योग्यता देखते हैं। मान लीजिए dp[s] True है, जब कोई उपसमुच्चय ठीक s का योग देता है।

dp = [False] * (target + 1)
dp[0] = True

शून्य तक हमेशा पहुँचा जा सकता है

रिक्त उपसमुच्चय का योग शून्य होता है, इसलिए dp[0] की शुरुआत True से होती है। हर दूसरी राशि तब तक False रहती है, जब तक कोई संख्या उसके पहुँच योग्य होने को सिद्ध न कर दे।

संक्रमण

हर संख्या के लिए s को पहुँच योग्य चिह्नित कीजिए, यदि s - num पहले से पहुँच योग्य था। एक संख्या कई राशियों को True में बदल सकती है।

for num in nums:
    for s in range(target, num - 1, -1):
        dp[s] = dp[s] or dp[s - num]

फिर पीछे की ओर

हर संख्या का उपयोग अधिकतम एक बार होता है, इसलिए भीतरी लूप पीछे की ओर चलता है, ठीक 0/1 थैला-समस्या की तरह। आगे की ओर चलने पर संख्या का पुनः उपयोग होगा।

निर्णय पढ़ें

सभी संख्याओं को संसाधित करने के बाद dp[target] प्रश्न का उत्तर देता है। True का अर्थ है कि कोई मान्य उपसमुच्चय मौजूद है; False का अर्थ है कि यह असंभव है।

विभाजन समस्या से परिचय

विभाजन समस्या पूछती है: क्या आप सारणी को समान योग वाले दो भागों में बाँट सकते हैं? यह सीधे उपसमुच्चय योग की समस्या में बदल जाती है।

कुल योग का आधा करें

यदि कुल योग विषम है, तो समान भाग असंभव हैं, इसलिए तुरंत नहीं का उत्तर दीजिए। अन्यथा लक्ष्य बस total // 2 है।

total = sum(nums)
if total % 2:
    return False
target = total // 2

उपसमुच्चय योग का पुनः उपयोग करें

अब केवल यह पूछिए कि क्या कोई उपसमुच्चय total // 2 तक पहुँचता है। यदि एक भाग लक्ष्य तक पहुँच जाता है, तो शेष भाग अपने-आप मेल खाता हुआ दूसरा भाग बन जाता है।

जटिलता

लागत n गुणा लक्ष्य के क्रम की है, यानी छद्म-बहुपदीय सीमा। लक्ष्य छोटा हो तो यह तेज़ है, लेकिन योग बहुत बड़े हों तो धीमा।

समस्याओं का एक परिवार

उपसमुच्चय योग, विभाजन और 0/1 नैपसैक में एक ही आधारभूत विधि साझा होती है। लेने-या-छोड़ने वाला ढाँचा पहचानिए और उसी लूप का फिर से उपयोग कीजिए।

त्वरित जाँच

विभाजन में किए गए रूपांतरण का परीक्षण कीजिए।

पुनरावलोकन

आपने बूलियन DP और पीछे की ओर चलने वाले लूप से उपसमुच्चय योग हल किया, फिर विभाजन को कुल योग // 2 तक पहुँचने में बदल दिया। वही आधारभूत विधि, नई सफलताएँ। ✅

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

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

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

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

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

क्या “Subset Sum और Partition” पाठ निःशुल्क है?

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

“Subset Sum और Partition” में मैं क्या सीखूँगा?

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

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

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

“Subset Sum और Partition” पाठ पूरा करने में कितना समय लगता है?

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 पर वापस जाएँ