কম্পিউটার টিউটোরিয়াল

C++ এক্সপ্যান্ডিং ম্যাট্রিক্সে পূর্ববর্তী উপাদান রিটার্ন করুন


এক্সপ্যান্ডিং ম্যাট্রিক্স (Expanding Matrix) সমস্যা আলোচনা করব। এক্সপ্যান্ডিং ম্যাট্রিক্স হচ্ছে এমন একটি ম্যাট্রিক্স যার আকার কোনো ফ্যাক্টর দ্বারা folyammente বাড়তে থাকে।

এখানে আমাদের একটি ক্যারেক্টার ম্যাট্রিক্স আছে যার আকার ২ গুণ ফ্যাক্টর দ্বারা বাড়ছে, অর্থাৎ যদি আসল ম্যাট্রিক্সের আকার N * N হয়, তবে এক্সপ্যান্ড করা ম্যাট্রিক্সের আকার হয়ে যায় 2N * 2N। আমাদের (i, j) এ থাকা ক্যারেক্টার সিকোয়েন্স দেওয়া আছে, এবং আমাদের (i, (j - N - 1)%N) এ থাকা ক্যারেক্টার সিকোয়েন্স রিটার্ন করতে হবে।

প্রাথমিক এক্সপ্যান্ড করা ম্যাট্রিক্সগুলো ভিজুয়ালাইজ করে বুঝি,

Given Matrix -> [ a, b ] [ c, d ], 2 X 2 matrix Multiplying with { a, b, c, d } A X [ a, b ] B X [ a, b ] C X [ a, b ] D X [ a, b ] [ c, d ] [ c, d ] [ c, d ] [ c, d ] Expanded Matrix -> [ aa, ab, ba, bb ] [ ac, ad, bc, bd ] [ ca, cb, da, db ] [ cc, cd, dc, dd ], 4X4 matrix আবার এক্সপ্যান্ড করতে, { a, b, c, d } দিয়ে গুন করলে 8X8 ম্যাট্রিক্স বने। Expanded Matrix - > [ aaa, aab, aba, abb, baa, bab, bba, bbb ] [ aac, aad, abc, abd, bac, bad, bbc, bbd ] [ aca, acb, ada, adb, bca, bcb, bda, bdb ] [ acc, acd, adc, add, bcc, bcd, bdc, bdd ] [ caa, cab, cba, cbb, daa, dab, dba, dbb ] [ cac, cad, cbc, cbd, dac, dad, dbc, dbd ] [ cca, ccb, cda, cdb, dca, dcb, dda, ddb ] [ ccc, ccd, cdc, cdd, dcc, dcd, ddc, ddd ]

এখানে দুটি প্রাথমিক এক্সপ্যান্ড করা ম্যাট্রিক্স দেওয়া আছে। ধরুন আমাদের একটি ক্যারেক্টার সিকোয়েন্স "bcc" দেওয়া হয়, তবে আমাদের ঠিক তার বামপাশের সিকোয়েন্সটি রিটার্ন করতে হবে, অর্থাৎ "add"। ম্যাট্রিক্সটিকে সার্কুলার (circular) ধরা হয়েছে, অর্থাৎ যদি দেওয়া সিকোয়েন্স (i, 0)-এ থাকে, তবে (i, N-1) এ থাকা সিকোয়েন্স রিটার্ন করতে হবে। উদাহরণস্বরূপ:

Input: abb Output: aba Explanation: 8X8 ম্যাট্রিক্সে abb-এর ঠিক বামপাশে aba আছে। Input: aadc Output: aacd Input: abbcd Output: abbcc

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

সমস্যাটি প্রথমে দেখে একমাত্র সমাধান যা মনে হয় সেটি হলো দেওয়া সিকোয়েন্স থাকা এক্সপ্যান্ড করা ম্যাট্রিক্স খুঁজে বের করা, কিন্তু এটি তত জটিল নয়। আমাদের প্রথমে ম্যাট্রিক্সটি ফর্ম করতে হবে এবং তারপর সিকোয়েন্সটি সার্চ করতে হবে।

দক্ষ পদ্ধতি

কিছু প্রাথমিক এক্সপ্যান্ড করা ম্যাট্রিক্স দেখে আমরা একটি প্যাটার্ন খুঁজে পেলাম যার মাধ্যমে আমরা পূর্ববর্তী উপাদানটি দেখতে পাই। অর্থাৎ:

  • ক্যারেক্টার সিকোয়েন্সের লাস্ট ইনডেক্স থেকে ট্রাভার্স শুরু করুন।

  • যদি ইনডেক্স করা এলিমেন্ট 'b' বা 'd' হয়, তবে তাকে 'a' বা 'c' করে দিন এবং অ্যারের ট্রাভার্স বন্ধ করুন।

  • যদি ইনডেক্স করা এলিমেন্ট 'a' বা 'c' হয়, তবে তাকে 'b' বা 'd' করে দিন এবং পরবর্তী ইনডেক্সে যান এবং চেক করুন।

উদাহরণ

উপরোক্ত পদ্ধতির জন্য C++ কোড

#include <bits/stdc++.h> using namespace std; int main (){    string seq = "abbcd";    int n = seq.length ();    // স্ট্রিংয়ের লাস্ট থেকে ট্রাভার্স করুন।    for (int i = n; i >= 0; i--){       // যদি এলিমেন্ট b বা d হয়, তবে সেগুলো চেঞ্জ করে ট্রাভার্স বন্ধ করুন।       if (seq[i] == 'b'){       seq[i] = 'a';       break;    }    if (seq[i] == 'd'){       seq[i] = 'c';       break;    }    // যদি এলিমেন্ট a বা c হয়, তবে সেগুলো চেঞ্জ করে পরবর্তী এলিমেন্টে যান।    if (seq[i] == 'a')       seq[i] = 'b';    else if (seq[i] == 'c')       seq[i] = 'd';    }    cout << "The Previous sequence is: " << seq;    return 0; }

আউটপুট

The previous sequence is: abbcc

উপসংহার

এই আর্টিকেলে, আমরা এক্সপ্যান্ডিং ক্যারেক্টার ম্যাট্রিক্স এবং এর গঠন প্রক্রিয়া আলোচনা করেছি। আমরা এক্সপ্যান্ডিং ম্যাট্রিক্সে পূর্ববর্তী উপাদান বের করার সমস্যা আলোচনা করেছি। আমরা এই সমস্যাটি এক্সপ্যান্ডিং ম্যাট্রিক্স দ্বারা তৈরি প্যাটার্ন বুঝে সমাধান করেছি।

আমরা এই সমস্যার জন্য C++ কোডও আলোচনা করেছি যা আমরা C, Java, Python ইত্যাদি যেকোনো প্রোগ্রামিং ভাষায় লিখতে পারি। আশা করি আপনি এই টিউটোরিয়ালটিকে উপকারী পাবেন।


  1. সি++ প্রোগ্রাম: ম্যাট্রিক্সের প্রতিটি কলামের সর্বোচ্চ উপাদান নির্ণয়

  2. C++ বুলিয়ান ম্যাট্রিক্স (Boolean Matrix)

  3. C++-এ বাইসিমেট্রিক ম্যাট্রিক্স (Bisymmetric Matrix)

  4. C++-এ বুলিয়ান ম্যাট্রিক্স সমস্যা (Boolean Matrix Question)