ম্যাট্রিক্স গঠনকারী পূর্ণসংখ্যা উপাদানগুলির একটি 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