MATLAB: How to generate a specific group of numbers from nchoosek

selecting group of numbers

Hi all, I've a problem in my code. I've the following indices: indices = nchoosek ([1:9], 3)
indices =
1 2 3
1 2 4
1 2 5
1 2 6
1 2 7
1 2 8
1 2 9
1 3 4
1 3 5
1 3 6
1 3 7
1 3 8
1 3 9
1 4 5
1 4 6
1 4 7
1 4 8
1 4 9
1 5 6
1 5 7
1 5 8
1 5 9
1 6 7
1 6 8
1 6 9
1 7 8
1 7 9
1 8 9
2 3 4
2 3 5
2 3 6
2 3 7
2 3 8
2 3 9
2 4 5
2 4 6
2 4 7
2 4 8
2 4 9
2 5 6
2 5 7
2 5 8
2 5 9
2 6 7
2 6 8
2 6 9
2 7 8
2 7 9
2 8 9
3 4 5
3 4 6
3 4 7
3 4 8
3 4 9
3 5 6
3 5 7
3 5 8
3 5 9
3 6 7
3 6 8
3 6 9
3 7 8
3 7 9
3 8 9
4 5 6
4 5 7
4 5 8
4 5 9
4 6 7
4 6 8
4 6 9
4 7 8
4 7 9
4 8 9
5 6 7
5 6 8
5 6 9
5 7 8
5 7 9
5 8 9
6 7 8
6 7 9
6 8 9
7 8 9
I would like to generate 3 different group of numbers in one time (where each row represent a group) so that all the three groups has unique (not repeated) numbers. i.e. If the 1st generated group was : 1 2 3 then the 2nd group must be any three numbers from 1 to 9 except 1 2 3 (let's say 2nd generated group was: 4 5 6) then the 3rd generated group must be any number from 1 to 9 except all previously selected numbers (any 3 numbers except 1,2,3,4,5,6) hence we have 3rd group is: 7 8 9 I need to do this for all different cases (and not for only the above case) any help how?
Thanks,

Best Answer

If I have interpreted your request correctly, you can do what you ask with two calls on 'nchoosek', one to choose three numbers out of nine and the other to choose three numbers out of six, (plus some additional processing of course.) What I have understood is that you want to generate all possible ways of dividing up the numbers from 1 to 9 into three groups with three numbers in each group. The total number of these is 9!/3!/3!/3! = 1680.
C1 = nchoosek(1:9,3);
C1 = [C1,zeros(size(C1,1),6)];
x = 1:9;
for p = 1:size(C1,1)
t = true(1,9); t(C1(p,1:3)) = false(1,3);
C1(p,4:9) = x(t);
end
C2 = nchoosek(1:6,3);
C2 = [C2,zeros(size(C2,1),3)];
x = 1:6;
for q = 1:size(C2,1)
t = true(1,6); t(C2(q,1:3)) = false(1,3);
C2(q,4:6) = x(t);
end
A = zeros(size(C1,1)*size(C2,1),9);
k = 0;
for p = 1:size(C1,1)
x = C1(p,1:3);
y = C1(p,4:9);
for q = 1:size(C2,1)
k = k + 1;
A(k,:) = [x,y(C2(q,:))];
end
end
The matrix A which has nine columns will contain your desired three groups: A(:,1:3), A(:,4:6), and A(:,7:9).