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

C++ में न्यूनतम पृष्ठों का आवंटन


न्यूनतम पृष्ठों का आवंटन एक प्रोग्रामिंग समस्या है। आइए इस समस्या पर विस्तार से चर्चा करते हैं और देखते हैं कि इसका समाधान क्या हो सकता है।

कथन

आपको n विभिन्न पुस्तकों के पृष्ठों की संख्या दी गई है। साथ ही, m छात्र हैं जिन्हें पुस्तकें आवंटित की जानी हैं। पुस्तकें पृष्ठों की संख्या के आरोही क्रम में व्यवस्थित हैं। और प्रत्येक छात्र को कुछ लगातार पुस्तकें आवंटित की जा सकती हैं। प्रोग्राम को एक छात्र द्वारा पढ़े गए पृष्ठों की अधिकतम संख्या वापस करनी चाहिए जो न्यूनतम होनी चाहिए।

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

इनपुट: books[] = {13, 43, 65, 87, 92}    m = 2 आउटपुट: 179

व्याख्या

इस समस्या में, हमारे पास दो छात्र हैं जो पुस्तकें पढ़ रहे हैं। तो, पुस्तकों को उनके बीच वितरित करने के निम्नलिखित तरीके हो सकते हैं।

केस 1 - [13], [43, 65, 87, 92]

इससे एक छात्र द्वारा पढ़े गए पृष्ठों की अधिकतम संख्या 13/287 होती है

केस 2 - [13, 43], [65, 87, 92]

इससे एक छात्र द्वारा पढ़े गए पृष्ठों की अधिकतम संख्या 56/244 होती है

केस 3 - [13, 43, 65], [87, 92]

इससे एक छात्र द्वारा पढ़े गए पृष्ठों की अधिकतम संख्या 121/179 होती है

केस 4 - [13, 43, 65, 87], [92]

इससे एक छात्र द्वारा पढ़े गए पृष्ठों की अधिकतम संख्या 208/92 होती है

इन सभी 4 मामलों में से, परिणाम 179 है

इस उदाहरण ने समस्या को आपके लिए स्पष्ट कर दिया होगा। अब, आइए इसके पीछे के तर्क को समझते हैं और इसके लिए एक प्रोग्राम बनाते हैं।

इस समस्या को हल करने का एक आसान दृष्टिकोण बाइनरी सर्च एल्गोरिदम का उपयोग करना है। इस बाइनरी सर्च दृष्टिकोण के लिए, न्यूनतम और अधिकतम पृष्ठों की संख्या को 0 और सभी पुस्तकों के पृष्ठों के योग के रूप में इनिशियलाइज़ करें। और फिर इन मानों के मध्य को मध्यवर्ती परिणाम के रूप में तय करें जो एल्गोरिदम के आगे बढ़ने पर बदल जाएगा।

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

इस विधि का उपयोग इस समस्या का समाधान खोजने के लिए किया जा सकता है लेकिन जैसे-जैसे छात्रों की संख्या बढ़ती है, यह एल्गोरिदम कम विश्वसनीय समाधान प्रदान करने लगता है।

उदाहरण

#include<bits/stdc++.h> using namespace std; bool isPossible(int arr[], int n, int m, int curr_min) ; int min_pages(int arr[], int n, int m) ; int main(){    int n = 5;    int books[] = {13, 43, 65, 87, 92};    cout<<"पुस्तकों में पृष्ठों की संख्या हैं:\n";    for(int i = 0; i< n; i++){       cout<<books[i]<<"\t";    }    int m = 2;    cout<<"\nन्यूनतम पृष्ठों की संख्या = "<<min_pages(books, n, m)<<endl;    return 0; } bool isPossible(int arr[], int n, int m, int curr_min){    int studentsRequired = 1;    int curr_sum = 0;    for (int i = 0; i < n; i++){       if (arr[i] > curr_min)          return false;       if (curr_sum + arr[i] > curr_min){          studentsRequired++;          curr_sum = arr[i];          if (studentsRequired > m)             return false;       }       else          curr_sum += arr[i];    }    return true; } int min_pages(int arr[], int n, int m){    long long sum = 0;    if (n < m)       return -1;    for (int i = 0; i < n; i++)       sum += arr[i];    int minimum = 0, maximum = sum;    int result = INT_MAX;    while (minimum <= maximum){       int mid = (minimum + maximum) / 2;       if (isPossible(arr, n, m, mid)){          result = min(result, mid);          maximum = mid - 1;       }       else          minimum = mid + 1;    }    return result; }

आउटपुट

पुस्तकों में पृष्ठों की संख्या हैं: 13 43 65 87 92 न्यूनतम पृष्ठों की संख्या = 179

  1. - C++ में अंकगणितीय संख्या (Arithmetic Number)

    अंकगणितीय संख्या क्या है? एक संख्या जिसके सभी धनात्मक भाजकों का औसत एक पूर्णांक हो। अर्थात, भाजकों का योग भाजकों की संख्या से विभाज्य हो। उदाहरण: n = 6 भाजक: 1, 2, 3, 6 योग = 12, भाजकों की संख्या = 4 12/4 = 3 (पूर्णांक) → अंकगणितीय संख्या है एल्गोरिदम भाजकों का योग निकालें भाजकों की संख्या गिन

  1. - C++ में वेरिएबल नंबर ऑफ आर्गुमेंट्स

    कभी-कभी, आप एक ऐसी स्थिति का सामना कर सकते हैं, जब आप एक ऐसा फंक्शन चाहते हैं, जो वेरिएबल नंबर ऑफ आर्गुमेंट्स ले सके, यानी, पैरामीटर्स, पूर्वनिर्धारित संख्या के पैरामीटर्स के बजाय। C/C++ प्रोग्रामिंग लैंग्वेज इस स्थिति के लिए एक समाधान प्रदान करती है और आपको एक ऐसा फंक्शन डिफाइन करने की अनुमति देती

  1. - C++ में CHAR_BIT

    CHAR_BIT क्या है? CHAR_BIT एक बाइट में बिट्स की संख्या दर्शाता है। <climits> या <limits.h> हेडर में परिभाषित। आमतौर पर 8 बिट्स प्रति बाइट होता है। C++ प्रोग्राम उदाहरण #include <bits/stdc++.h> using namespace std; int main() { int x = 28; int total_bits = CHAR_BIT * size