Borrar filtros
Borrar filtros

generate the binary sequence

8 visualizaciones (últimos 30 días)
Bear
Bear el 27 de Nov. de 2014
Comentada: Bear el 28 de Nov. de 2014
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
  1 comentario
Bear
Bear el 28 de Nov. de 2014
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.

Iniciar sesión para comentar.

Respuesta aceptada

Guillaume
Guillaume el 27 de Nov. de 2014
Editada: Guillaume el 28 de Nov. de 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.
The simplest way to obtain all unique permutations of a sequence is:
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 comentarios
Guillaume
Guillaume el 28 de Nov. de 2014
Editada: Guillaume el 28 de Nov. de 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)
Bear
Bear el 28 de Nov. de 2014
I see what you mean now, thanks for your great help again.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Logical en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by