0

我有 N 个数据元素(比如 1:N),我想将它们分配到两个不同的组中。我不知道最佳分布是什么,所以我想测试每一个可能的配对,但忽略对称结果。

我需要一个具有这样结果的函数:

>> pairings(1:2)
{
  [1], [2]
}

>> pairings(1:3)
{
  [1], [2,3]
  [2], [1,3]
  [3], [1,2]
}

>> pairings(1:4)
{
  [1], [2,3,4]
  [2], [1,3,4]
  [3], [1,2,4]
  [4], [1,2,3]
  [1,2], [3,4]
  [1,3], [2,4]
  [1,4], [2,3]
}

当然,使用大量循环的算法很容易编写,但我想有一个解决方案确实更像 matlab。

4

1 回答 1

1

这本质上是一个幂集枚举问题。假设元素1在两个集合中的第一个。枚举元素的幂集2 .. N。这可以通过循环遍历来自 的二进制数来完成1 .. 2^(N-1)。将该元素1作为对中的第一个集合添加到结果集中。将结果集的补集作为您的另一个集。如果与您的问题无关,则将空集作为子集丢弃。

于 2012-11-10T05:45:11.020 回答