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

C++ का उपयोग करके अपडेट के बिना रेंज सम क्वेरी

इस लेख में, हम आकार n का एक एरे देंगे, जो एक पूर्णांक होगा। फिर, हम इंडेक्स L से इंडेक्स R तक के तत्वों का योग निकालेंगे और क्वेरी को कई बार निष्पादित करेंगे, या हमें दिए गए रेंज [L, R] का योग निकालना होगा। उदाहरण के लिए:

इनपुट: arr[] = {1, 2, 3, 4, 5}   L = 1, R = 3   L = 2, R = 4
आउटपुट: 9   12

इनपुट: arr[] = {1, 2, 3, 4, 5}   L = 0, R = 4   L = 1, R = 2
आउटपुट: 15   5

समाधान का दृष्टिकोण

इस प्रश्न के दो समाधान हैं। पहला ब्रूट फोर्स दृष्टिकोण द्वारा और दूसरा प्रीफिक्स सम (कुशल) दृष्टिकोण द्वारा।

ब्रूट फोर्स दृष्टिकोण

इस दृष्टिकोण में, हम दिए गए रेंज के माध्यम से ट्रैवर्स करेंगे और योग प्रिंट करेंगे।

उदाहरण

#include<bits/stdc++.h>
using namespace std;

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int n = sizeof(arr)/sizeof(int); // दिए गए एरे का आकार।
    int L1 = 1, R1 = 3;
    int L2 = 2, R2 = 4;
    int sum = 0;
    
    for(int i = L1; i <= R1; i++) // पहली रेंज के माध्यम से ट्रैवर्स करना।
        sum += arr[i];
    
    cout << sum << "\n";
    sum = 0;
    
    for(int i = L2; i <= R2; i++) // दूसरी रेंज के माध्यम से ट्रैवर्स करना।
        sum += arr[i];
    
    cout << sum << "\n";
}

आउटपुट

9 12

उपरोक्त कोड की व्याख्या

इस दृष्टिकोण में, हम केवल दिए गए रेंज के माध्यम से ट्रैवर्स कर रहे हैं; इस मामले में, यह प्रोग्राम अच्छा है क्योंकि इसकी खोज समय जटिलता O(N) है, जहां N दिए गए एरे का आकार है। लेकिन यह तब बदल जाता है जब हमें कई क्वेरी Q दी जाती हैं, तब हमारी जटिलता O(N*Q) हो जाती है, जहां Q क्वेरी की संख्या है और N दिए गए एरे का आकार है। दुर्भाग्य से, यह समय जटिलता उच्च प्रतिबंधों को संभाल नहीं सकती, इसलिए अब हम एक कुशल दृष्टिकोण देखेंगे जो उच्च प्रतिबंधों के लिए भी काम करेगा।

कुशल दृष्टिकोण

इस दृष्टिकोण में, हम prefix नामक एक नया एरे बनाएंगे जो हमारा प्रीफिक्स सम एरे होगा, और फिर हम दिए गए रेंज के योग का उत्तर देंगे।

उदाहरण

#include<bits/stdc++.h>
using namespace std;

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int n = sizeof(arr)/sizeof(int); // दिए गए एरे का आकार।
    int L1 = 1, R1 = 3;
    int L2 = 2, R2 = 4;
    int sum = 0;
    int prefix[n];
    
    for(int i = 0; i < n; i++){
        sum += arr[i];
        prefix[i] = sum;
    }
    
    if(L1) // सेगमेंटेशन फॉल्ट से बचने के लिए
        cout << prefix[R1] - prefix[L1 - 1] << "\n";
    else
        cout << prefix[R1] << "\n";
    
    if(L2) // सेगमेंटेशन फॉल्ट से बचना।
        cout << prefix[R2] - prefix[L2 - 1] << "\n";
    else
        cout << prefix[R2] << "\n";
}

आउटपुट

9 12

उपरोक्त कोड की व्याख्या

इस दृष्टिकोण में, हम प्रीफिक्स सम मानों को prefix नामक एरे में स्टोर करते हैं। अब यह एरे हमारे प्रोग्राम को बहुत कुशल बनाता है क्योंकि यह हमें O(1) की खोज समय जटिलता देता है, जो कि सबसे अच्छी जटिलता है जो आप प्राप्त कर सकते हैं, और इसलिए जब हमें Q मात्रा में क्वेरी दी जाती हैं, तो हमारी खोज समय जटिलता O(Q) हो जाती है जहां Q क्वेरी की संख्या है।

निष्कर्ष

इस लेख में, हम प्रीफिक्स सम एरे का उपयोग करके अपडेट के बिना रेंज सम क्वेरी की समस्या को हल करते हैं। हमने इस समस्या के लिए C++ प्रोग्राम और इसे हल करने के पूर्ण दृष्टिकोण (सामान्य और कुशल) को भी सीखा। हम इसी प्रोग्राम को C, Java, Python और अन्य भाषाओं में लिख सकते हैं। आशा है कि आपको यह लेख मददगार लगा होगा।

  1. - C++ प्रोग्राम: अपडेट के बिना रेंज सम क्वेरीज

    हमें इंडेक्स i से इंडेक्स j तक के तत्वों का योग निकालना होगा। क्वेरीज़ जिनमें i और j इंडेक्स मान होते हैं, कई बार निष्पादित की जाएंगी। Input:arr[] = {5, 6, 3, 4, 1 } i = 1, j =3 Output: 13 व्याख्या 6 + 3 + 4 = 13 sum[] = {5, 6+5, 3+6+5, 4+3+6+5, 1+4+3+6+5 } sum[]={5,11,14,18,19} sum[j]-sum[i-1]=sum

  1. - C++ में रेंज सम क्वेरीज विदाउट अपडेट्स

    समस्या विवरण यहां हम देखेंगे कि सरणी में इंडेक्स i से इंडेक्स j तक के तत्वों का योग कैसे प्राप्त करें। यह मूल रूप से रेंज क्वेरी है। कार्य केवल इंडेक्स i से j तक एक लूप चलाकर और योग की गणना करके आसान है। लेकिन हमें इस बात का ध्यान रखना होगा कि इस तरह की रेंज क्वेरी कई बार निष्पादित की जाएगी। इसलिए

  1. - C++ में पॉइंटर अंकगणित का उपयोग करके ऐरे का योग

    यह पॉइंटर का उपयोग करके ऐरे तत्वों का योग ज्ञात करने के लिए एक C++ प्रोग्राम है। एल्गोरिदम Begin उपयोगकर्ता इनपुट से मानों के साथ ऐरे तत्वों को इनिशियलाइज़ करें। s = 0 इनिशियलाइज़ करें i = 0 से लूप s = s + *(ptr + i) चर s में योग मान प्रिंट करें। End उदाहरण कोड #include &l