S = {1,2,3,4,5,6,7}
我想拿出这需要S作为输入,并给了我所有可能的阵列功能:
[ 1 ~ 2 ; 1 ~ 3 ; 1 ~ 4 ; 1 ~ 5 ; . . . ; 6 ~ 7 ]
[ 1 2 ~ 3 ; 1 2 ~ 4 ; ...; 2 3 ~ 1 ; 2 3 ~ 4....; 5 6 ~ 7]
.
.
.
[ 2 3 4 5 6 7 ~ 1 ; 1 3 4 5 6 7 ~ 2 ; ... ; 1 2 3 4 5 6 ~ 7 ]
这里注意'〜'有点像在k组合的元素之间放置的分隔符,这样在分隔符之前出现的集合在每个数组中都是唯一的。
例如,我们希望两个7组合
[ 2 3 4 5 6 7 ~ 1 ] and [ 1 2 3 4 5 6 ~ 7 ].
但我们只想要一个
[ 1 2 3 4 5 6 ~ 7 ] and [ 1 3 4 5 6 2 ~ 7 ].
我的代码:
clear all
for k = 1:7
Set = nchoosek(1:7,k);
for i = 1:length(Set)
A = setdiff(1:7,Set(i,:));
P = nchoosek(A , 2); % trialing it for only A~B where B has only 2elements
L = length(P);
S = repmat(Set (i,:) , L,1);
for j = 1:L
S1(j,:) = setdiff(S(j,:) , P(j,:));
W(j,:) = [ S1(j,:) , 0 , P(j,:) ];
end
W1(i,k) = {W};
end
end
然而,这将k产生一个错误= 2。 任何想法,使这项工作和高效。
此外,可能推广这一切的所有可能的s(1
enigmae你的问题有点混乱。首先你要求*全部* - 但是你只需要“在分隔符之前的集合”是唯一的。最后,举个例子,分隔符后面的数字*是唯一的。 – bdecaf
如果令人困惑,我很抱歉。看看这是否更清楚。我希望所有可能的数组规定了我用例子解释的条件。 分隔符后的数字是自动唯一的,如果您将分隔符之前出现的组设置为唯一的。 – enigmae