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