विभाजन-और-जीत, लोभी, तथा गतिक प्रोग्रामन
कौन-सी तकनीक, और क्यों
| तकनीक | आवश्यकता | एक मानक उदाहरण |
|---|---|---|
| विभाजन-और-जीत | ऐसी उप-समस्याएँ जो अतिव्यापित न हों | मर्ज सॉर्ट, द्विआधारी खोज, काराचुबा |
| गतिक प्रोग्रामन | अतिव्यापी उप-समस्याएँ तथा अनुकूलतम उप-संरचना | LCS, 0/1 नैपसैक, आव्यूह-शृंखला, फ़्लॉयड–वॉरशॉल |
| लोभी | एक उपपाद्य लोभी-चुनाव गुण | भिन्नात्मक नैपसैक, हफ़मैन, क्रुस्कल, कार्य-चयन |
गतिक प्रोग्रामन, तथा सारणी का आकार
गतिक प्रोग्राम एक सारणी तथा एक पुनरावृत्ति है, और उसकी जटिलता प्रायः सदा (कोष्ठों की संख्या) × (प्रति कोष्ठ काम) है। वही एक वाक्य इस विषय के अधिकांश जटिलता-प्रश्नों का उत्तर बिना किसी विश्लेषण दे देता है: लंबाई m व n की मालाओं के LCS की m × n सारणी है जिसका प्रत्येक कोष्ठ O(1) में भरता है, अतः O(mn); 0/1 नैपसैक की n × W सारणी है, अतः O(nW); आव्यूह-शृंखला गुणन की n × n सारणी है जिसका प्रत्येक कोष्ठ n विभाजन-बिंदु तक आज़माता है, अतः O(n³)।
LCS को स्थिर करने हेतु एक हल किया आँकड़ा: AGGTAB व GXTXAYB का दीर्घतम सामान्य उप-अनुक्रम GTAB है, लंबाई 4। ध्यान दें कि उप-अनुक्रम को संलग्न होना आवश्यक नहीं — वही उसे उप-माला से पृथक् करता है, और दोनों को भ्रमित करना O(mn) गतिक प्रोग्राम को भिन्न व सरल समस्या बना देता है।
जहाँ लोभी उपपाद्य है: हफ़मैन
हफ़मैन कूटन वह लोभी कलनविधि है जिसकी उपपत्ति सर्वाधिक स्वच्छ है: बारंबार दो सबसे कम बारंबार प्रतीक मिलाएँ, और परिणाम अनुकूलतम उपसर्ग-कूट होता है। बारंबारताएँ 5, 9, 12, 13, 16 व 45 लें। मिलानों की लागत 14, 25, 30, 44 व 100 है, योग 224, जो कुल कूटित लंबाई भी है — और दोनों सहमत हैं क्योंकि प्रत्येक मिलान अपने नीचे के प्रत्येक प्रतीक में एक बिट जोड़ता है।
| बारंबारता | कूट-लंबाई | योगदान |
|---|---|---|
| 45 | 1 | 45 |
| 16 | 3 | 48 |
| 13 | 3 | 39 |
| 12 | 3 | 36 |
| 9 | 4 | 36 |
| 5 | 4 | 20 |
| कुल | — | 224 बिट |
मुख्य बिंदु
- विभाजन-और-जीत को अ-अतिव्यापी उप-समस्याएँ चाहिए; गतिक प्रोग्रामन इसलिए है कि वे अतिव्यापित होती हैं।
- लोभी को उपपाद्य लोभी-चुनाव गुण चाहिए — वह कभी असत्य होता है और सदा विश्वसनीय लगता है।
- अनुपात से लोभी भिन्नात्मक नैपसैक हेतु अनुकूलतम व 0/1 हेतु गलत है: 240 बनाम 220 अनुकूलतम व 160 लोभी।
- गतिक प्रोग्राम की लागत (कोष्ठ-संख्या) × (प्रति कोष्ठ काम) है: LCS O(mn), नैपसैक O(nW), आव्यूह-शृंखला O(n³)।
- O(nW) छद्म-बहुपदी है — W मान है, आकार नहीं — अतः वह NP-कठिनता का खंडन नहीं करता।
- उप-अनुक्रम को संलग्न होना आवश्यक नहीं; उप-माला को होना ही है।
- हफ़मैन दो सबसे कम बारंबार प्रतीक मिलाता है; 5, 9, 12, 13, 16, 45 पर कुल 224 बिट है।
- सर्वाधिक बारंबार प्रतीक को सबसे छोटा कूट मिलता है, और हफ़मैन वृक्ष अद्वितीय नहीं पर उसका कुल है।
अभ्यास प्रश्न (8)
उत्तर खोलने से पहले प्रत्येक प्रश्न हल करें। हर व्याख्या सही विकल्प के साथ लुभावना गलत विकल्प भी बताती है, क्योंकि अंक वहीं जाते हैं।
0/1 नैपसैक की क्षमता 50 है तथा वस्तुएँ भार 10, 20, 30 व मूल्य 60, 100, 120 की हैं। अधिकतम कुल मूल्य क्या है?
संख्यात्मक उत्तर — मान टाइप करें।
उत्तर देखें
उत्तर: 220
सर्वोत्तम 0/1 चुनाव 20 व 30 है, क्षमता ठीक भरते हुए 100 + 120 = 220। प्रति भार मूल्य से लोभी 10 (अनुपात 6) व 20 (अनुपात 5) लेता, भार 30 पर पहुँचता, और 30 को समा नहीं पाता — 160 पर रुकते हुए। और भिन्नात्मक उत्तर 240 है, अंतिम वस्तु का दो-तिहाई लेते हुए। एक वस्तु-सूची हेतु तीन भिन्न संख्याएँ, और कौन-सी सही है यह पूर्णतः इस पर निर्भर है कि वस्तुएँ विभाजित हो सकती हैं या नहीं। कुछ भी निकालने से पूर्व प्रश्न से वह पढ़ना ही सम्पूर्ण कौशल है; 240 उस प्रश्न का उत्तर है जो पूछा नहीं गया।प्रति एकांक भार मूल्य से लोभी उपपाद्य रूप से अनुकूलतम है:
उत्तर देखें
उत्तर: B — भिन्नात्मक नैपसैक हेतु
केवल भिन्नात्मक संस्करण हेतु। उपपत्ति इस पर निर्भर है कि बची किसी भी क्षमता को अगली-सर्वोत्तम वस्तु के अंश से भरा जा सके, अतः कोई क्षमता कभी व्यर्थ नहीं जाती — विभाज्यता हटाएँ और तर्क ढह जाता है, क्योंकि बचा अंतराल कुछ भी न समा सके। ऊपर का उदाहरण हानि दिखाता है: जहाँ 220 उपलब्ध है वहाँ लोभी 160 पाता है। विकल्प C वह उत्तर है जो अभ्यर्थी भिन्नात्मक स्थिति पर लोभी को काम करते देखकर सामान्यीकरण से देता है, और ठीक वही आदत तोड़ने हेतु यह युग्म है। 0/1 को गतिक प्रोग्रामन चाहिए, O(nW) पर।प्रतीकों की बारंबारताएँ 5, 9, 12, 13, 16 व 45 हैं। अनुकूलतम हफ़मैन कूटन की कुल लंबाई बिटों में क्या है?
संख्यात्मक उत्तर — मान टाइप करें।
उत्तर देखें
उत्तर: 224
हर बार दो सबसे कम बारंबार मिलाने पर 14 (5+9), 25 (12+13), 30 (14+16), 44 (कतार-क्रम से 25+30…) तथा अंततः 100 के मिलान मिलते हैं, और मिलान-लागतों का योग 224 है — जो कुल कूटित लंबाई है, क्योंकि प्रत्येक मिलान अपने नीचे के प्रत्येक प्रतीक में एक बिट जोड़ता है। दूसरे प्रकार से जाँचने पर सहमति मिलती है: 45, 16, 13, 12, 9, 5 हेतु कूट-लंबाइयाँ 1, 3, 3, 3, 4, 4 निकलती हैं, और 45×1 + 16×3 + 13×3 + 12×3 + 9×4 + 5×4 = 224। दोनों प्रकार से निकालना यहाँ विश्वसनीय आदत है, क्योंकि मिलान-योग विधि तेज़ है और लंबाई-विधि गलत बने वृक्ष को पकड़ती है।0/1 नैपसैक गतिक प्रोग्राम O(nW) में चलता है। चूँकि 0/1 नैपसैक NP-कठिन है, इसका अर्थ है:
उत्तर देखें
उत्तर: B — परिबंध छद्म-बहुपदी है, क्योंकि W मान है, निवेश-आकार नहीं
क्षमता W लिखने में लगभग log₂W बिट लगते हैं, अतः जिस कलनविधि का चलन-समय W के अनुपाती है वह उस निवेश की लंबाई में चरघातांकी है। उसे छद्म-बहुपदी कहते हैं, और वह प्रत्यक्ष विरोधाभास को किसी को अस्थिर किए बिना सुलझा देती है: कलनविधि सही है, समस्या अभी भी NP-कठिन है, और P बनाम NP के विषय में कोई दावा नहीं। व्यावहारिक पाठ ही उपयोगी है — सारणी-विधि कुछ हज़ार क्षमता हेतु ठीक है और 64-बिट क्षमता हेतु निराशाजनक, और वह उदाहरण की संख्याओं के विषय में कथन है, वस्तुओं की संख्या के विषय में नहीं।AGGTAB व GXTXAYB का दीर्घतम सामान्य उप-अनुक्रम कितना लंबा है?
संख्यात्मक उत्तर — मान टाइप करें।
उत्तर देखें
उत्तर: 4
LCS है GTAB, लंबाई 4। अक्षरों को किसी भी माला में सटा होना आवश्यक नहीं — वही उसे उप-माला के बजाय उप-अनुक्रम बनाता है, और संलग्न मेल ढूँढ़ता अभ्यर्थी केवल लंबाई 1 या 2 पाता है। गतिक प्रोग्राम m × n सारणी है जहाँ अक्षर मिलने पर कोष्ठ 1 + विकर्ण है और अन्यथा अपने दोनों पड़ोसियों में बड़ा, अतः लागत O(mn) है — यहाँ 6 × 7 = 42 कोष्ठ। उप-अनुक्रम बनाम उप-माला का भेद स्पष्ट रूप से पढ़ने योग्य है, क्योंकि दोनों समस्याओं के उत्तर व कलनविधियाँ भिन्न हैं।अनुकूलतम हफ़मैन कूट के विषय में निम्नलिखित में कौन सत्य हैं? (एक से अधिक सही हो सकते हैं।)
उत्तर देखें
उत्तर: A — सर्वाधिक बारंबार प्रतीक का कूट किसी कम बारंबार प्रतीक से लंबा कभी नहीं होता; B — कोई कूट-शब्द किसी अन्य का उपसर्ग नहीं होता
A व B। A यहाँ अनुकूलतमता का अर्थ ही है — यदि किसी विरल प्रतीक का कूट छोटा होता, तो दोनों की अदला-बदली कुल घटा देती, अतः किसी अनुकूलतम कूट की वह आकृति नहीं हो सकती, और यह आपको प्रस्तावित निर्दिष्टीकरण देखते ही अस्वीकार करने देता है। B उपसर्ग-मुक्त गुण है, जो कूट को विभाजकों के बिना विकोडनीय बनाता है और प्रत्याभूत है क्योंकि प्रत्येक प्रतीक पत्ती पर बैठता है। C असत्य है: प्राथमिकता-कतार में बराबरी किसी भी प्रकार टूट सकती है, अतः कई भिन्न वृक्ष वही कुल प्राप्त करते हैं — यहाँ 224 — इसीलिए कुल पूछता प्रश्न सुगठित है और कोई विशेष कूट-शब्द पूछता प्रश्न नहीं भी हो सकता। D नियत-लंबाई कूट का वर्णन करता है, जिसे हफ़मैन सुधारता है।आव्यूह-शृंखला गुणन गतिक प्रोग्रामन से हल होता है:
उत्तर देखें
उत्तर: B — O(n³)
O(n³), सीधे उस नियम से कि गतिक प्रोग्राम की लागत कोष्ठ × प्रति कोष्ठ काम है: सारणी उप-शृंखलाओं पर n × n है, और एक कोष्ठ भरना उस उप-शृंखला के भीतर प्रत्येक विभाजन-बिंदु आज़माता है, जो n तक हैं। विकल्प C सभी कोष्ठकनों को सूचीबद्ध करने की लागत है, जो कैटलन-अनेक है और ठीक वही जिसे टालने हेतु सारणी है। यह वह मानक प्रदर्शन भी है कि गुणन का क्रम उत्तर बदले बिना महत्व रखता है — गुणनफल वही है, अदिश गुणनों की संख्या नहीं, और इसीलिए समस्या हल करने योग्य है।गतिक प्रोग्रामन साधारण विभाजन-और-जीत से वरीय ठीक तब है जब:
उत्तर देखें
उत्तर: B — उप-समस्याएँ अतिव्यापित हों, अतः वही एक बारंबार हल हो
अतिव्यापी उप-समस्याएँ ही सम्पूर्ण शर्त हैं, और दोनों तकनीकें उसी अंतर पर घूमती हैं। मर्ज सॉर्ट के आधे असंयुक्त हैं, अतः परिणाम संचित करने से कुछ न मिलता — पुनरावृत्ति कभी नहीं होती। फिबोनाची व LCS वही उप-समस्या अनेक बार देखते हैं, अतः संचय चरघातांकी पुनरावर्तन को बहुपदी सारणी में ढहा देता है। गतिक प्रोग्रामन को दूसरी शर्त अनुकूलतम उप-संरचना चाहिए, कि अनुकूलतम हल उप-समस्याओं के अनुकूलतम हलों से बने; उसके बिना सारणी वे उत्तर संचित करती जिन्हें संयोजित नहीं किया जा सकता। विकल्प A अप्रासंगिक है — बहुत से गतिक प्रोग्राम अधिकतम करते हैं, और बहुत सी विभाजन-और-जीत कलनविधियाँ कुछ भी अनुकूलित नहीं करतीं।