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

मार्कोव श्रृंखला में एक निश्चित समय पर एक राज्य की संभावना खोजने के लिए सी ++ प्रोग्राम

इस लेख में, हम मार्कोव श्रृंखला में एक निश्चित समय अवधि में प्रारंभिक अवस्था से अंतिम अवस्था तक पहुँचने की संभावना को खोजने के लिए एक कार्यक्रम पर चर्चा करेंगे।

मार्कोव श्रृंखला एक यादृच्छिक प्रक्रिया है जिसमें विभिन्न राज्यों और एक राज्य से दूसरे राज्य में जाने की संबंधित संभावनाएं शामिल हैं। एक राज्य से दूसरे राज्य में जाने में इकाई समय लगता है।

मार्कोव श्रृंखला को एक निर्देशित ग्राफ द्वारा दर्शाया जा सकता है। समस्या को हल करने के लिए, हम दी गई मार्कोव श्रृंखला से एक मैट्रिक्स बना सकते हैं। उस मैट्रिक्स में, स्थिति (ए, बी) पर तत्व राज्य 'ए' से राज्य 'बी' में जाने की संभावना का प्रतिनिधित्व करेगा।

यह सूत्र का उपयोग करके संभाव्यता वितरण के लिए एक पुनरावर्ती दृष्टिकोण को छोड़ देगा

P(t) = Matrix * P(t-1)

उदाहरण

#include <bits/stdc++.h>
using namespace std;
#define float_vec vector<float>
//to multiply two given matrix
vector<float_vec > multiply(vector<float_vec > A, vector<float_vec > B, int N) {
   vector<float_vec > C(N, float_vec(N, 0));
   for (int i = 0; i < N; ++i)
      for (int j = 0; j < N; ++j)
         for (int k = 0; k < N; ++k)
            C[i][j] += A[i][k] * B[k][j];
   return C;
}
//to calculate power of matrix
vector<float_vec > matrix_power(vector<float_vec > M, int p, int n) {
   vector<float_vec > A(n, float_vec(n, 0));
   for (int i = 0; i < n; ++i)
      A[i][i] = 1;
   while (p) {
      if (p % 2)
         A = multiply(A, M, n);
      M = multiply(M, M, n);
      p /= 2;
   }
   return A;
}
//to calculate probability of reaching from initial to final
float calc_prob(vector<float_vec > M, int N, int F, int S, int T) {
   vector<float_vec > matrix_t = matrix_power(M, T, N);
   return matrix_t[F - 1][S - 1];
}
int main() {
   vector<float_vec > G{
      { 0, 0.08, 0, 0, 0, 0 },
      { 0.33, 0, 0, 0, 0, 0.62 },
      { 0, 0.06, 0, 0, 0, 0 },
      { 0.77, 0, 0.63, 0, 0, 0 },
      { 0, 0, 0, 0.65, 0, 0.38 },
      { 0, 0.85, 0.37, 0.35, 1.0, 0 }
   };
   //number of available states
   int N = 6;
   int S = 4, F = 2, T = 100;
   cout << "Probability of reaching: " << F << " in time " << T << " after starting from: " << S << " is " << calc_prob(G, N, F, S, T);
   return 0;
}

आउटपुट

Probability of reaching: 2 in time 100 after starting from: 4 is 0.271464

  1. दिए गए पूर्णांकों से अधिकतम संभव मिलान ज्ञात करने के लिए C++ प्रोग्राम

    मान लीजिए, हमें दो पूर्णांक n और m दिए गए हैं और पूर्णांकों के k टुपल्स हैं जिनमें चार पूर्णांक संख्याएँ {ai, bi, ci, di} हैं। चार सरणियाँ a, b, c, d दिए गए हैं, और a[i] i-th tuple के मान को दर्शाता है। अब, आइए एक अनुक्रम dp पर विचार करें जिसमें n धनात्मक पूर्णांक हैं और 1 <=dp[1]

  1. C++ प्रोग्राम दिए गए ग्राफ़ में ब्रिज किनारों की संख्या का पता लगाने के लिए

    मान लीजिए, हमें एक अभारित, अप्रत्यक्ष ग्राफ दिया गया है जिसमें n कोने और m किनारे हैं। ग्राफ़ में ब्रिज का किनारा वह किनारा होता है जिसके हटाने से ग्राफ़ डिस्कनेक्ट हो जाता है। हमें दिए गए आलेख में ऐसे आलेखों की संख्या ज्ञात करनी है। ग्राफ़ में समानांतर किनारे या सेल्फ़-लूप नहीं होते हैं। इसलिए, यद

  1. मार्कोव श्रृंखला में एक निश्चित समय पर एक राज्य की संभावना का पता लगाएं - पायथन में 1 सेट करें

    मान लीजिए कि हमारे पास मार्कोव चेन ग्राफ g है; यदि हम समय t =0 होने पर राज्य S से शुरू करते हैं तो हमें समय T पर राज्य F तक पहुंचने की संभावना मिलती है। जैसा कि हम जानते हैं कि एक मार्कोव श्रृंखला एक यादृच्छिक प्रक्रिया है जिसमें विभिन्न राज्यों और एक राज्य को दूसरे में स्थानांतरित करने की संभावनाएं