JavaScript 程式檢查矩陣是否對稱


對稱矩陣是矩陣的一種特殊情況,其中矩陣與其轉置矩陣相同。矩陣是一組以矩形形式儲存的整數或數字,等價於二維陣列,矩陣的轉置也是一個矩陣,我們可以透過用列替換所有行來獲得它。我們將得到一個矩陣,並必須列印它是否是對稱矩陣。

輸入

Mat = [[1, 2, 3],
	   [2, 3, 8],
	   [3, 8, 0]]

輸出

Yes, the given matrix is the symmetric matrix. 

解釋

眾所周知,轉置矩陣是列替換為行,行替換為列的矩陣,因此這裡第一行與第一列相同,第二行、列和第三行、列也相同。

輸入

Mat = [[1, 2, 3],
	   [2, 3, 9],
	   [3, 8, 0]]

輸出

No, the given matrix is not a symmetric matrix. 

解釋

在給定的矩陣中,轉置矩陣將為 -

Trans: [[1, 2, 3],
	    [2, 3, 8],
	    [3, 9, 0]]

我們可以看到第二行或第三行與第二列或第三列不同。

注意 - 正如我們所看到的,給定矩陣的轉置可以透過相互交換行和列來形成,這意味著如果矩陣的維度是 N*M,則轉置矩陣的維度將是 M*N。這意味著對於矩陣成為對稱矩陣,N 必須等於 M,並且它會導致方陣。

樸素方法

在這種方法中,我們將首先透過建立一個新矩陣並將行的元素按列儲存來獲取轉置矩陣。然後,我們將簡單地遍歷這兩個矩陣並進行比較。如果它們在任何索引處不匹配,則返回 false,否則返回 true。

示例

// function to find the transpose of the given matrix
function getTranspose(mat){   
 
   // getting the number of rows present in the given matrix. 
   var n = mat.length; 
   
   // getting the number of columns present in the given matrix. 
   var m = mat.length;   
   
   // creating a new array to store the transpose matrix 
   
   // new array will have m rows and n columns 
   var transP = new Array(m) 
   
   // traversing over the given matrix column-wise 
   for(var i = 0;i < m; i++){
      var cur = new Array(n);
      for(var j = 0; j<n; j++){
         cur[j] = mat[j][i];
      }
      transP[i] = cur;
   }
   
   // returing tranpose of the given matrix 
   return transP;
}

// function to check if the given matrix is symmetric or not
function check(mat){
   var n = mat.length;
   var m = mat[0].length;
   
   // matrix must be a square matrix 
   if(n != m){
      return false;
   }    
   
   // getting tranpose of the given matrix 
   var transP = getTranspose(mat);  
   
   // checking if both matrices are equal
   for(var i = 0; i<n ;i++){
      for(var j = 0; j<n ;j++){
         if(mat[i][j] != transP[i][j]){
            return false;
         }
      }
   }
   return true;
}

// defining the matrix 
var mat = [[1, 2, 3],
           [2, 3, 8],
           [3, 8, 0]]
console.log("The given matrix is: ")
console.log(mat);
if(check(mat)){
   console.log("The given matrix is a symmetric matrix")
}
else{
   console.log("The given matrix is not a symmetric matrix")
}

時間和空間複雜度

上述程式碼的時間複雜度為 O(N*N),其中 N 是給定矩陣的大小。

上述程式碼的空間複雜度為 O(N*N),因為我們使用額外的空間來儲存轉置矩陣元素。

有效方法

轉置矩陣可以透過交換行和列來獲得,這意味著每一列都等於相應的行。因此,在任何索引 (i,j) 處存在的值將等於在給定矩陣中的 (j,i) 處存在的值。

示例

// function to check if the given matrix is symmetric or not
function check(mat){
   var n = mat.length;
   var m = mat[0].length;  
   
   // matrix must be a square matrix 
   if(n != m){
      return false;
   }  
   
   // checking if mat[i][j] is equal to mat[j][i] or not
   for(var i = 0; i<n ;i++){
      for(var j = 0; j<i ;j++){
         if(mat[i][j] != mat[j][i]){
            return false;
         }
      }
   }
   return true;
}

// defining the matrix 
var mat = [[1, 2, 3],
           [2, 3, 8],
           [3, 9, 0]]
console.log("The given matrix is: ")
console.log(mat);
if(check(mat)){
   console.log("The given matrix is a symmetric matrix")
}
else{
   console.log("The given matrix is not a symmetric matrix")
}

時間和空間複雜度

上述程式碼的時間複雜度為 O(N*N),其中 N 是給定矩陣的大小。

上述程式碼的空間複雜度為 O(1),因為我們沒有使用任何額外空間。

結論

在上面的教程中,我們實現了一個 JavaScript 程式碼來查詢給定矩陣是否是對稱矩陣。對稱矩陣是矩陣的一種特殊情況,其中矩陣與其轉置矩陣相同,並且可以透過交換行和列來獲取矩陣的轉置。矩陣必須是方陣才能成為對稱矩陣。我們已經實現了兩種方法,時間複雜度為 O(N*N),空間複雜度分別為 O(N*N) 和 O(1)。

更新於: 2023年4月20日

423 次檢視

開啟您的 職業生涯

完成課程獲得認證

開始學習
廣告

© . All rights reserved.