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

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

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

बाइनरी सर्च संग्रह के मध्य तत्व की तुलना करके किसी विशेष आइटम को खोजता है। यदि मेल होता है, तो आइटम का इंडेक्स लौटाया जाता है। यदि मध्य आइटम आइटम से बड़ा है, तो आइटम को मध्य आइटम के बाईं ओर सब-ऐरे में खोजा जाता है। अन्यथा, आइटम को मध्य आइटम के दाईं ओर सब-ऐरे में खोजा जाता है। यह प्रक्रिया सब-ऐरे पर भी तब तक जारी रहती है जब तक सबएरे का आकार शून्य नहीं हो जाता।

यह बाइनरी सर्च दृष्टिकोण का उपयोग करके अधिकतम सबएरे योग ज्ञात करने का प्रोग्राम है।

एल्गोरिदम

Begin
    दो इंटीजर्स का अधिकतम खोजने के लिए maximum() इंटीजर फंक्शन घोषित करें
    val1, val2 को इंटीजर डेटाटाइप के रूप में घोषित करें
    उन्हें पैरामीटर के रूप में पास करें
    val1 और val2 के बीच अधिकतम जांचें
    अधिकतम मान लौटाएं
End

Begin
    MCS() इंटीजर फंक्शन घोषित करें जो सब-ऐरे के मध्य को शामिल करने वाला अधिकतम योग सब-ऐरे खोजे
    array[] ऐरे और वेरिएबल l, m, h को इंटीजर डेटाटाइप के रूप में घोषित करें
    उन्हें पैरामीटर के रूप में पास करें
    वेरिएबल s, sum_of_left_part को इंटीजर डेटाटाइप के रूप में घोषित करें
        s = 0 इनिशियलाइज़ करें
        sum_of_left_part = -1 इनिशियलाइज़ करें
    for (int i = m; i >= l; i--)
        s = s + array[i]
    if (s > sum_of_left_part) then
        sum_of_left_part = s
        s = 0
    sum_of_right_part वेरिएबल को इंटीजर डेटाटाइप के रूप में घोषित करें
        sum_of_right_part = -1 इनिशियलाइज़ करें
    for (int i = m+1; i <= h; i++)
        s = s + array[i]
    if (s > sum_of_right_part) then
        sum_of_right_part = s
    return sum_of_left_part + sum_of_right_part
End

Begin
    MaximumSum_of_SubArray() इंटीजर फंक्शन घोषित करें
    array[] ऐरे और वेरिएबल l, h को इंटीजर डेटाटाइप के रूप में घोषित करें
        उन्हें पैरामीटर के रूप में पास करें
    m को इंटीजर डेटाटाइप के रूप में घोषित करें
    if (l == h) then
        return array[l]
    m = (l + h) / 2
    return maximum(maximum(MaximumSum_of_SubArray(array, l, m), MaximumSum_of_SubArray(array, m+1, h)), MCS(array, l, m, h))
    
    number_of_elements और i को इंटीजर डेटाटाइप के रूप में घोषित करें
    "Enter the number of elements of array: " प्रिंट करें
    number_of_elements का मान दर्ज करें
    a[number_of_elements] ऐरे को इंटीजर डेटाटाइप के रूप में घोषित करें
    for(i = 0; i < n; i++)
        "Enter the element of" प्रिंट करें
        ऐरे का डेटा तत्व दर्ज करें
    "Maximum sum of Sub-Array is: " प्रिंट करें
        MaximumSum_of_SubArray(a, 0, n-1) का परिणाम प्रिंट करें
End

उदाहरण

#include <iostream>
using namespace std;

int maximum(int val1, int val2) { // दो इंटीजर्स का अधिकतम खोजें
    return (val1 > val2) ? val1 : val2;
}

int MCS(int array[], int l, int m, int h) { // सब-ऐरे के मध्य को शामिल करने वाला अधिकतम योग सब-ऐरे खोजें
    int s = 0;
    int sum_of_left_part = -1;
    for (int i = m; i >= l; i--) {
        s = s + array[i];
        if (s > sum_of_left_part)
            sum_of_left_part = s;
    }
    s = 0;
    int sum_of_right_part = -1;
    for (int i = m+1; i <= h; i++) {
        s = s + array[i];
        if (s > sum_of_right_part)
            sum_of_right_part = s;
    }
    return sum_of_left_part + sum_of_right_part; // मध्य के बाएं और दाएं तत्वों का योग लौटाएं
}

int MaximumSum_of_SubArray(int array[], int l, int h) {
    int m;
    if (l == h)
        return array[l];
    m = (l + h) / 2;
    return maximum(maximum(MaximumSum_of_SubArray(array, l, m), MaximumSum_of_SubArray(array, m+1, h)), MCS(array, l, m, h));
}

int main() {
    int number_of_elements, i;
    cout << "Enter the number of elements of array: ";
    cin >> number_of_elements;
    cout << endl;
    int a[number_of_elements];
    for (i = 0; i < number_of_elements; i++) {
        cout << "Enter the element of " << i+1 << ": ";
        cin >> a[i];
    }
    cout << "\nMaximum sum of Sub-Array is: " << MaximumSum_of_SubArray(a, 0, number_of_elements - 1);
    return 0;
}

आउटपुट

Enter the number of elements of array: 5
Enter the element of 1: 12
Enter the element of 2: 45
Enter the element of 3: 56
Enter the element of 4: 48
Enter the element of 5: 75
Maximum sum of Sub-Array is: 236
  1. बाइनरी ट्री में अधिकतम वर्टिकल योग खोजें C++ में बाइनरी ट्री में अधिकतम वर्टिकल योग खोजें C++ में

    मान लीजिए हमारे पास एक बाइनरी ट्री है। कार्य वर्टिकल ऑर्डर ट्रैवर्सल में सभी नोड्स के योग के अधिकतम को प्रिंट करना है। तो यदि ट्री नीचे जैसा है - वर्टिकल ऑर्डर ट्रैवर्सल इस तरह है - 4 2 1 + 5 + 6 = 12 3 + 8 = 11 7 9 यहां अधिकतम 12 है। दृष्टिकोण सरल है। हम वर्टिकल ऑर्डर ट्रैवर्सल करेंगे, फिर योग खोज

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

    यह बाइनरी सर्च दृष्टिकोण का उपयोग करके सरणी के न्यूनतम एलिमेंट को खोजने के लिए एक C++ प्रोग्राम है। इस प्रोग्राम की समय जटिलता O(log n) है। एल्गोरिदम शुरुआत दिए गए अनसॉर्टेड डेटा सरणी के लिए बाइनरी सर्च ट्री बनाएं। न्यूनतम एलिमेंट खोजने के लिए पॉइंटर को बाएं सबसे चाइल्ड नोड पर ले जाएं। इस मान को दिए

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

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