Competitive Programming Academy · पाठ

Bitmask Subset Enumeration

integers के माध्यम से सभी subsets पर जाएँ

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

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

संख्याओं के रूप में उपसमुच्चय

n वस्तुओं का प्रत्येक उपसमुच्चय एक ही पूर्णांक से जुड़ता है। 0 से ऊपर तक गिनें, और प्रत्येक संख्या के बिट ठीक यह चुनते हैं कि कौन-सी वस्तुएँ शामिल हैं। 🙂

कितने उपसमुच्चय

n तत्वों वाले समुच्चय के 2^n उपसमुच्चय होते हैं। इसलिए किसी पूर्णांक को 0 से 2^n माइनस 1 तक लूप करने पर हर उपसमुच्चय ठीक एक बार देखा जाता है।

for mask in range(1 << n):
    pass  # mask is one subset

1 << n ही संख्या है

1 << n का शिफ्ट 2 की घात n के बराबर होता है। अपने उपसमुच्चय वाले लूप की ऊपरी सीमा लिखने का यह साफ़ और तेज़ तरीका है।

iवाँ बिट पढ़ें

यह जानने के लिए कि आइटम i उपसमुच्चय में है या नहीं, उसके बिट को i स्थान बाईं ओर खिसकाए गए 1 वाले मास्क से जाँचें। शून्येतर परिणाम का अर्थ है कि वह शामिल है।

if mask & (1 << i):
    take(items[i])

चुनी गई सूची बनाएँ

हर बिट स्थान पर जाएँ और उन तत्वों को इकट्ठा करें जिनका बिट सेट है। इस तरह एक मास्क से उसके द्वारा दर्शाया गया वास्तविक उपसमुच्चय मिल जाता है।

chosen = [items[i] for i in range(n) if mask & (1 << i)]

रिक्त और पूर्ण समुच्चय

मास्क 0 रिक्त उपसमुच्चय है, और सभी 1 वाला मास्क पूर्ण समुच्चय है। आपका लूप हर मान को कवर करता है, इसलिए दोनों अपने-आप शामिल हो जाते हैं।

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

लूप के भीतर चुने गए तत्वों को जोड़कर हर उपसमुच्चय का मान निकालें। यह कई छोटे पूर्ण-खोज समाधानों का मूल है।

total = sum(v[i] for i in range(n) if mask & (1 << i))

सेट बिटों की संख्या गिनें

चुने गए तत्वों की संख्या मास्क में मौजूद 1-बिटों की संख्या के बराबर होती है। पाइथन में, bin(mask).count('1') इसे तुरंत दे देता है।

size = bin(mask).count("1")

सीमा पर ध्यान दें

चूँकि 2^n उपसमुच्चय होते हैं, यह तकनीक केवल छोटे n के लिए उपयुक्त है। पूर्ण गणना के लिए लगभग n = 20 व्यावहारिक ऊपरी सीमा है।

बिट-मास्क क्यों बेहतर हैं

एक पूर्णांक वाला लूप उलझे हुए नेस्टेड लूपों की जगह लेता है, और बिट संचालन तेज़ होते हैं। कोड छोटा, स्पष्ट और परीक्षण करने में आसान रहता है।

दोबारा उपयोग करने योग्य तरीका

मास्क पर लूप चलाएँ, उसके बिट पढ़ें, उपसमुच्चय का मान निकालें और सबसे अच्छे परिणाम को सहेजें। इस रूपरेखा को याद कर लें, तो कई उपसमुच्चय वाली समस्याएँ आसान हो जाती हैं।

त्वरित जाँच

आप यह जाँचना चाहते हैं कि मास्क में कूटबद्ध उपसमुच्चय में आइटम i शामिल है या नहीं।

पुनरावलोकन

मास्क को 0 से 2^n माइनस 1 तक लूप करें, मास्क और बाईं ओर खिसकाए गए 1 से बिट पढ़ें, और हर उपसमुच्चय का मान निकालें। छोटे n के लिए यह साफ़-सुथरी पूर्ण खोज है। 🚀

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

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

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

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

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

क्या “Bitmask Subset Enumeration” पाठ निःशुल्क है?

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

“Bitmask Subset Enumeration” में मैं क्या सीखूँगा?

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

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

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

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

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

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

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

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

  1. Brute Force एक मान्य Strategy है
  2. itertools से Enumerate करना
  3. Bitmask Subset Enumeration
  4. Search Space को समझदारी से छोटा करें
← Competitive Programming Academy पर वापस जाएँ