马尔可夫矩阵的 JavaScript 程序


矩阵是一种二维数组,它以一定数量的行组成,并且每行都有相同数量的列,通过行号和列号,我们可以获取任何特定索引处的元素。对于马尔可夫矩阵,每一行的和必须等于 1。我们将实现一个代码来创建一个新的马尔可夫矩阵,并判断当前给定的矩阵是否为马尔可夫矩阵。

问题介绍

在给定的问题中,我们必须编写一个代码,使用二进制数据(即仅使用 0 和 1)生成马尔可夫矩阵,因为我们知道马尔可夫矩阵是一个矩阵,其中每一行的和必须等于 1(这并不意味着它只包含二进制数字),这意味着每一行将只有一个 1,其他元素为 0。

我们将实现的程序只是马尔可夫矩阵的一种特殊情况。

对于第二个代码,我们将得到一个矩阵,并必须找到当前矩阵是否为马尔可夫矩阵。让我们看看这两个代码 -

创建马尔可夫矩阵

在当前部分,我们使用二进制数字(0 和 1)来创建马尔可夫矩阵。让我们先看看方法,然后我们将转向代码实现 -

方法

在此代码中,我们将使用 new 关键字和 Array 创建一个矩阵。对于数组的每个索引,我们将再次创建一个数组来填充它。

对于矩阵的每一行,使用随机函数,我们将获得列数范围内的随机数,并将当前行的该列填充为 1,其他元素填充为 0。

最后,我们将返回矩阵。

示例

// creating a Markov's Matrix using binary digits
// defining the rows and columns
var row = 4
var col = 5
function MarkovMat(row, col){

   // creating an array of size row
   var arr = new Array(row);

   // traversing over the created array
   for(var i = 0; i < row; i++){

      // creating an array of size column
      var brr = new Array(col);
      brr.fill(0) // making every element zero of current array

      // generating random number
      var k = Math.floor(Math.random()*5);

      // marking kth index as 1
      brr[k] = 1

      // adding columns to the current row
      arr[i] = brr;
   }

   // printing the values
   console.log(arr)
}

// calling the function
MarkovMat(row,col)

时间和空间复杂度

在上面的代码中,我们遍历了整个矩阵,并且每次遍历时都获取了随机数,这需要常数时间。因此,上面代码的时间复杂度为 O(N*M),其中 N 是行数,M 是列数。

空间复杂度仅等于矩阵的大小,并且我们没有使用任何额外的空间。因此,上面代码的空间复杂度为 O(N*M)。

检查当前矩阵是否为马尔可夫矩阵

在当前部分,我们得到一个矩阵,并必须找到当前矩阵是否为马尔可夫矩阵。让我们先看看方法,然后我们将转向代码实现 -

方法

在此代码中,我们将简单地遍历矩阵,并为每一行获取其计数。如果当前行的计数为 1,则我们移动到下一行,否则我们将返回当前矩阵不是马尔可夫矩阵。

示例

// function to check whether the current matrix is
// markov or not
function isMarkov(mat){
   var rows = mat.length
   var col = mat[0].length;

   // checking the sum of each row
   for(var i = 0; i < rows;i++){
      var count = 0;
      for(var j =0; j<col; j++) {
         count += mat[i][j];
      }
      if(count != 1){
         console.log("The given matrix is not Markov's Matrix");
         return
      }
   }
   console.log("The given matrix is Markov's Matrix");
}

// defining the matrix1
matrix1 = [[0.5, 0, 0.5], [0.5, 0.25, 0.25], [1, 0.0, 0], [0.33, 0.34, 0.33]]
console.log("For the matrix1: ")
isMarkov(matrix1)

// defining the matrix2
matrix2 = [[0.5, 1, 0.5], [0.5, 0.25, 0.25], [1, 0.0, 0], [0.33, 0.34, 0.33]]
console.log("For the matrix2: ")
isMarkov(matrix2)

时间和空间复杂度

在上面的代码中,我们遍历了矩阵并存储了每一列的总和,使上面代码的时间复杂度为 O(N*M)。

我们在上面的代码中没有使用任何额外的空间,使空间复杂度为 O(1)。

结论

在本教程中,我们实现了马尔可夫矩阵的 JavaScript 程序。对于马尔可夫矩阵,每一行的和必须等于 1。我们已经实现了一个代码,使用随机数生成函数以 O(N*M) 的时间复杂度和相同空间生成二进制马尔可夫矩阵。此外,我们还实现了一个代码,该代码将检查当前矩阵是否为马尔可夫矩阵,时间复杂度为 O(N*M)。

更新于: 2023-03-30

138 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告