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

C++ में डिवाइड एंड कन्कर एल्गोरिदम का उपयोग करके अधिकतम सबएरे योग


मान लीजिए हमारे पास धनात्मक और ऋणात्मक मानों वाले डेटा की एक सूची है। हमें सन्निहित सबएरे का योग ढूंढना है जिसका योग सबसे बड़ा है। मान लीजिए सूची में {-2, -5, 6, -2, -3, 1, 5, -6} है, तो अधिकतम सबएरे का योग 7 है। यह {6, -2, -3, 1, 5} का योग है।

हम इस समस्या को डिवाइड एंड कन्कर विधि का उपयोग करके हल करेंगे। चरण इस प्रकार होंगे:

चरण −

  • सरणी को दो भागों में विभाजित करें
  • निम्नलिखित तीन का अधिकतम खोजें
    • बाएं सबएरे का अधिकतम सबएरे योग
    • दाएं सबएरे का अधिकतम सबएरे योग
    • ऐसा अधिकतम सबएरे योग जिससे सबएरे मिडपॉइंट को पार करता है

उदाहरण

#include <iostream> using namespace std; int max(int a, int b) {    return (a > b)? a : b; } int max(int a, int b, int c) {    return max(max(a, b), c); } int getMaxCrossingSum(int arr[], int l, int m, int h) {    int sum = 0;    int left = INT_MIN;    for (int i = m; i >= l; i--) {       sum = sum + arr[i];       if (sum > left)       left = sum;    }    sum = 0;    int right = INT_MIN;    for (int i = m+1; i <= h; i++) {       sum = sum + arr[i];       if (sum > right)       right = sum;    }    return left + right; } int maxSubArraySum(int arr[], int low, int high) {    if (low == high)    return arr[low];    int mid = (low + high)/2;    return max(maxSubArraySum(arr, low, mid), maxSubArraySum(arr, mid+1, high), getMaxCrossingSum(arr, low, mid, high)); } int main() {    int arr[] = {-2, -5, 6, -2, -3, 1, 5, -6};    int n = sizeof(arr)/sizeof(arr[0]);    int max_sum = maxSubArraySum(arr, 0, n-1);    printf("अधिकतम सन्निहित योग %d है", max_sum); }

आउटपुट

अधिकतम सन्निहित योग 7 है

  1. - सख्ती से बढ़ते सब-अर्रे का अधिकतम योग खोजें C++ में

    मान लीजिए हमारे पास n पूर्णांकों का एक ऐरे है। सख्ती से बढ़ते सब-अर्रे का अधिकतम योग खोजें। तो यदि ऐरे [1, 2, 3, 2, 5, 1, 7] जैसा है, तो योग 8 होगा। इस ऐरे में तीन सख्ती से बढ़ते सब-अर्रे हैं ये हैं {1, 2, 3}, {2, 5} और {1, 7}। अधिकतम योग वाला सब-अर्रे {1, 7} है। इस समस्या को हल करने के लिए, हमें अध

  1. - C++ में डिवाइड एंड कंकर का उपयोग करके अधिकतम योग सबएरे

    मान लीजिए हमारे पास धनात्मक और ऋणात्मक मानों के साथ डेटा की एक सूची है। हमें सन्निहित सबएरे का योग ढूंढना है जिसका योग सबसे बड़ा है। मान लीजिए सूची में {-2, -5, 6, -2, -3, 1, 5, -6} है, तो अधिकतम सबएरे का योग 7 है। यह {6, -2, -3, 1, 5} का योग है।हम इस समस्या को डिवाइड एंड कंकर विधि का उपयोग करके हल

  1. - C++ में बाइनरी सर्च दृष्टिकोण का उपयोग करके अधिकतम सबएरे योग ज्ञात करना

    बाइनरी सर्च एक तेज खोज एल्गोरिदम है जिसकी रन-टाइम जटिलता O(log n) है। यह एल्गोरिदम विभाजन और विजय के सिद्धांत पर काम करता है। इस एल्गोरिदम के ठीक से काम करने के लिए, डेटा संग्रह सॉर्टेड रूप में होना चाहिए। बाइनरी सर्च संग्रह के मध्य तत्व की तुलना करके किसी विशेष आइटम को खोजता है। यदि मेल होता है, त