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的不同组合的总数将是由排列组合得来的。
让我们来看一下具体的方法:
- 首先,我们将获取一个包含0和1的数组,即给定的二进制矩阵。
-
我们将创建一个函数,用于自动计算传递给它作为参数的任何矩阵的所需答案,并将答案作为返回值返回。
-
在函数中,我们将遍历两次数组或二进制矩阵,一次用于行,第二次用于列。
-
在for循环中,我们将维护两个变量,一个用于存储1的数量,另一个用于存储0的数量。
-
在遍历完单行或单列之后,我们将使用上述公式更新答案,并将答案存储在我们的变量中。
-
最后,我们将通过从答案中减去行数*列数来返回答案,因为我们已经加上了它们两次。
我们去掉了行*列,因为当我们从上到下遍历行时,将单值的集合加入了其中,而当我们从左到右遍历列时,又加入了一次。
示例
让我们看一下上述步骤的具体实现,以更好地理解这些概念。
// 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)。
结论
在本教程中,我们学习了如何编写一个用于统计给定二进制矩阵中1和0集合数量的JavaScript程序。二进制矩阵是一个只包含两个数字1和0的矩阵。所讨论代码的时间复杂度为O(N*N),空间复杂度为O(1)。