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("Maximum contiguous sum is %d", max_sum);
}

आउटपुट

Valid String

  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. सी ++ प्रोग्राम बाइनरी सर्च दृष्टिकोण का उपयोग करके अधिकतम सबएरे योग खोजने के लिए

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