JavaScript 二進位制矩陣中 1 和 0 集合計數程式


二進位制矩陣顧名思義,只包含兩個數字的矩陣,這兩個數字是 1 和 0。在本文中,我們將逐步瞭解程式碼及其方法和適當的解釋,以便更好地理解這些概念。在本教程中,我們將編寫一個 JavaScript 程式,用於計算給定二進位制矩陣中 1 和 0 的集合。

問題簡介

在這個問題中,我們給定一個二進位制矩陣,我們必須找到包含行或列中相同值的集合。一個集合可以是單個值,也可以是任意大小,但條件是它必須包含來自行或列的相同元素。例如,

我們給定一個具有兩行三列的二進位制矩陣,如下所示:

1 0 1
0 0 1

1 和 0 的集合數可以計算如下

  • 大小為 1 的集合 - 矩陣的所有單元格本身都是不同的集合,共有 6 個單元格。

  • 大小為 2 的集合 - 第二行的前兩列具有相同的值,第二列和第三列具有相同的值,總共有 2 個大小為 2 且值相同的集合。第一行有兩個 1,也可以被視為一個集合

  • 大小為 3 的集合 - 矩陣中可能的最大集合大小是行和列的最大大小,這裡為 3。但是,對於大小,沒有可用的集合包含相同的值。

因此,對於大小分別為 1、2 和 3 的集合,我們總共有 6、3 和 0 個集合。因此,最終我們的答案將是 9。

方法

在上一節中,我們已經看到,我們只需要關注特定的行或列,即可獲得其中相似元素的數量。此外,我們將使用數學概念來計算特定行或列中不同大小的集合的數量。

例如,如果一行中 1 的總數為 x,則大小從 1 到 x 的不同 1 集合的總數將來自排列和組合。

讓我們來看一下方法:

  • 首先,我們將獲得一個數組,該陣列將包含零和一,即給定的二進位制矩陣。

  • 我們將建立一個函式,自動計算傳遞給它作為引數的任何矩陣所需的答案,並將答案作為返回值返回。

  • 在函式中,我們將遍歷陣列或二進位制矩陣兩次,一次用於行,第二次用於列。

  • 在 for 迴圈中,我們將維護兩個變數,一個用於儲存 1,另一個用於儲存 0 的計數。

  • 遍歷單個行或列後,我們將使用上面看到的公式更新答案,並將答案儲存在我們擁有的變數中。

  • 最後,我們將透過從中減去 rows*columns 來返回答案,因為我們已經將它們添加了兩次。

我們刪除了 rows * columns,因為當我們新增具有零和一的單個值的集合時,一次是在遍歷行時,另一次是在遍歷列時。

示例

讓我們看看上面給定步驟的實現,以便更好地理解這些概念:

// given variables
var cols = 3; // no of columns
var rows = 2; // no of rows
// function to solve the problem with passed array 
function fun(arr) {
   // variable to store the final answer 
   var ans = 0;
   // traversing over the rows using for loop 
   for (var i = 0; i < rows; i++) {
      var ones = 0, zeroes = 0;
      for ( var j = 0; j < cols; j++) {
         if (arr[i][j] == 1)
         ones++;
         else
         zeroes++;
      }
      // increasing the answer on the basis of current count based on ones 
      ans = ans + Math.pow(2, ones)-1;
      // based on zeros 
      ans = ans + Math.pow(2, zeroes)-1;
   }
   //traversing over the columns using for loop 
   for (var i = 0; i < cols; i++) {
      var ones = 0, zeroes = 0;
      for ( var j = 0; j < rows; j++) {
         if (arr[j][i] == 1)
         ones++;
         else
         zeroes++;
      }
      //increasing the answer on the basis of current count based on ones 
      ans = ans + Math.pow(2, ones)-1;
      // based on zeros 
      ans = ans + Math.pow(2, zeroes)-1;
   }
   return ans - (rows * cols);
}
var arr = [ [ 1, 0, 1 ], [ 0, 1, 0 ] ];
console.log("Total number of the sets in the given binary matrix is: " + fun(arr));

時間和空間複雜度

上面程式碼的時間複雜度為 O(N*N),其中 N 是給定矩陣中行數和列數的最大值。

沒有使用額外的空間,因此程式碼的空間複雜度為 O(1)。

結論

在本教程中,我們學習瞭如何編寫一個 JavaScript 程式,用於計算給定二進位制矩陣中 1 和 0 的集合。二進位制矩陣顧名思義,只包含兩個數字的矩陣,這兩個數字是 1 和 0。所討論程式碼的時間複雜度為 O(N*N),空間複雜度為 O(1)。

更新於:2023-03-24

271 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.