building all such vectors?
1 次查看(过去 30 天)
显示 更早的评论
How to build all vector with A elements equal to 1, B elements equal to 2, and C elements equal to 3 ?
I'm looking for an algorithm or a function building all such vectors.
0 个评论
采纳的回答
Roger Stafford
2013-8-7
This is a problem in combinations, not permutations, and can be performed using matlab's 'nchoosek' function. Note that the number of possible combinations in your problem is
(A+B+C)!/A!/B!/C! = (A+B+C)!/A!/(B+C)! * (B+C)!/B!/C!
The code:
p1 = nchoosek(1:A+B+C,B+C); % Choose B+C indices out of 1:A+B+C
p2 = nchoosek(1:B+C,C); % Choose C indices out of 1:B+C
m = size(p1,1);
n = size(p2,1);
V = ones(m*n,A+B+C); % Start with all 1's
for ix = 1:m
V((1:n)+n*(ix-1),p1(ix,:)) = 2; % Reset B+C of them to 2's
for jx = 1:n
V(jx+n*(ix-1),p1(ix,p2(jx,:))) = 3; % Of these, reset C to 3's
end
end
2 个评论
Roger Stafford
2013-8-8
编辑:Jan
2013-8-8
I had forgotten that I previously answered an essentially equivalent question to this at the 'Answers' site:
I used a slightly different technique there which you might be interested in trying.
Jan
2013-8-8
@Roger: The similarity between the questions is impressive or surprising. I prefer the other implementation due to its simplicity.
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!