Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> प्रोग्रामिंग

एक्टिविटी सिलेक्शन प्रॉब्लम

n विभिन्न गतिविधियाँ दी गई हैं जिनके प्रारंभ समय और समाप्ति समय हैं। एक व्यक्ति द्वारा हल की जाने वाली अधिकतम संख्या में गतिविधियों का चयन करें। हम अगली गतिविधि खोजने के लिए लालची दृष्टिकोण का उपयोग करेंगे जिसका समाप्ति समय शेष गतिविधियों में न्यूनतम है, और प्रारंभ समय अंतिम चयनित गतिविधि के समाप्ति समय से अधिक या बराबर है।

  • जब लिस्ट सॉर्टेड नहीं है तो इस समस्या की जटिलता O(n log n) है।
  • जब सॉर्टेड लिस्ट प्रदान की जाती है तो जटिलता O(n) होगी।

इनपुट और आउटपुट

इनपुट: विभिन्न गतिविधियों की लिस्ट प्रारंभ और समाप्ति समय के साथ।
{(5,9), (1,2), (3,4), (0,6), (5,7), (8,9)}
आउटपुट: चयनित गतिविधियाँ हैं:
Activity: 0 , Start: 1 End: 2
Activity: 1 , Start: 3 End: 4
Activity: 3 , Start: 5 End: 7
Activity: 5 , Start: 8 End: 9

एल्गोरिदम

maxActivity(act, size)

इनपुट: गतिविधि की एक लिस्ट, और लिस्ट में एलिमेंट्स की संख्या।
आउटपुट: वह क्रम जिसमें गतिविधियाँ चुनी गई हैं।

Begin
    प्रारंभ में दी गई गतिविधि लिस्ट को सॉर्ट करें
    set i := 0
    ith गतिविधि प्रदर्शित करें // इस मामले में यह पहली गतिविधि है
    for j := 1 to n-1 do
        if act[j] का प्रारंभ समय >= act[i] का अंत तो
            jth गतिविधि प्रदर्शित करें
            i := j
        done
    done
End

उदाहरण

#include <iostream>
#include <algorithm>
using namespace std;

struct Activitiy {
    int start, end;
};

bool comp(Activitiy act1, Activitiy act2) {
    return (act1.end < act2.end);
}

void maxActivity(Activitiy act[], int n) {
    sort(act, act + n, comp); // तुलना फंक्शन का उपयोग करके गतिविधियों को सॉर्ट करें
    cout << "चयनित गतिविधियाँ हैं: " << endl;
    int i = 0; // पहली गतिविधि 0 के रूप में चयनित
    cout << "Activity: " << i << " , Start: " << act[i].start << " End: " << act[i].end << endl;
    for (int j = 1; j < n; j++) { // अन्य सभी गतिविधियों के लिए
        if (act[j].start >= act[i].end) { // जब प्रारंभ समय >= अंत समय हो, गतिविधि प्रिंट करें
            cout << "Activity: " << j << " , Start: " << act[j].start << " End: " << act[j].end << endl;
            i = j;
        }
    }
}

int main() {
    Activitiy actArr[] = {{5,9}, {1,2}, {3,4}, {0,6}, {5,7}, {8,9}};
    int n = 6;
    maxActivity(actArr, n);
    return 0;
}

आउटपुट

चयनित गतिविधियाँ हैं:
Activity: 0 , Start: 1 End: 2
Activity: 1 , Start: 3 End: 4
Activity: 3 , Start: 5 End: 7
Activity: 5 , Start: 8 End: 9

  1. रैट इन ए मेज़ समस्या रैट इन ए मेज़ समस्या

    इस समस्या में, N x N आकार का एक दिया गया मेज़ है। स्रोत और गंतव्य स्थान क्रमशः टॉप-लेफ्ट सेल और बॉटम राइट सेल हैं। कुछ सेल मूव करने के लिए वैध हैं और कुछ सेल ब्लॉक हैं। यदि एक चूहा स्टार्ट वर्टेक्स से डेस्टिनेशन वर्टेक्स तक चलना शुरू करता है, तो हमें यह ढूंढना है कि क्या पथ पूरा करने का कोई तरीका ह

  1. M-कलरिंग समस्या M-कलरिंग समस्या

    इस समस्या में, एक अनडायरेक्टेड ग्राफ दिया गया है। m रंग भी प्रदान किए गए हैं। समस्या यह ढूंढना है कि क्या नोड्स को m अलग-अलग रंगों के साथ असाइन करना संभव है, जैसे कि ग्राफ के कोई दो आसन्न वर्टेक्स एक ही रंग के न हों। यदि समाधान मौजूद है, तो प्रदर्शित करें कि कौन सा रंग किस वर्टेक्स पर असाइन किया गय

  1. पायथन प्रोग्राम: गतिविधि चयन समस्या पायथन प्रोग्राम: गतिविधि चयन समस्या

    इस लेख में हम दी गई समस्या के समाधान के बारे में जानेंगे। समस्या कथन हमें n गतिविधियाँ उनके संबंधित प्रारंभ और समाप्ति समय के साथ दी गई हैं। हमें एक व्यक्ति द्वारा की जा सकने वाली अधिकतम गतिविधियों का चयन करना है, बशर्ते वह एक समय में एक गतिविधि पर काम करता हो। वेरिएबल संकेतन: N - कुल गतिविधियों की