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

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

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

Input : arr[] = {1, 2, 3, 4, 5}
   L = 1, R = 3
   L = 2, R = 4
Output : 9
   12

Input : arr[] = {1, 2, 3, 4, 5}
   L = 0, R = 4
   L = 1, R = 2
Output : 15
   5

समाधान खोजने के लिए दृष्टिकोण

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

क्रूर फ़ोर्स अप्रोच

इस दृष्टिकोण में, हम दी गई सीमा को पार करेंगे और योग को प्रिंट करेंगे।

उदाहरण

#include<bits/stdc++.h>

using namespace std;

int main() {
   int arr[] = {1, 2, 3, 4, 5};
   int n = sizeof(arr)/sizeof(int); // size of given array.
   int L1 = 1, R1 = 3;
   int L2 = 2, R2 = 4;
   int sum = 0;
   for(int i = L1; i <= R1; i++) // traversing through the first range.
      sum += arr[i];
   cout << sum << "\n";
   sum = 0;
   for(int i = L2; i <= R2; i++) // traversing through the second range.
      sum += arr[i];
   cout << sum << "\n";
}

आउटपुट

9
12

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

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

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

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

उदाहरण

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

int main() {
   int arr[] = {1, 2, 3, 4, 5};
   int n = sizeof(arr)/sizeof(int); // size of given array.
   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) // to avoid segmentation fault
      cout << prefix[R1] - prefix[L1 - 1] << "\n";
   else
      cout << prefix[R1] << "\n";

   if(L2) // avoiding segmentation fault.
      cout << prefix[R2] - prefix[L2 - 1] << "\n";
   else
      cout << prefix[R2] << "\n";
}

आउटपुट

9
12

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

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

निष्कर्ष

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


  1. अद्यतन के बिना श्रेणी योग प्रश्नों के लिए सी ++ कार्यक्रम?

    हमें अनुक्रमणिका 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}

  1. सी++ प्रोग्राम बिना अपडेट के रेंज सम क्वेश्चन के लिए?

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

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

    यह पॉइंटर का उपयोग करके सरणी तत्वों के योग का पता लगाने के लिए एक C++ प्रोग्राम है। एल्गोरिदम Begin    Initialize the array elements with values from user input.    Initialize s = 0    Loop for i = 0 to       s = s + *(ptr + i)    Print the sum