কম্পিউটার

আপডেট ছাড়া রেঞ্জ সমষ্টি প্রশ্নের জন্য C++ প্রোগ্রাম?


এখানে আমরা দেখব কিভাবে একটি অ্যারেতে index i থেকে index j পর্যন্ত উপাদানের যোগফল পাওয়া যায়। এটি মূলত রেঞ্জ কোয়েরি। সূচক i থেকে j পর্যন্ত একটি লুপ চালিয়ে এবং যোগফল গণনা করার মাধ্যমে কাজটি সহজ। কিন্তু আমাদের খেয়াল রাখতে হবে যে এই ধরনের রেঞ্জ কোয়েরি একাধিকবার চালানো হবে। তাই উল্লেখিত পদ্ধতি ব্যবহার করলে অনেক সময় লাগবে। আরও কার্যকর উপায় ব্যবহার করে এই সমস্যাটি সমাধান করতে আমরা প্রথমে ক্রমবর্ধমান যোগফল পেতে পারি, তারপর পরিসীমা যোগফল ধ্রুবক সময়ের মধ্যে পাওয়া যাবে। আসুন ধারণা পেতে অ্যালগরিদম দেখি।

অ্যালগরিদম

rangeSum(arr, i, j)

begin
   c_arr := cumulative sum of arr
   if i = 0, then
      return c_arr[j];
      return c_arr[j] – c_arr[i-1]
end

উদাহরণ

#include<iostream>
using namespace std;
void cumulativeSum(int c_arr[], int arr[], int n){
   c_arr[0] = arr[0];
   for(int i = 1; i<n; i++){
      c_arr[i] = arr[i] + c_arr[i-1];
   }
}
int rangeSum(int c_arr[], int i, int j){
   if( i == 0){
      return c_arr[j];
   }
   return c_arr[j] - c_arr[i-1];
}
main() {
   int data[] = {5, 4, 32, 8, 74, 14, 23, 65};
   int n = sizeof(data)/sizeof(data[0]);
   int c_arr[n];
   cumulativeSum(c_arr, data, n); //get cumulative sum
   cout << "Range sum from index (2 to 5): " << rangeSum(c_arr, 2, 5) << endl;
   cout << "Range sum from index (0 to 3): " << rangeSum(c_arr, 0, 3) << endl;
   cout << "Range sum from index (4 to 7): " << rangeSum(c_arr, 4, 7) << endl;
}

আউটপুট

Range sum from index (2 to 5): 128
Range sum from index (0 to 3): 49
Range sum from index (4 to 7): 176

  1. আপডেট ছাড়াই রেঞ্জ সমষ্টি প্রশ্নের জন্য C++ প্রোগ্রাম?

  2. Pigeonhole সাজানোর জন্য C++ প্রোগ্রাম?

  3. জেকেনডর্ফের উপপাদ্যের জন্য C++ প্রোগ্রাম?

  4. আপডেট ছাড়া রেঞ্জ সমষ্টি প্রশ্নের জন্য C++ প্রোগ্রাম?