इस समस्या में दिए गए कार्यों की एक सूची है। सूची में प्रत्येक कार्य के लिए समय सीमा और लाभ भी दिया गया है। प्रत्येक कार्य में एक इकाई समय लगेगा, इसलिए किसी कार्य के लिए न्यूनतम समय सीमा 1 है। यदि एक समय में केवल एक कार्य निर्धारित किया जा सकता है, तो अधिकतम लाभ प्राप्त करें।
इस समस्या को हल करने के लिए, नौकरियों के सेट के सभी सबसेट को यह जांचने के लिए तैयार किया जाता है कि क्या व्यक्तिगत सबसेट संभव है या नहीं। साथ ही, उत्पन्न होने वाले सभी व्यवहार्य उपसमुच्चय के अधिकतम लाभ पर नज़र रखें।
इस एल्गोरिथम की समय जटिलता O(n^2)
. हैइनपुट और आउटपुट
इनपुट:जॉब आईडी, समय सीमा और लाभ के साथ नौकरियों की सूची। और नौकरियों की संख्या n.{('a', 2, 100), ('b', 1, 19), ('c', 2, 27), ('d', 1, 25), (' e', 3, 15)}n =5आउटपुट:निम्नलिखित कार्य अनुक्रम का अधिकतम लाभ क्रम है:c a e
एल्गोरिदम
<पूर्व>नौकरी अनुक्रम (नौकरी सूची, एन)इनपुट - नौकरियों की सूची और सूची में मौजूद नौकरियों की संख्या।
आउटपुट - क्रम, नौकरी कैसे ली जाती है।
जॉब में जॉब्स को उनके लाभ के अनुसार क्रमबद्ध करना शुरू करें खाली समय स्लॉट को ट्रैक करने के लिए जॉब सीक्वेंस और स्लॉट की एक सूची बनाएं शुरू में सभी स्लॉट्स को सभी दिए गए जॉब के लिए फ्री बनाएं जो मैं सूची के अंत से सूची में सभी नौकरियों के लिए करता हूं। यदि स्लॉट [जे] मुफ़्त है तो जॉबसीक्वेंस [जे]:=मैं स्लॉट बनाता हूं [जे]:=सभी स्लॉट के लिए किए गए लूप को भरें जब यह मुफ़्त नहीं है तो जॉबलिस्ट [जॉबसीक्वेंस [i]] का उपयोग करके नौकरी की प्रिंट आईडी करें।
उदाहरण
#include#include namespace std का उपयोग करके; इंट डेडलाइन; इंट प्रॉफिट;};बूल कॉम्प (जॉब जे1, जॉब जे2) {रिटर्न (जे1.प्रॉफिट> जे2.प्रॉफिट); // लाभ के आधार पर नौकरियों की तुलना करें} इंट मिनट (इंट ए, इंट बी) {रिटर्न (ए <बी)? ए:बी;} शून्य नौकरी अनुक्रम (जॉब जॉबलिस्ट [], इंट एन) {सॉर्ट (जॉबलिस्ट, जॉबलिस्ट + एन, कॉम्प); // सॉर्ट जॉबलिस्ट ऑन प्रॉफिट इंट जॉबसेक [एन]; // परिणाम स्टोर करने के लिए (नौकरियों का अनुक्रम) बूल स्लॉट [एन]; // खाली समय स्लॉट का ट्रैक रखने के लिए (int i=0; i =0 के लिए सभी स्लॉट मुफ्त हैं।; j--) {// पिछले फ्री स्लॉट से खोजें अगर (स्लॉट [j] ==असत्य) {jobSeq [j] =i; // इस जॉब को जॉब सीक्वेंस स्लॉट में जोड़ें [j] =true; // इस स्लॉट को कब्जे वाले ब्रेक के रूप में चिह्नित करें; } } } for (int i=0; i आउटपुट
नौकरी अनुक्रम का अधिकतम लाभ अनुक्रम निम्नलिखित है:c a e