কম্পিউটার

C++ প্রোগ্রামে প্রতিটি অ্যাক্সেসের পরে সর্বাধিক হ্রাস পেলে অ্যারে থেকে সর্বাধিক


এই সমস্যায়, আমাদেরকে N পূর্ণসংখ্যার একটি অ্যারে [] এবং একটি পূর্ণসংখ্যা m দেওয়া হয়েছে। আমাদের কাজ হল অ্যারে থেকে সর্বাধিকগুলি খুঁজে বের করার জন্য একটি প্রোগ্রাম তৈরি করা যখন প্রতিটি অ্যাক্সেসের পরে সর্বাধিক হ্রাস পায়৷

সমস্যা বর্ণনা − আমাদের অ্যারের সর্বাধিক উপাদানগুলির সর্বাধিক যোগফল খুঁজে বের করতে হবে এবং সর্বোচ্চ এক k বার কমাতে হবে৷

সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,

ইনপুট

arr[] = {3, 6, 7, 8, 8}, k = 3

আউটপুট

ব্যাখ্যা

First iteration: array before = {3, 6, 7, 8, 8}, max = 8, sum = 8, array after update = {3, 6, 7, 7, 8}
Second iteration: array before = {3, 6, 7, 7, 8}, max = 8, sum = 8 + 8 = 16, array after update = {3, 6, 7, 7, 7}
Third iteration: array before = {3, 6, 7, 7, 7}, max = 7, sum = 16 + 7 = 23, array after update = {3, 6, 6, 7, 7}
Maximum sum = 23

সমাধান পদ্ধতি

ধারণা হল অ্যারের সর্বাধিক খুঁজে বের করা এবং তারপর maxSum যোগ করার পরে এটি হ্রাস করা। এই প্রক্রিয়াটি k বার পুনরাবৃত্তি করলে ফলাফল পাওয়া যায়।

অ্যারের সর্বাধিক উপাদান খুঁজে বের করার জন্য, একাধিক উপায় হতে পারে এবং সবচেয়ে প্রতিশ্রুতিশীলটি হল সর্বাধিক হিপ ডেটা স্ট্রাকচার ব্যবহার করা৷

সুতরাং, আমরা অ্যারের সমস্ত উপাদান একটি সর্বাধিক হিপে সন্নিবেশ করব, হিপের সর্বাধিক উপাদানটি এটির মূলে উপস্থাপন করা হয়েছে। আমরা এটি মুছে ফেলব, maxSum-এ যোগ করব এবং হিপে ফিরে (এলিমেন্ট -1) সন্নিবেশ করব। কাঙ্খিত ম্যাক্সসাম পেতে এটি k বার করুন।

অ্যালগরিদম

শুরু করুন − maxSum =0

ধাপ 1 - একটি সর্বাধিক হিপ ডেটা স্ট্রাকচার তৈরি করুন এবং এতে উপাদানগুলিকে পুশ করুন৷

ধাপ 2 − i -> 0 থেকে k এর জন্য লুপ করুন এবং সেট 3 - 5 অনুসরণ করুন।

ধাপ 3 − রুট এলিমেন্ট নিন, maxVal =রুট এবং পপ করুন।

পদক্ষেপ 4৷ − maxVal যোগ করুন maxSum, maxSum +=maxVal

ধাপ 5 − সর্বাধিক হিপে আপডেট করা maxVal ঢোকান৷

ধাপ 6 - maxSum ফেরত দিন।

আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম,

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
long calcMaxSumDec(int arr[], int m, int n) {
   long maxSum = 0;
   long maxVal;
   priority_queue<long> max_heap;
   for (int i = 0; i < n; i++) {
      max_heap.push(arr[i]);
   }
   for(int i = 0; i < m; i++) {
      maxVal = max_heap.top();
      maxSum += maxVal;
      max_heap.pop();
      max_heap.push(maxVal - 1);
   }
   return maxSum;
}
int main() {
   int arr[] = { 2, 3, 5, 4 }, m = 3;
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The maximums from array when the maximum decrements after every access is    "<<calcMaxSumDec(arr, m, n);
}

আউটপুট

The maximums from array when the maximum decrements after every access is 13

  1. অ্যারে থেকে সর্বোচ্চ অপসারণ যখন অপসারণের সময়>=C++ এ অপেক্ষার সময়

  2. C++ এ অ্যারে থেকে সর্বাধিক পরিধি ত্রিভুজ

  3. C++ এ বস্তুর প্রদত্ত অ্যারে থেকে সর্বোচ্চ উচ্চতার পিরামিড খুঁজুন

  4. C++ প্রোগ্রামে } এর পরে একটি সেমিকোলন কখন বাধ্যতামূলক হয়?