如何从给定集合生成可能的不同对集合?

时间:2012-06-11 08:00:44

标签: matlab combinatorics

在matlab中我该怎么做? 我有一组n个元素

从这个集合中我创建了一组新的n / 2对,使得不同对中的元素是不同的。 如何从matlab中的n个元素生成不同的n / 2对集合?

e.g。 输入集 - {1,2,3,4}

可能的输出集 -

{{1,2},{3,4}}

{{1,3},{2,4}}

{{1,4},{2,3}}

1 个答案:

答案 0 :(得分:0)

我无法找到“每个减半矢量”要求的“不同元素”的干净解决方案。因此,我建议分别检查每个结果。我希望有一个更好的解决方案:这个只是它的工作。

x = [1 2 3 3];
xsize = size(x,2);

p = perms(x);
up = unique(p,'rows');

result = [];

for entry=up'
  left = entry(1:xsize/2);
  right = entry(xsize/2+1:xsize);
  if numel(unique(left)) == xsize/2 && numel(unique(right)) == xsize/2
    result = vertcat(result,entry')
  end
end

为了完整起见,结果是:

1   3   2   3
1   3   3   2
2   3   1   3
2   3   3   1
3   1   2   3
3   1   3   2
3   2   1   3
3   2   3   1

我不确定你是否需要实际拆分减半的矢量。在这种情况下,只需将leftright放入您喜欢的任何内容中即可。