【问题标题】:How to print all combinations of M x N binary matrix in JavaScript如何在 JavaScript 中打印 M x N 二进制矩阵的所有组合
【发布时间】:2016-06-28 01:41:09
【问题描述】:

我正在研究一个函数,该函数采用矩阵的维度并在给定这些维度的情况下遍历所有可能的二进制矩阵。我正在递归地执行它,并计划稍后使用 DP 实现它以获得更好的性能。这是我的尝试,它不起作用。警告fill 函数是我相信的 ES6 函数。 JSFiddle here.

var printAllBinMatsAux = function(m, n, r, c, mat) {
    console.log(mat);
    if (r >= m) return;
    if (c === n - 1) {
        return printAllBinMatsAux(m, n, r + 1, 0, mat.slice());
    }

    printAllBinMatsAux(m, n, r, c + 1, mat.slice());
    mat[r][c] = 1;
    printAllBinMatsAux(m, n, r, c + 1, mat.slice());
}

var printAllBinMats = function(m, n) {
    var mat = [];
    for (var i = 0; i < m; i++) {
        var row = new Array(n).fill(0);
        mat.push(row);
    }
    printAllBinMatsAux(m, n, 0, 0, mat);
}

printAllBinMats(3, 4);

【问题讨论】:

    标签: javascript matrix binary


    【解决方案1】:

    如果您的尺寸不会太大,那么我将“二进制计数”一个长度为 m*n 的一维数组。然后,您可以将其拆分为行。不确定性能,但对我来说它的 3x4 速度非常快。代码笔here

    function matrices(m, n) {
      var mn = m*n,
          loopTo = Math.pow(2, mn);
    
      for (var i = 0; i < loopTo; i++) {
        var matrix = [];
        for (var j = 0; j < mn; j++) {
          matrix.push((i & (1 << j)) ? 1 : 0);
        }
        print(matrix, m, n);
      }
    }
    
    function print(matrix, m, n) {
      var output = '';
      // Split the single array into m rows
      for (var i = 0; i < m; i++) {
        output += matrix.slice(i * n, (i+1) * n).join(' ') + '\n';
      }
      out.innerText += output + '\n';
    }
    

    【讨论】:

    • Codepen 不喜欢 5 x 4 但本地节点似乎对 10 x 10 很满意。
    猜你喜欢
    • 2016-04-23
    • 1970-01-01
    • 2013-03-20
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    相关资源
    最近更新 更多