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

C++ में सभी कार्य समाप्त करने के लिए न्यूनतम गति ज्ञात करें


इस समस्या में, हमें n तत्वों और aninteger h से मिलकर एक array arr[] दिया जाता है। सरणी के प्रत्येक तत्व arr[] में व्यक्ति के लिए लंबित कार्यों की संख्या होती है और H कार्य को पूरा करने के लिए शेष समय (घंटे में) है। हमारा कार्य सभी कार्यों को पूरा करने के लिए न्यूनतम गति ज्ञात करना है।

समस्या का विवरण :सरणी में दिए गए सभी कार्यों को H घंटे में पूरा करने के लिए हमें एक घंटे में व्यक्ति को जितने काम पूरे करने हैं, उतने कामों को पूरा करने की जरूरत है। अगर वह एक घंटे से भी कम समय में एआर [i] पर निर्दिष्ट सभी को पूरा कर सकता है, तो हम बाकी समय के लिए आदर्श रूप से बैठेंगे और घंटे के अंत के बाद, नौकरियों के अगले सेट पर चले जाएंगे।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट

arr[] = {4, 5, 1, 7, 8}, H = 5

आउटपुट

8

स्पष्टीकरण

व्यक्ति को 5 घंटे में काम के 5 सेट पूरे करने होंगे। इसलिए, उसे 1 घंटे में अधिकतम नौकरियों के साथ सेट पर प्रदर्शन करना होगा जो उसकी गति होगी।

समाधान दृष्टिकोण

समस्या को हल करने के लिए, हमें वह न्यूनतम गति ज्ञात करनी होगी जिसके साथ वह सभी कार्यों को कर सके। तो, हम पहला मान पाएंगे जिसके लिए व्यक्ति सभी कार्यों को कर सकता है वह दिया गया समय है।

हम 1 से अधिकतम संख्या की सीमा के भीतर गति की खोज करेंगे। एक ही बार में करने के लिए नौकरियों की। चूंकि यह मान बड़ा हो सकता है, हम गणना में आसानी के लिए द्विआधारी खोज का उपयोग करेंगे।

जाँच करने के लिए, यदि वर्तमान गति s पर, व्यक्ति समस्या को हल कर सकता है, तो हम एक सेट को पूरा करने में लगने वाले समय को ज्ञात करेंगे और फिर सभी सेटों के लिए समय जोड़ेंगे। यदि यह समय H से कम है, तो संभव है अन्यथा नहीं।

हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,

उदाहरण

#include <bits/stdc++.h>
using namespace std;
bool canDoJobInTime(int A[], int n, int H, int speed) {
   int timeTaken = 0;
   for (int i = 0; i < n; ++i)
      timeTaken += (A[i] - 1) / speed + 1;
   return timeTaken <= H;
}
int calcJobMinSpeed(int A[], int n, int H) {
   if (H < n)
      return -1;
   int maxJob = A[0];
   for(int i = 1; i < n; i++)
      maxJob = max(A[i], maxJob);
   int start = 1, end = maxJob;
   while (start < end) {
      int mi = start + (end - start) / 2;
      if (!canDoJobInTime(A, n, H, mi))
         start = mi + 1;
      else
         end = mi;
   }
   return start;
}
int main() {
   int A[] = { 3, 6, 7, 11 }, H = 8;
   int n = sizeof(A) / sizeof(A[0]);
   cout<<"The minimum speed to finish all jobs in time is "<<calcJobMinSpeed(A, n, H);
   return 0;
}

आउटपुट

The minimum speed to finish all jobs in time is 4

  1. सी++ में एक पेड़ में सभी सेबों को इकट्ठा करने का न्यूनतम समय

    मान लीजिए कि हमारे पास एक अप्रत्यक्ष पेड़ है जिसमें n शीर्ष हैं और इनकी संख्या 0 से n-1 तक है, जिसके शीर्षों में कुछ सेब हैं। हम पेड़ के एक किनारे पर चलने में 1 सेकंड खर्च करते हैं। पेड़ में सभी सेबों को शीर्ष 0 से शुरू करने और इस शीर्ष पर वापस आने के लिए हमें सेकंड में न्यूनतम समय निकालना होगा। यह

  1. C++ में दी गई बाधाओं के साथ सभी कार्यों को पूरा करने के लिए न्यूनतम समय खोजें

    अवधारणा अलग-अलग समय की आवश्यकताओं के साथ दिए गए कार्यों के संबंध में, k समान समनुदेशिती उपलब्ध हैं और हमें यह भी प्रदान किया जाता है कि एक समनुदेशिती कार्य की एक इकाई को करने में कितना समय व्यतीत करता है। हमारा कार्य निम्नलिखित बाधाओं के साथ सभी कार्यों को पूरा करने के लिए न्यूनतम समय निर्धारित करन

  1. C++ में फ्लो नेटवर्क में न्यूनतम s-t कट का पता लगाएं

    मान लीजिए कि हमारे पास निम्नलिखित प्रवाह नेटवर्क है। जैसा कि हम जानते हैं कि एस-टी कट एक कट है जिसके लिए स्रोत के नोड और सिंक टी नोड को अलग-अलग सबसेट में होना आवश्यक है, और इसमें स्रोत सेट से सिंक की तरफ जाने वाले किनारे शामिल हैं। यहां एक एस-टी कट की क्षमता को कट-सेट में प्रत्येक किनारे की क्षमता क