again, my output is wrong, because it's missing one or two combinations. Therefore I want to correct this code and output the unique 6 combinations. I hope someone could help me to correct this code.
generate the binary sequence
13 views (last 30 days)
Show older comments
I have a code to generate the binary sequence that only contains m zeros and n ones. For example, m=n=2. then the number of combinations of the binary sequence is 6,nchoosek(4,2). My code was fine to output the 6 combinations, but mostly 2 combinations are the same. My question is how to avoid a combination of sequence show twice?
The code is following:
% clear all;
m = input('How many zeroes do you need \n');
n = input('how many ones do you need\n');
lnk=nchoosek(m+n,n);
i=n+m;
for kk=1:lnk
% m = input('How many zeroes do you need \n');
% n = input('how many ones do you need\n');
if i<=1
disp('size of binary sequence is out of range');
else
%Binary sequence contains m zeros and n ones in any order
x1=zeros(1,i);
x1(randperm(i,n))=1
%count down the number of switches in such a Binary sequence x1;
switches=0;
for k=1:length(x1)-1
if x1(k)==0 && x1(k+1)==1
switches= switches+1;
elseif x1(k)==1 && x1(k+1)==0
switches=switches+1;
end
end
Av(kk)=switches;
end
end
Also, my result shows like:
How many zeroes do you need
2
how many ones do you need
2
x1 =
0 0 1 1
x1 =
0 0 1 1
x1 =
0 1 1 0
x1 =
1 0 1 0
x1 =
1 1 0 0
x1 =
1 1 0 0
Av =
1 1 2 3 1 1
tot_combination =
6
Accepted Answer
Guillaume
on 27 Nov 2014
Edited: Guillaume
on 28 Nov 2014
Maybe I'm misunderstanding something but to me it looks like your code is wrong, it's missing for ex. 0 1 0 1 as an output.
m = 2; n = 2;
seqs = unique(perms([zeros(1, m) ones(1, n)]), 'rows')
There are indeed 6 combinations, but not the ones you return in your example.
5 Comments
Guillaume
on 28 Nov 2014
Edited: Guillaume
on 28 Nov 2014
There's nothing stopping you from iterating over the rows or transforming the rows into a cell array, or whatever data structure you wish.
Or you could just use diff to detect the transitions between columns (transition will show up as either -1 or 1) and sum these up:
m = 2; n = 2; %for example
seqs = unique(perms([zeros(1, m) ones(1, n)]), 'rows')
transitions = sum(abs(diff(seqs, [], 2)), 2)
More Answers (0)
See Also
Categories
Find more on Logical in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!