मैट्रिक्स के विस्तार पर आधारित किसी समस्या की चर्चा कीजिए। एक्सपेंडिंग मैट्रिक्स एक मैट्रिक्स है जिसका आकार लगातार किसी न किसी कारक से बढ़ता है।
यहां हमारे पास वर्णों का एक मैट्रिक्स है जिसका आकार 2 के कारक से बढ़ रहा है, अर्थात, यदि मैट्रिक्स का मूल आकार 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 To expand again, multiply it by { a, b, c, d } and a matrix of size 8X8 will be formed. 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 ]
यहाँ दो प्रारंभिक विस्तारित मैट्रिक्स हैं; तो मान लीजिए कि हमें "बीसीसी" वर्णों का अनुक्रम दिया गया है, तो हमें उस अनुक्रम को वापस करने की आवश्यकता है, यानी "जोड़ें।" इसके अलावा, मैट्रिक्स को वृत्ताकार माना जाता है, अर्थात, यदि दिया गया अनुक्रम (i, 0) पर है, तो उदाहरण के लिए अनुक्रम (i, N-1) पर वापस करें
Input: abb Output: aba Explanation: The sequence just left to abb is aba in the 8X8 matrix. Input: aadc Output: aacd Input: abbcd Output: abbcc
समाधान खोजने के लिए दृष्टिकोण
पहले समस्या को देखते हुए और एकमात्र समाधान जो दिमाग में आता है वह विस्तारित मैट्रिक्स को ढूंढना है जिसमें दिए गए अनुक्रम शामिल हैं लेकिन बहुत जटिल नहीं दिखते हैं। हमें पहले मैट्रिक्स बनाने और फिर अनुक्रम की खोज करने की आवश्यकता है।
कुशल दृष्टिकोण
कुछ प्रारंभिक विस्तारित मैट्रिक्स को देखने के बाद, हमें एक पैटर्न मिला जिसके माध्यम से हम पिछले तत्व को देख सकते हैं। यानी
-
अंतिम अनुक्रमणिका से वर्णों के अनुक्रम को पार करें।
-
यदि अनुक्रमित तत्व 'बी' या 'डी' है, तो इसे 'ए' या 'सी' में बदलें और सरणी को पार करना बंद करें।
-
यदि अनुक्रमित तत्व 'ए' या 'सी' है, तो इसे 'बी' या 'डी' में बदलें और अगली अनुक्रमणिका पर जाएं और इसे जांचें।
उदाहरण
उपरोक्त दृष्टिकोण के लिए C++ कोड
#include <bits/stdc++.h> using namespace std; int main (){ string seq = "abbcd"; int n = seq.length (); // traverse through the string from last. for (int i = n; i >= 0; i--){ // if the element is b or d, change them and stop traversing. if (seq[i] == 'b'){ seq[i] = 'a'; break; } if (seq[i] == 'd'){ seq[i] = 'c'; break; } // if an element is b or d, change them and move to the next element. 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, आदि में लिख सकते हैं। हमें उम्मीद है कि आपको यह ट्यूटोरियल मददगार लगेगा।