Cho ma trận M[r][c]. Kiểm tra xem có phải ma trận Markov hay không. Ma trận Markov: tổng mỗi hàng bằng 1.
Ví dụ:
[0.2 0.3 0.5] Hàng 1: 0.2+0.3+0.5 = 1.0 [0.1 0.7 0.2] Hàng 2: 0.1+0.7+0.2 = 1.0 [0.4 0.5 0.1] Hàng 3: 0.4+0.5+0.1 = 1.0 → Là Markov
Ví dụ
Input: {{0.2,0.3,0.5},{0.1,0.7,0.2},{0.4,0.5,0.1}} → Markov
Input: {{0,0,1},{0,0.7,0.3},{0.5,0.5,0}} → Markov
Cách làm
Tính tổng mỗi hàng, kiểm tra xem tất cả có bằng 1 không.
Thuật toán
BẮT ĐẦU
#define n 3
Hàm kiemTra(double a[][n])
Với i=0..n-1
sum = 0
Với j=0..n-1: sum += a[i][j]
Nếu sum != 1 → trả về false
Trả về true
main()
a = {{0,0,1},{0.5,0,0.5},{0.9,0,0.1}}
Nếu kiemTra(a) in "Markov" ngược lại "không Markov"
KẾT THÚC
Ví dụ mã C++
#include <iostream>
using namespace std;
#define n 3
bool kiemTra(double a[][n]){
for (int i = 0; i < n; i++){
double sum = 0;
for (int j = 0; j < n; j++)
sum += a[i][j];
if (sum != 1)
return false;
}
return true;
}
int main(){
double a[3][3] = {{0,0,1},{0.5,0,0.5},{0.9,0,0.1}};
if (kiemTra(a))
cout << "là ma trận Markov";
else
cout << "không phải ma trận Markov";
}
Kết quả đầu ra
là ma trận Markov