गतिविधि चयन समस्या: Difference between revisions

From Vigyanwiki
Line 37: Line 37:
ध्यान दें कि इन ऐरे को 1 से शुरू करके संबंधित ऐरे की लंबाई तक अनुक्रमित किया जाता है।
ध्यान दें कि इन ऐरे को 1 से शुरू करके संबंधित ऐरे की लंबाई तक अनुक्रमित किया जाता है।


लाइन 3: ऐरे <math>f</math> में संग्रहीत समाप्ति समय का उपयोग करके गतिविधियों की ऐरे <math>A</math> को समापन समय के बढ़ते क्रम में क्रमबद्ध करें। उदाहरण के लिए मर्ज सॉर्ट, हीप सॉर्ट, या क्विक सॉर्ट एल्गोरिदम का उपयोग करके यह ऑपरेशन <math>O(n \cdot \log n)</math> समय में किया जा सकता है।
'''लाइन 3:''' ऐरे <math>f</math> में संग्रहीत समाप्ति समय का उपयोग करके गतिविधियों की ऐरे <math>A</math> को समापन समय के बढ़ते क्रम में क्रमबद्ध करें। उदाहरण के लिए मर्ज सॉर्ट, हीप सॉर्ट, या क्विक सॉर्ट एल्गोरिदम का उपयोग करके यह ऑपरेशन <math>O(n \cdot \log n)</math> समय में किया जा सकता है।


लाइन 4: एक सेट बनाएं <math>S</math> चयनित गतिविधियों को संग्रहीत करने के लिए, और इसे गतिविधि के साथ प्रारंभ करने के लिए <math>A[1]</math> जिसका जल्द से जल्द खत्म होने का समय है।
'''लाइन 4:''' एक सेट बनाएं <math>S</math> चयनित गतिविधियों को संग्रहीत करने के लिए, और इसे गतिविधि के साथ प्रारंभ करने के लिए <math>A[1]</math> जिसका जल्द से जल्द खत्म होने का समय है।


लाइन 5: एक वेरिएबल <math>k</math> बनाता है जो अंतिम चयनित गतिविधि के सूचकांक का ट्रैक रखता है।
'''लाइन 5:''' एक वेरिएबल <math>k</math> बनाता है जो अंतिम चयनित गतिविधि के सूचकांक का ट्रैक रखता है।


लाइन 9: उस सरणी <math>A</math> के दूसरे एलिमेंट से उसके अंतिम एलिमेंट तक पुनरावृति शुरू करता है।
'''लाइन 9:''' उस सरणी <math>A</math> के दूसरे एलिमेंट से उसके अंतिम एलिमेंट तक पुनरावृति शुरू करता है।


लाइन 10,11: यदि <math>ith</math> गतिविधि <math>A[i]</math> का ''प्रारंभ समय'' <math>s[i]</math> अंतिम चयनित गतिविधि <math>A[k]</math> के समापन समय <math>f[k]</math> से अधिक या बराबर है, तब <math>A[i]</math>सेट <math>S</math> में चयनित गतिविधियों के अनुकूल है, और इस प्रकार इसे <math>S</math> में जोड़ा जा सकता है।
'''लाइन 10,11:''' यदि <math>ith</math> गतिविधि <math>A[i]</math> का ''प्रारंभ समय'' <math>s[i]</math> अंतिम चयनित गतिविधि <math>A[k]</math> के समापन समय <math>f[k]</math> से अधिक या बराबर है, तब <math>A[i]</math>सेट <math>S</math> में चयनित गतिविधियों के अनुकूल है, और इस प्रकार इसे <math>S</math> में जोड़ा जा सकता है।


लाइन 12: अंतिम चयनित गतिविधि का सूचकांक अभी जोड़ी गई गतिविधि <math>A[i]</math> में अद्यतन किया जाता है।
'''लाइन 12:''' अंतिम चयनित गतिविधि का सूचकांक अभी जोड़ी गई गतिविधि <math>A[i]</math> में अद्यतन किया जाता है।


===इष्टतमता का प्रमाण===
===इष्टतमता का प्रमाण===
होने देना <math>S = \{1, 2, \ldots , n\}</math> समापन समय के अनुसार आदेशित गतिविधियों का समूह बनें। ये मान लीजिए <math>A\subseteq S</math> एक इष्टतम समाधान है, जिसे समापन समय के अनुसार भी आदेश दिया गया है; और में पहली गतिविधि का सूचकांक है <math>k\neq 1</math>, यानी, यह इष्टतम समाधान ग्रीडी विकल्प से शुरू नहीं होता है। हम वो दिखाएंगे <math>B = (A \setminus \{k\}) \cup \{1\}</math>, जो ग्रीडी विकल्प (गतिविधि 1) से शुरू होता है, एक और इष्टतम समाधान है। तब से <math>f_1 \leq f_k</math>, और में गतिविधियाँ परिभाषा के अनुसार [[असंयुक्त सेट]] हैं, बी में गतिविधियाँ भी असंयुक्त हैं। चूँकि B की गतिविधियों की संख्या A के समान है, अर्थात <math>|A| = |B|</math>, बी भी इष्टतम है.
मान लीजिए <math>S = \{1, 2, \ldots , n\}</math>समाप्ति समय के अनुसार गतिविधियों का समूह है। मान लें कि <math>A\subseteq S</math> एक इष्टतम समाधान है, जिसे समापन समय के अनुसार भी क्रमबद्ध किया गया है; और ''A'' में पहली गतिविधि का सूचकांक <math>k\neq 1</math> है, यानी, यह इष्टतम समाधान ग्रीडी विकल्प से शुरू नहीं होता है। हम दिखाएंगे कि <math>B = (A \setminus \{k\}) \cup \{1\}</math>, जो ग्रीडी विकल्प (गतिविधि 1) से शुरू होता है, एक और इष्टतम समाधान है। चूँकि <math>f_1 \leq f_k</math>, और ''A'' में गतिविधियाँ परिभाषा के अनुसार असंयुक्त हैं, ''B'' में गतिविधियाँ भी असंयुक्त हैं। चूँकि ''B'' में ''A'' के समान ही गतिविधियाँ हैं, अर्थात <math>|A| = |B|</math>, ''B'' भी इष्टतम है।


एक बार जब ग्रीडी विकल्प चुन लिया जाता है, तो समस्या उप-समस्या के लिए इष्टतम समाधान खोजने तक सीमित हो जाती है। यदि ग्रीडी विकल्प वाली मूल समस्या एस का इष्टतम समाधान है, तो <math>A^\prime = A \setminus \{1\}</math> गतिविधि-चयन समस्या का एक इष्टतम समाधान है <math>S' = \{i \in S: s_i \geq f_1\}</math>.
एक बार जब ग्रीडी विकल्प चुन लिया जाता है, तो समस्या उप-समस्या के लिए एक इष्टतम समाधान खोजने तक सिमट कर रह जाती है। यदि ''A'', ग्रीडी विकल्प वाली मूल समस्या ''S'' का इष्टतम समाधान है, तो <math>A^\prime = A \setminus \{1\}</math> गतिविधि-चयन समस्या <math>S' = \{i \in S: s_i \geq f_1\}</math>का इष्टतम समाधान है।


क्यों? यदि ऐसा नहीं होता, तो A' से अधिक गतिविधियों वाला एक समाधान B' से S' चुनें, जिसमें S' के लिए ग्रीडी विकल्प शामिल हो। फिर, B' में 1 जोड़ने से इष्टतमता के विपरीत, A से अधिक गतिविधियों के साथ S से एक व्यवहार्य समाधान B प्राप्त होगा।
क्यों? यदि ऐसा नहीं होता, तो ''A'<nowiki/>'' से अधिक गतिविधियों वाला एक समाधान ''B'<nowiki/>'' से ''S'<nowiki/>'' चुनें जिसमें ''S''' के लिए ग्रीडी विकल्प हो। फिर, ''B′'' में 1 जोड़ने से इष्टतमता के विपरीत, ''A'' की तुलना में अधिक गतिविधियों के साथ ''S'' से ''S'' का एक व्यवहार्य समाधान प्राप्त होगा।


===भारित गतिविधि चयन समस्या===
===भारित गतिविधि चयन समस्या===

Revision as of 00:09, 6 August 2023

गतिविधि चयन समस्या एक संयुक्त अनुकूलन समस्या है जो एक निश्चित समय सीमा के भीतर प्रदर्शन करने के लिए गैर-परस्पर विरोधी गतिविधियों के चयन से संबंधित है, जिसमें प्रत्येक गतिविधि को प्रारंभ समय (सी) और समाप्ति समय (फाई) द्वारा चिह्नित किया जाता है। समस्या यह है कि एक व्यक्ति या मशीन द्वारा की जा सकने वाली अधिकतम गतिविधियों का चयन किया जाए, यह मानते हुए कि एक व्यक्ति एक समय में केवल एक ही गतिविधि पर काम कर सकता है। गतिविधि चयन समस्या को अंतराल शेड्यूलिंग अधिकतमीकरण समस्या (आईएसएमपी) के रूप में भी जाना जाता है, जो कि अधिक सामान्य अंतराल शेड्यूलिंग समस्या का एक विशेष प्रकार है।

इस समस्या का एक उत्कृष्ट अनुप्रयोग कई प्रतिस्पर्धी घटनाओं के लिए एक कमरे को शेड्यूल करना है, जिनमें से प्रत्येक की अपनी समय की आवश्यकताएं (प्रारंभ और समाप्ति समय) होती हैं, और संचालन अनुसंधान के ढांचे के भीतर कई अन्य चीजें उत्पन्न होती हैं।

औपचारिक परिभाषा

मान लीजिए कि वहाँ n गतिविधियाँ मौजूद हैं, जिनमें से प्रत्येक को प्रारंभ समय si और समाप्ति समय fi द्वारा दर्शाया गया है। यदि sifj या sjfi हो तो दो गतिविधियाँ i और j गैर-विरोधाभासी कहलाती हैं। गतिविधि चयन समस्या में गैर-परस्पर विरोधी गतिविधियों के अधिकतम समाधान सेट (S) को खोजना शामिल है, या अधिक सटीक रूप से कोई समाधान सेट S' मौजूद नहीं होना चाहिए जैसे कि |S'| > |S| उस स्थिति में जब एकाधिक अधिकतम समाधानों का आकार समान होता है।

इष्टतम समाधान

गतिविधि चयन समस्या इस मायने में उल्लेखनीय है कि समाधान खोजने के लिए ग्रीडी एल्गोरिथ्म का उपयोग करने से हमेशा एक इष्टतम समाधान मिलेगा। एल्गोरिदम के पुनरावृत्त संस्करण का एक छद्मकोड स्केच और इसके परिणाम की इष्टतमता का प्रमाण नीचे शामिल है।

एल्गोरिदम

Greedy-Iterative-Activity-Selector(A, s, f): 

    Sort A by finish times stored in f
    S = {A[1]} 
    k = 1
    
    n = A.length
    
    for i = 2 to n:
        if s[i]  f[k]: 
            S = S U {A[i]}
            k = i
    
    return S

स्पष्टीकरण

लाइन 1: इस एल्गोरिदम को ग्रीडी-पुनरावृत्ति-गतिविधि-चयनकर्ता कहा जाता है, क्योंकि यह सबसे पहले एक ग्रीडी एल्गोरिथ्म है, और फिर यह पुनरावृत्त है। इस ग्रीडी एल्गोरिदम का एक पुनरावर्ती संस्करण भी है।

  • गतिविधियों से युक्त एक ऐरे है।
  • एक ऐरे है जिसमें गतिविधियों के प्रारंभ समय शामिल हैं।
  • एक ऐरे है जिसमें गतिविधियों के समापन समय शामिल हैं।

ध्यान दें कि इन ऐरे को 1 से शुरू करके संबंधित ऐरे की लंबाई तक अनुक्रमित किया जाता है।

लाइन 3: ऐरे में संग्रहीत समाप्ति समय का उपयोग करके गतिविधियों की ऐरे को समापन समय के बढ़ते क्रम में क्रमबद्ध करें। उदाहरण के लिए मर्ज सॉर्ट, हीप सॉर्ट, या क्विक सॉर्ट एल्गोरिदम का उपयोग करके यह ऑपरेशन समय में किया जा सकता है।

लाइन 4: एक सेट बनाएं चयनित गतिविधियों को संग्रहीत करने के लिए, और इसे गतिविधि के साथ प्रारंभ करने के लिए जिसका जल्द से जल्द खत्म होने का समय है।

लाइन 5: एक वेरिएबल बनाता है जो अंतिम चयनित गतिविधि के सूचकांक का ट्रैक रखता है।

लाइन 9: उस सरणी के दूसरे एलिमेंट से उसके अंतिम एलिमेंट तक पुनरावृति शुरू करता है।

लाइन 10,11: यदि गतिविधि का प्रारंभ समय अंतिम चयनित गतिविधि के समापन समय से अधिक या बराबर है, तब सेट में चयनित गतिविधियों के अनुकूल है, और इस प्रकार इसे में जोड़ा जा सकता है।

लाइन 12: अंतिम चयनित गतिविधि का सूचकांक अभी जोड़ी गई गतिविधि में अद्यतन किया जाता है।

इष्टतमता का प्रमाण

मान लीजिए समाप्ति समय के अनुसार गतिविधियों का समूह है। मान लें कि एक इष्टतम समाधान है, जिसे समापन समय के अनुसार भी क्रमबद्ध किया गया है; और A में पहली गतिविधि का सूचकांक है, यानी, यह इष्टतम समाधान ग्रीडी विकल्प से शुरू नहीं होता है। हम दिखाएंगे कि , जो ग्रीडी विकल्प (गतिविधि 1) से शुरू होता है, एक और इष्टतम समाधान है। चूँकि , और A में गतिविधियाँ परिभाषा के अनुसार असंयुक्त हैं, B में गतिविधियाँ भी असंयुक्त हैं। चूँकि B में A के समान ही गतिविधियाँ हैं, अर्थात , B भी इष्टतम है।

एक बार जब ग्रीडी विकल्प चुन लिया जाता है, तो समस्या उप-समस्या के लिए एक इष्टतम समाधान खोजने तक सिमट कर रह जाती है। यदि A, ग्रीडी विकल्प वाली मूल समस्या S का इष्टतम समाधान है, तो गतिविधि-चयन समस्या का इष्टतम समाधान है।

क्यों? यदि ऐसा नहीं होता, तो A' से अधिक गतिविधियों वाला एक समाधान B' से S' चुनें जिसमें S' के लिए ग्रीडी विकल्प हो। फिर, B′ में 1 जोड़ने से इष्टतमता के विपरीत, A की तुलना में अधिक गतिविधियों के साथ S से S का एक व्यवहार्य समाधान प्राप्त होगा।

भारित गतिविधि चयन समस्या

गतिविधि चयन समस्या के सामान्यीकृत संस्करण में गैर-अतिव्यापी गतिविधियों का एक इष्टतम सेट चुनना शामिल है ताकि कुल वजन अधिकतम हो। भार रहित संस्करण के विपरीत, भारित गतिविधि चयन समस्या का कोई ग्रीडी समाधान नहीं है। हालाँकि, निम्नलिखित दृष्टिकोण का उपयोग करके एक गतिशील प्रोग्रामिंग समाधान आसानी से बनाया जा सकता है:[1] गतिविधि युक्त एक इष्टतम समाधान पर विचार करें k. अब हमारे पास बायीं और दायीं ओर गैर-अतिव्यापी गतिविधियाँ हैं k. इष्टतम उप-संरचना के कारण हम इन दो सेटों के लिए पुनरावर्ती समाधान ढूंढ सकते हैं। जैसा कि हम नहीं जानते k, हम प्रत्येक गतिविधि को आज़मा सकते हैं। यह दृष्टिकोण एक की ओर ले जाता है समाधान। गतिविधियों के प्रत्येक सेट के लिए इसे ध्यान में रखते हुए इसे और अधिक अनुकूलित किया जा सकता है यदि हमें इसका समाधान पता होता तो हम इष्टतम समाधान पा सकते हैं , कहाँ t अंतिम गैर-अतिव्यापी अंतराल है j में . इससे एक प्राप्त होता है समाधान। इस तथ्य को ध्यान में रखते हुए इसे और अधिक अनुकूलित किया जा सकता है कि हमें सभी श्रेणियों पर विचार करने की आवश्यकता नहीं है लेकिन इसके बजाय बस . इस प्रकार निम्नलिखित एल्गोरिदम एक परिणाम देता है समाधान:

<सिंटैक्सहाइलाइट लैंग= सी लाइन= 1 > भारित-गतिविधि-चयन(एस): // एस = गतिविधियों की सूची

   समाप्ति समय के अनुसार S को क्रमबद्ध करें
   opt[0] = 0 // opt[j] S[1,2..,j] के लिए इष्टतम समाधान (चयनित गतिविधियों के भार का योग) का प्रतिनिधित्व करता है
  
   i = 1 से n के लिए:
       t = समाप्ति समय के साथ गतिविधि खोजने के लिए बाइनरी खोज <= i के लिए प्रारंभ समय
           // यदि ऐसी एक से अधिक गतिविधियाँ हैं, तो अंतिम समाप्ति समय वाली एक को चुनें
       ऑप्ट[i] = MAX(ऑप्ट[i-1], ऑप्ट[t] + w(i))
       
   वापसी विकल्प[n]

</सिंटैक्सहाइलाइट>

संदर्भ


बाहरी संबंध