Computer >> Máy Tính >  >> Lập trình >> C ++

Chương trình cho ma trận Markov trong C ++

Cho ma trận M [r] [c] với số hàng là ‘r’ và số cột là ‘c’, chúng ta phải kiểm tra xem ma trận đã cho có phải là ma trận Markov hay không. Nếu ma trận đầu vào là ma trận Markov thì in đầu ra "Đó là ma trận Markov" và "nó không phải là ma trận Markov" nếu nó không phải là ma trận Markov.

Ma trận Markov

Bây giờ, Ma trận Markov là gì? Ma trận M là ma trận Markov nếu và chỉ khi tổng mỗi hàng của nó chỉ bằng 1.

Giống như trong ví dụ cho sẵn bên dưới -

$$ \ begin {bmatrix} 0,2 &0,3 &0,5 \\ 0,1 &0,7 &0,2 \\ 0,4 &0,5 &0,1 \\\ end {bmatrix} \\ $$

Trong ví dụ trên nếu chúng ta tính tổng từng hàng -

1st row sum = 0.2+0.3+0.5 = 1.0
2nd row sum = 0.1+0.7+0.2 = 1.0
3rd row sum = 0.4+0.5+0.1 = 1.0

Ở đây mỗi hàng có tổng là 1,0, vì vậy ma trận trên là ma trận Markov.

Ví dụ

Input: m[][] = { {0.2, 0.3, 0.5} ,
   {0.1, 0.7, 0.2},
   {0.4, 0.5, 0.1}}
Output: It is a Markov matrix
Input: m[][] = {  {0, 0, 1} ,
   {0, 0.7, 0.3},
   {0.5, 0.5, 0}}
Output: It is a Markov matrix 

Phương pháp tiếp cận

Chúng ta sẽ tạo một ma trận 1-d khác và lưu trữ tổng của mọi hàng trong ma trận đó. Sau đó, chúng ta sẽ lặp lại toàn bộ mảng và sau đó tìm xem tất cả các phần tử trong mảng có phải là 1 hay không, nếu 1 thì ma trận đã cho là ma trận Markov còn ma trận không phải là ma trận Markov

Thuật toán

Start
Step 1 -> Define macro as #define n 3
Step 2 -> declare function to check for markov matrix
   bool check(double arr[][n])
      Loop For int i = 0 and i <n and i++
         Declare double sum = 0
         Loop For int j = 0 and j < n and j++
            Set sum = sum + arr[i][j]
            If (sum != 1)
               return false
            End
         End
   Return true
Step 3 -> In main ()
   Declare double arr[3][3] = { { 0, 0, 1 },
      { 0.5, 0, 0.5 },
      { 0.9, 0, 0.1 } }
   If (check(arr))
      Print its a markov matrix
   Else
      Print its not a markov matrix
Stop

Ví dụ

#include <iostream>
using namespace std;
#define n 3
//check for markov matrix
bool check(double arr[][n]){
   for (int i = 0; i <n; i++){
      double sum = 0;
      for (int j = 0; j < n; j++)
         sum = sum + arr[i][j];
      if (sum != 1)
         return false;
   }
   return true;
}
int main(){
   double arr[3][3] = { { 0, 0, 1 },
      { 0.5, 0, 0.5 },
      { 0.9, 0, 0.1 } };
   if (check(arr))
      cout << "its a markov matrix ";
   else
      cout << "its not a markov matrix ";
}

Đầu ra

its a markov matrix