কম্পিউটার

C++ এ একটি প্রদত্ত 2D অ্যারেতে ন্যূনতম যোগফল সাবম্যাট্রিক্স


ম্যাট্রিক্স গঠনকারী পূর্ণসংখ্যা উপাদানগুলির একটি 2-D অ্যারে দেওয়া হয়েছে। কাজটি হল এইভাবে গঠিত ম্যাট্রিক্স থেকে সাবম্যাট্রিক্স টেনে ন্যূনতম যোগফলের গণনা করা।

আসুন এর জন্য বিভিন্ন ইনপুট আউটপুট পরিস্থিতি দেখি -

- মধ্যে int matrix[size][size] ={ {2, 3, -1, 5}, {-2, 9, -1, 6}, { 5, 6, 9, -9}, { -6, 1, 1, 1} }

আউট - একটি প্রদত্ত 2D অ্যারেতে ন্যূনতম যোগফল সাবম্যাট্রিক্স হল:-9

ব্যাখ্যা - আমাদেরকে 4x4 আকারের একটি 2-D অ্যারে দেওয়া হয়েছে অর্থাৎ 4টি সারি এবং 4টি কলাম। এখন, আমরা প্রদত্ত ম্যাট্রিক্স থেকে সাব-ম্যাট্রিক্স বের করব যাতে ন্যূনতম সাব -9 হয়।

-এ int ম্যাট্রিক্স[সারি][কলাম] ={ {4, 1, 3}, {-1, -1, -1}, { 6, 2, 3}}

আউট - একটি প্রদত্ত 2D অ্যারেতে ন্যূনতম যোগফল সাবম্যাট্রিক্স হল:-3

ব্যাখ্যা - আমাদেরকে 3x3 আকারের একটি 2-D অ্যারে দেওয়া হয়েছে অর্থাৎ 3টি সারি এবং 3টি কলাম। এখন, আমরা প্রদত্ত ম্যাট্রিক্স থেকে সাব-ম্যাট্রিক্স খুঁজে বের করব যেমন ন্যূনতম সাব হল -3 যা একটি প্রদত্ত ম্যাট্রিক্সের দ্বিতীয় সারি দিয়ে অর্জন করা হয় এবং সাব-ম্যাট্রিক্সটি 1x3 আকারের হবে অর্থাৎ 1 সারি এবং 3টি কলাম।

নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি হল -

  • একটি পূর্ণসংখ্যা 2-ডি অ্যারে ইনপুট করুন এবং আরও প্রক্রিয়াকরণের জন্য ন্যূনতম_ম্যাট্রিক্স(ম্যাট্রিক্স) ফাংশনে ডেটা পাস করুন৷

  • ন্যূনতম_ম্যাট্রিক্স(ম্যাট্রিক্স)

    ফাংশনের ভিতরে
    • অস্থায়ী ভেরিয়েবলগুলিকে int ফলাফল হিসাবে ঘোষণা করুন =INT_MAX, int arr[row], int total, int first এবং int end৷

    • স্টার্ট লুপ FOR int থেকে temp পর্যন্ত কলামের চেয়ে কম তাপমাত্রা পর্যন্ত। লুপের ভিতরে অ্যারে উপাদানগুলিকে 0 হিসাবে সেট করুন। int থেকে temp_2 পর্যন্ত temp_2 কলাম থেকে কম পর্যন্ত আরেকটি লুপ FOR শুরু করুন। লুপের ভিতরে, int i থেকে 0 থেকে i সারির কম না হওয়া পর্যন্ত আরেকটি লুপ শুরু করুন এবং arr[i] কে ar[i] + ম্যাট্রিক্স[i][temo_2] হিসাবে সেট করুন।

    • Algo_Kad(arr, &first, &end, row)

      ফাংশনে কল হিসাবে মোট সেট করুন
    • যদি মোট ফলাফলের চেয়ে কম হয় তাহলে ফলাফলটি মোট হিসাবে সেট করুন

    • চূড়ান্ত আউটপুট হিসাবে ফলাফল প্রিন্ট করুন৷

  • int Algo_Kad ফাংশনের ভিতরে(int* arr, int* first, int* end, int max_size)

    • অস্থায়ী ভেরিয়েবলগুলিকে int-টোটাল হিসাবে 0, int-এর ফলাফল INT_MAX-এ, int-টেম্প-এ 0 এবং *end =-1 হিসাবে ঘোষণা করুন

    • i থেকে 0 পর্যন্ত লুপ শুরু করুন যতক্ষণ না i max_size থেকে কম হয়। লুপের ভিতরে, মোট সেট করুন মোট + arr[i]।

    • 0 এর থেকে বেশি হলে মোট 0 এবং temp হিসাবে i + 1 হিসাবে সেট করুন।

    • অন্যথায়, ফলাফলের চেয়ে মোট কম পরীক্ষা করুন তারপর ফলাফল সেট করুন মোট, *প্রথম থেকে টেম্প এবং *শেষ থেকে i

    • এখন, চেক করুন IF *end not equals to -1 তারপর ফলাফল দিন।

    • ফলাফল সেট করুন arr[0], *first to 0 এবং *end to 0

    • i থেকে 1 পর্যন্ত FOR লুপ শুরু করুন যতক্ষণ না i max_size থেকে কম হয়। লুপের ভিতরে, ফলাফলের চেয়ে IF arr[i] কম চেক করুন তারপর arr[i] হিসাবে ফলাফল সেট করুন, *প্রথমে i হিসাবে এবং *শেষ i হিসাবে

    • ফলাফল ফেরত।

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
#define row 4
#define column 4
int Algo_Kad(int* arr, int* first, int* end, int max_size)
{
   int total = 0;
   int result = INT_MAX;
   int temp = 0;
   *end = -1;
   for(int i = 0; i < max_size; ++i)
   {
      total = total + arr[i];
      if(total > 0)
      {
         total = 0;
         temp = i + 1;
      }
      else if(total < result)
      {
         result = total;
         *first = temp;
         *end = i;
      }
   }
   if(*end != -1)
   {
      return result;
   }
   result = arr[0];
   *first = 0;
   *end = 0;

   for(int i = 1; i < max_size; i++)
   {
      if(arr[i] < result)
      {
         result = arr[i];
         *first = i;
         *end = i;
      }
   }
   return result;
}
void Minimum_Matrix(int matrix[][column])
{
   int result = INT_MAX;
   int arr[row];
   int total;
   int first;
   int end;

   for(int temp = 0; temp < column; ++temp)
   {
      memset(arr, 0, sizeof(arr));
      for(int temp_2 = temp; temp_2 < column; ++temp_2)
      {
         for(int i = 0; i < row; ++i)
         {
            arr[i] = arr[i] + matrix[i][temp_2];
         }

         total = Algo_Kad(arr, &first, &end, row);

         if(total < result)
         {
            result = total;
         }
      }
   }
   cout<<"Minimum sum submatrix in a given 2D array is: "<<result;
}
int main()
{
   int matrix[row][column] = {{2, 3, -1, 5},
                              {-2, 9, -1, 6},
                              { 5, 6, 9, -9},
                              { -6, 1, 1, 1} };
   Minimum_Matrix(matrix);
   return 0;
}

আউটপুট

যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট তৈরি করবে

Minimum sum submatrix in a given 2D array is: -9

  1. C++ এ একটি অ্যারের অঙ্ক থেকে গঠিত দুটি সংখ্যার ন্যূনতম যোগফল

  2. |ai + aj – k| এর ন্যূনতম সম্ভাব্য মান C++ এ প্রদত্ত অ্যারে এবং k-এর জন্য

  3. C++ এ একটি কো-প্রাইম অ্যারে তৈরি করতে ন্যূনতম সন্নিবেশ

  4. C++ এ একটি সমষ্টি অ্যারে ধাঁধা?