Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में वां पद (एक मैट्रिक्स घातांक उदाहरण) खोजें

इस समस्या में, हमें एक पूर्णांक N और एक पुनरावर्ती फलन दिया जाता है जो अन्य पदों के फलन के रूप में Nth पद देता है। हमारा काम Nth टर्म (एक मैट्रिक्स एक्सपोनेंटिएशन उदाहरण) खोजने के लिए एक प्रोग्राम बनाना है।

समारोह है

T(n) = 2*( T(n-1) ) + 3*( T(n-2) )
Initial values are
   T(0) = 1 , T(1) = 1
हैं

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट

N = 4

आउटपुट

41

स्पष्टीकरण

T(4) = 2* (T(3)) + 3*(T(2))
T(4) = 2* ( 2*(T(2)) + 3*(T(1)) ) + 3*( 2* (T(1)) + 3*(T(0)) )
T(4) = 2*( 2*(2* (T(1)) + 3*(T(0))) + 3*(1) ) + 3*(2*(1) + 3*(1))
T(4) = 2*(2 * (2 *(1) + 3*(1) )) + 3 ) + 3 * (5)
T(4) = 2*(2 * (2 + 3) + 3) + 15
T(4) = 2*(2 * (5) + 3) + 15
T(4) = 2*(10 + 3) + 15
T(4) = 2*(13) + 15 = 26 + 15 = 41

समाधान दृष्टिकोण

समस्या को हल करने के लिए एक आसान तरीका रिकर्सन या पुनरावृत्ति का उपयोग कर रहा है। हम पिछले पदों के लिए पुनरावर्ती कॉल के रूप में nth शब्द पा सकते हैं और प्रारंभिक मानों का उपयोग करके परिणाम प्राप्त किया जा सकता है।

हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,

उदाहरण

#include <iostream>
using namespace std;
long calcNthTerm(long n) {
   if(n == 0 || n == 1)
      return 1;
   return ( ( 2*(calcNthTerm(n-1)) ) + ( 3*(calcNthTerm(n-2)) ) );
}
int main() {
   long n = 5;
   cout<<n<<"th term of found using matrix exponentiation is "<<calcNthTerm(n);
   return 0;
}

आउटपुट

5th term of found using matrix exponentiation is 121

कुशल तरीका

समस्या को हल करने के लिए एक कुशल दृष्टिकोण मैट्रिक्स एक्सपोनेंटिएशन की अवधारणा का उपयोग कर रहा है। इस पद्धति में, हम Nth टर्म को खोजने के लिए एक ट्रांसफॉर्म मैट्रिक्स का उपयोग करेंगे।

इसके लिए हमें ट्रांसफॉर्म मैट्रिक्स खोजने की जरूरत है। मैट्रिक्स आश्रित पदों की संख्या पर निर्भर है जो यहां 2 होता है। और प्रारंभिक मान जो T(0) =1, T(1)=1. हैं।

रूपांतरण मैट्रिक्स k*k आकार का होता है। जिसे k*1 आकार के प्रारंभिक मैट्रिक्स से गुणा करने पर अगला पद लौटाता है।

ये रहे मान,

प्रारंभिक मैट्रिक्स =

$$\शुरू{bmatrix}1 \\0 \end{bmatrix}$$

रूपांतरण मैट्रिक्स =

$$\शुरू{bmatrix}2&3 \\1&0 \end{bmatrix}$$

Tn का मान TM (n-1) . के रूप में दिया जाता है *आईएम

$$\शुरू{bmatrix}2&3 \\1&0 \end{bmatrix}^{n-1}*\begin{bmatrix}2 \\3 \end{bmatrix}$$

हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,

उदाहरण

#include <iostream>
using namespace std;
#define MOD 1000000009
long calcNthTerm(long n) {
   if (n <= 1)
      return 1;
   n--;
   long resultantMat[2][2] = { 1, 0, 0, 1 };
   long transMat[2][2] = { 2, 3, 1, 0 };
   while (n) {
      long tempMat[2][2];
      if (n & 1) {
         tempMat[0][0] = (resultantMat[0][0] * transMat[0][0] +
         resultantMat[0][1] * transMat[1][0]) % MOD;
         tempMat[0][1] = (resultantMat[0][0] * transMat[0][1] +
         resultantMat[0][1] * transMat[1][1]) % MOD;
         tempMat[1][0] = (resultantMat[1][0] * transMat[0][0] +
         resultantMat[1][1] * transMat[1][0]) % MOD;
         tempMat[1][1] = (resultantMat[1][0] * transMat[0][1] +
         resultantMat[1][1] * transMat[1][1]) % MOD;
         resultantMat[0][0] = tempMat[0][0];
         resultantMat[0][1] = tempMat[0][1];
         resultantMat[1][0] = tempMat[1][0];
         resultantMat[1][1] = tempMat[1][1];
      }
      n = n / 2;
      tempMat[0][0] = (transMat[0][0] * transMat[0][0] +
      transMat[0][1] * transMat[1][0]) % MOD;
      tempMat[0][1] = (transMat[0][0] * transMat[0][1] +
      transMat[0][1] * transMat[1][1]) % MOD;
      tempMat[1][0] = (transMat[1][0] * transMat[0][0] +
      transMat[1][1] * transMat[1][0]) % MOD;
      tempMat[1][1] = (transMat[1][0] * transMat[0][1] +
      transMat[1][1] * transMat[1][1]) % MOD;
      transMat[0][0] = tempMat[0][0];
      transMat[0][1] = tempMat[0][1];
      transMat[1][0] = tempMat[1][0];
      transMat[1][1] = tempMat[1][1];
   }
   return (resultantMat[0][0] * 1 + resultantMat[0][1] * 1) % MOD;
}
int main() {
   long n = 5;
   cout<<n<<"th term of found using matrix exponentiation is "<<calcNthTerm(n);
   return 0;
}

आउटपुट

5th term of found using matrix exponentiation is 121

  1. C++ में मैट्रिक्स में एक विशिष्ट जोड़ी खोजें

    b. तो अगर मैट्रिक्स की तरह है - 1 2 -1 -4 -20 -8 -3 4 2 1 3 8 6 1 3 -4 -1 1 7 -6 0 -4 10 -5 1 आउटपुट 18 होगा। ऐसा इसलिए है क्योंकि mat[4, 2] - mat[1, 0] =18 में अधिकतम अंतर है। इसे हल करने के लिए हम मैट्रिक्स को प्रीप्रोसेस करेंगे जैसे कि इंडेक्स (i, j) मैट्रिक्स में अधिकतम तत्वों को (i,

  1. C++ में ड्रैगन कर्व सीक्वेंस का nवां टर्म खोजें

    यहां हम एक प्रोग्राम देखेंगे, जो ड्रैगन कर्व सीक्वेंस का nवां टर्म ढूंढ सकता है। ड्रैगन वक्र अनुक्रम एक अनंत द्विआधारी अनुक्रम है। यह 1 से शुरू होता है, और प्रत्येक चरण में, यह वैकल्पिक रूप से पिछले पद के प्रत्येक तत्व के पहले और बाद में 1s और 0s जोड़ता है, जिससे अगला पद बनता है। टर्म 1 :1 टर्म 2:1

  1. मैट्रिक्स घातांक का उपयोग करके फाइबोनैचि संख्या खोजने के लिए C++ प्रोग्राम

    फाइबोनैचि संख्याएं, जिन्हें आमतौर पर Fn के रूप में दर्शाया जाता है, एक अनुक्रम बनाते हैं, जिसे फाइबोनैचि अनुक्रम कहा जाता है, अर्थात; प्रत्येक संख्या 0 और 1 से शुरू होने वाली दो पूर्ववर्ती संख्याओं का योग है। वह है - F0 = 0 and F1 = 1 And Fn = Fn-1 + Fn-2 for n > 1. एल्गोरिदम Begin Take two 2