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

C++ में ब्लॉक बनाने का न्यूनतम समय

मान लीजिए कि हमारे पास ब्लॉकों की एक सूची है, यदि हमारे पास ब्लॉक [i] =t है, तो इसका मतलब है कि i-th ब्लॉक को बनाने के लिए t यूनिट समय की आवश्यकता है। एक ब्लॉक केवल एक कार्यकर्ता द्वारा बनाया जा सकता है। एकल कार्यकर्ता या तो दो श्रमिकों में विभाजित हो सकता है या एक ब्लॉक का निर्माण कर सकता है फिर घर जा सकता है। इन दोनों फैसलों में कुछ समय लगता है। एक कार्यकर्ता को दो श्रमिकों में विभाजित करने की समय लागत को विभाजन नामक संख्या के रूप में दिया जाता है।

इसलिए, यदि इनपुट ब्लॉक =[1,2], और विभाजन =5 की तरह है, तो आउटपुट 7 होगा क्योंकि हम कार्यकर्ता को 5 समय इकाइयों में 2 श्रमिकों में विभाजित कर सकते हैं, फिर उनमें से प्रत्येक को एक ब्लॉक में आवंटित कर सकते हैं ताकि लागत 5 + अधिकतम 1 और 2 =7. है।

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

  • एक प्राथमिकता कतार pq परिभाषित करें

  • इनिशियलाइज़ i :=0 के लिए, जब i <ब्लॉक का आकार, अपडेट करें (i से 1 बढ़ाएँ), करें -

    • pq में ब्लॉक [i] डालें

  • जबकि pq> 1 का आकार, करें −

    • pq से तत्व हटाएं

    • x :=pq का शीर्ष अवयव

    • pq से तत्व हटाएं

    • pq में स्प्लिट + x डालें

  • pq का शीर्ष तत्व लौटाएं

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int minBuildTime(vector<int>& blocks, int split) {
      priority_queue<int, vector<int>, greater<int> > pq;
      for (int i = 0; i < blocks.size(); i++)
      pq.push(blocks[i]);
      while (pq.size() > 1) {
         pq.pop();
         int x = pq.top();
         pq.pop();
         pq.push(split + x);
      }
      return pq.top();
   }
};
main(){
   Solution ob;
   vector<int> v = {1,2};
   cout << (ob.minBuildTime(v, 5));
}

इनपुट

{1,2}, 5

आउटपुट

7

  1. C/C++ में बर्कले का एल्गोरिथम

    बर्कले का एल्गोरिथ्म एक एल्गोरिथ्म है जिसका उपयोग वितरित प्रणालियों में घड़ी के सिंक्रनाइज़ेशन के लिए किया जाता है। इस एल्गोरिथम का उपयोग उन मामलों में किया जाता है जब वितरित नेटवर्क के कुछ या सभी सिस्टम में इनमें से कोई एक समस्या होती है - उ. मशीन के पास सटीक समय स्रोत नहीं है। B. नेटवर्क या

  1. C++ में बाइनरी ट्री की न्यूनतम गहराई

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें उस वृक्ष की न्यूनतम गहराई ज्ञात करनी है। जैसा कि हम जानते हैं कि न्यूनतम गहराई रूट नोड से निकटतम लीफ नोड तक सबसे छोटे पथ के साथ नोड्स की संख्या है। तो, अगर इनपुट पसंद है तो आउटपुट 2 . होगा इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - ट्री नोड्स

  1. C++ में न्यूनतम नाइट मूव्स

    मान लीजिए कि हमारे पास एक अनंत शतरंज की बिसात है जिसमें -infinity से +infinity तक के निर्देशांक हैं, और हमारे पास वर्ग [0, 0] पर एक नाइट है। एक शूरवीर के पास 8 संभावित चालें हैं, जैसा कि नीचे दिखाया गया है। प्रत्येक चाल एक कार्डिनल दिशा में दो वर्ग है, फिर एक वर्ग एक ओर्थोगोनल दिशा में है। हमें न