Program for Markov matrix in C++



Given a matrix M[r][c] with β€˜r’ number of rows and β€˜c’ number of columns, we have to check that the given matrix is Markov matrix or not. If the input matrix is Markov matrix then print the output β€œIt is a Markov matrix” and β€œit’s not an Markov matrix” if it is not a Markov matrix.

Markov Matrix

Now, what is Markov Matrix? A matrix M is a Markov matrix if and only if its sum of each row is equal to only 1.

Like in the given example below βˆ’

$$\begin{bmatrix}0.2 & 0.3 & 0.5 \0.1 & 0.7 & 0.2 \0.4 & 0.5 & 0.1 \\end{bmatrix}\$$

In the above example if we sum each row βˆ’

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

Here every row has a sum of 1.0, so the above matrix is Markov matrix.

Example

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 

Approach

We will make another 1-d matrix and store the sum of every row in that matrix. Then we will iterate the whole array and then find whether all the elements in the array is 1 or not, if 1 then the given matrix was Markov matrix else the matrix is not Markov matrix

Algorithm

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

Example

#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 ";
}

Output

its a markov matrix
Updated on: 2019-09-23T08:18:42+05:30

478 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements