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
8 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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
Réponse acceptée
Guillaume
le 27 Nov 2014
Modifié(e) : Guillaume
le 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 commentaires
Guillaume
le 28 Nov 2014
Modifié(e) : Guillaume
le 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)
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Logical dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!