কম্পিউটার

একটি মার্কভ চেইনে একটি নির্দিষ্ট সময়ে একটি রাজ্যের সম্ভাব্যতা খুঁজে বের করার জন্য C++ প্রোগ্রাম


এই নিবন্ধে, আমরা মার্কভ চেইনের একটি নির্দিষ্ট সময়ের মধ্যে প্রাথমিক অবস্থা থেকে চূড়ান্ত অবস্থায় পৌঁছানোর সম্ভাবনা খুঁজে বের করার জন্য একটি প্রোগ্রাম নিয়ে আলোচনা করব।

মার্কভ চেইন হল একটি এলোমেলো প্রক্রিয়া যা বিভিন্ন রাজ্য এবং এক রাজ্য থেকে অন্য রাজ্যে যাওয়ার সম্পর্কিত সম্ভাব্যতা নিয়ে গঠিত। এক রাজ্য থেকে অন্য রাজ্যে যেতে একক সময় লাগে৷

মার্কভ চেইন একটি নির্দেশিত গ্রাফ দ্বারা প্রতিনিধিত্ব করা যেতে পারে। সমস্যা সমাধানের জন্য, আমরা প্রদত্ত মার্কভ চেইন থেকে একটি ম্যাট্রিক্স তৈরি করতে পারি। সেই ম্যাট্রিক্সে, অবস্থানে থাকা উপাদান (a,b) রাজ্য 'a' থেকে 'b' অবস্থায় যাওয়ার সম্ভাবনার প্রতিনিধিত্ব করবে।

এটি সূত্র ব্যবহার করে সম্ভাব্যতা বণ্টনের জন্য একটি পুনরাবৃত্ত পদ্ধতিতে চলে যাবে

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++ প্রোগ্রাম প্রদত্ত পূর্ণসংখ্যা থেকে সর্বাধিক সম্ভাব্য ট্যালি বের করতে

  2. একটি প্রদত্ত গ্রাফে সেতুর প্রান্তের সংখ্যা খুঁজে বের করার জন্য C++ প্রোগ্রাম

  3. একটি প্রদত্ত সিকোয়েন্সের দীর্ঘতম ক্রমবর্ধমান অনুক্রম খুঁজে পেতে C++ প্রোগ্রাম

  4. একটি মার্কভ চেইনে একটি নির্দিষ্ট সময়ে একটি রাষ্ট্রের সম্ভাব্যতা খুঁজুন - পাইথনে 1 সেট করুন