Matlab 将N个元素分配到两个容器中,每次分配

Matlab 将N个元素分配到两个容器中,每次分配,matlab,vectorization,Matlab,Vectorization,我有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],

我有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。

这本质上是一个幂集枚举问题。假设元素
1
位于两个集合的第一个集合中。枚举元素的幂集
2。。N
。这可以通过循环使用
1.中的二进制数来实现。。2^(N-1)
。将元素
1
添加到结果集中,作为对中的第一个集合。将结果集的补码作为另一个集。如果空集与您的问题无关,请将其作为子集丢弃。

您是否意识到,通常这是一个2^N的枚举,对吗?测试每一个都会使运行时间呈指数增长。N很小,所以这不会是一个问题。