javascript - 在javascript中查找大小为2的集合中的所有分区

标签 javascript algorithm recursion set partition

我正在尝试编写一个执行以下操作的函数:

> partitions([a,b,c,d])

< [
  [[a,b],[c,d]],
  [[a,c],[b,d]],
  [[a,d],[b,c]]
  ]

即它找到所有大小为 2 的分区。

目前我正在尝试递归地执行此操作:在每次调用时生成一个对列表,并且对于生成的每个对,在删除该对的情况下再次调用列表上的方法。这可行,但会生成重复项。删除重复项需要比较生成的分区中的每个元素,这非常慢。

我想知道是否有更聪明的方法来做到这一点。

最佳答案

只需获取所有项目的组合并过滤掉所有不需要的,就像这样

function getTwoCombinations(array) {
    var i, j, result = [];
    for (i = 0; i < array.length; i += 1) {
        for (j = i + 1; j < array.length; j += 1) {
            result.push([array[i], array[j]]);
        }
    }
    return result;
}

var result = getTwoCombinations(getTwoCombinations(["a", "b", "c", "d"])).
    filter(function(items) {
        return items[0].every(function(item) {
            return !(items[1].indexOf(item) + 1);
        });
    });

console.log(result);

输出

[ [ [ 'a', 'b' ], [ 'c', 'd' ] ],
  [ [ 'a', 'c' ], [ 'b', 'd' ] ],
  [ [ 'a', 'd' ], [ 'b', 'c' ] ] ]

关于javascript - 在javascript中查找大小为2的集合中的所有分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24870917/

相关文章:

javascript - jQuery setTimeout() 回调不起作用

javascript - ui.router 不显示页面 [嵌套 View ]

javascript - 我可以链接到 dom 中的元素吗

javascript - Symfony2 将变量从 Controller 传递给 javascript

python - 2-opt 算法解决 Python 中的旅行商问题

recursion - Paul Graham 在他的 Bel 引用文献中如何解决 mac 的循环性?

algorithm - 用于主题建模的 Amazon Sagemaker 中的 LDA 和 NTM 有什么区别?

R:如何在计算中使用列中的第一个值,然后为以下行切换到此结果

c++ - 河内线性塔

python - 递归就差不多了。最后一件事