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

C++ में टास्क शेड्यूलर


मान लीजिए हमारे पास एक कैरेक्टर ऐरे है जो उन टास्क्स को दर्शाता है जिन्हें CPU को करने की आवश्यकता है। इसमें अपरकेस लेटर्स A से Z होते हैं जहां अलग-अलग लेटर्स अलग-अलग टास्क्स को दर्शाते हैं। टास्क्स को मूल क्रम के बिना किया जा सकता है। प्रत्येक टास्क को एक इंटरवल में किया जा सकता है। प्रत्येक इंटरवल के लिए, CPU एक जॉब खत्म कर सकता है या बस आइडल रह सकता है। हालांकि, एक नॉन-नेगेटिव कूलिंग इंटरवल है जिसे n कहते हैं जिसका अर्थ है कि दो समान टास्क्स के बीच, कम से कम n इंटरवल होने चाहिए जहां CPU अलग टास्क कर रहा हो या बस आइडल हो। हमें CPU द्वारा दिए गए सभी टास्क्स को खत्म करने के लिए लगने वाले कम से कम इंटरवल्स की संख्या ढूंढनी है। यदि इनपुट [A, A, A, B, B, B] है और n 2 है, तो आउटपुट 8 होगा, जैसे A → B → आइडल → A → B → आइडल → A → B

इसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंगे -

  • एक मैप m बनाएं, और टास्क ऐरे में स्टोर सभी कैरेक्टर्स की फ्रीक्वेंसी स्टोर करें
  • pq नामक प्रायोरिटी क्यू परिभाषित करें
  • m पर मौजूद प्रत्येक की-वैल्यू पेयर के लिए, फ्रीक्वेंसी वैल्यूज़ को pq में डालें
  • ans := 0, साइकिल := n + 1
  • जब तक pq खाली नहीं है
    • टेम्प नामक ऐरे परिभाषित करें, टाइम := 0 सेट करें
    • i के लिए 0 और pq खाली नहीं है, और i - साइकिल की रेंज में
      • pq के टॉप एलिमेंट को टेम्प में डालें, pq से टॉप डिलीट करें, टेम्प को 1 से बढ़ाएं
    • i के लिए 0 से टेम्प के आकार तक की रेंज में
      • टेम्प[i] को 1 से घटाएं
      • यदि टेम्प[i] 0 नहीं है, तो टेम्प[i] को pq में डालें
    • ans := ans + टाइम जब pq खाली है, अन्यथा साइकिल
  • ans लौटाएं

उदाहरण (C++)

बेहतर समझ के लिए निम्नलिखित इम्प्लीमेंटेशन देखें -

#include <bits/stdc++.h> using namespace std; class Solution {    public:    int leastInterval(vector<char>& t, int n) {       map <char,int> m;       for(int i =0;i<t.size();i++){          m[t[i]]++;       }       map <char, int> :: iterator i = m.begin();       priority_queue <int> pq;       while(i != m.end()){          pq.push(i->second);          i++;       }       int ans = 0;       int cycle = n + 1;       while(!pq.empty()){          vector <int> temp;          int time = 0;          for(int i = 0; !pq.empty() && i < cycle; i++){             temp.push_back(pq.top());             pq.pop();             time++;          }          for(int i = 0;i < temp.size(); i++){             temp[i]-- ;             if(temp[i])pq.push(temp[i]);          }          ans += pq.empty()? time : cycle;       }       return ans;    } }; main(){    vector<char> v = {'A','A','A','B','B','B'};    Solution ob;    cout << (ob.leastInterval(v, 2)) ; }

इनपुट

{'A','A','A','B','B','B'} 2

आउटपुट

8

  1. विंडोज 11 में टास्क शेड्यूलर खोलने के 9 तरीके विंडोज 11 में टास्क शेड्यूलर खोलने के 9 तरीके

    टास्क शेड्यूलर एक ऐसा टूल है जो आपको विंडोज द्वारा किए जाने वाले कार्यों को सेट अप और शेड्यूल करने देता है। यह नियमित पीसी रखरखाव कार्यों को स्वचालित करने के लिए विशेष रूप से उपयोगी है, जैसे डिस्क क्लीनअप और डीफ़्रैग्मेंटेशन। आप टास्क शेड्यूलर को अपने पसंदीदा प्रोग्राम को स्वचालित रूप से शुरू करने,

  1. विंडोज टास्क शेड्यूलर में शेड्यूल्ड टास्क का नाम कैसे बदलें विंडोज टास्क शेड्यूलर में शेड्यूल्ड टास्क का नाम कैसे बदलें

    विंडोज टास्क शेड्यूलर शायद माइक्रोसॉफ्ट विंडोज की सबसे उपयोगी लेकिन कम उपयोग की जाने वाली विशेषताओं में से एक है क्योंकि यह आपको उन कार्यों को स्वचालित करने देता है जिन्हें आप नियमित रूप से चलाना चाहते हैं। यह न केवल ऑपरेटिंग सिस्टम को महत्वपूर्ण सिस्टम कार्यों को शेड्यूल करने देता है, बल्कि आपको ईम

  1. विंडोज 10 टास्क शेड्यूलर बहाल करें: सामान्य त्रुटियों को शीघ्र हल करें विंडोज 10 टास्क शेड्यूलर बहाल करें: सामान्य त्रुटियों को शीघ्र हल करें

    यदि आपने हाल ही में ऑपरेटिंग सिस्टम अपग्रेड या डाउनग्रेड किया है, तो टास्क शेड्यूलर टूट या क्षतिग्रस्त हो सकता है। खोलने पर टास्क XML में एक मान है जो गलत तरीके से स्वरूपित है या सीमा से बाहर है या टास्क में एक अप्रत्याशित नोड है जैसी त्रुटियां आती हैं। विंडोज 10 में टूटा टास्क शेड्यूलर ठीक करें रि