我有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。
答案 0 :(得分:1)
这实质上是一个幂集枚举问题。假设元素1
位于两组中的第一组中。枚举元素2 .. N
的幂集。这可以通过循环来自1 .. 2^(N-1)
的二进制数来完成。将元素1
添加到结果集中作为对中的第一个集合。将结果集的补码作为另一组。如果与您的问题无关,请将空集丢弃为子集。