Hey all, I want to thanks the people who helped me on the binary sequences. Now, I am in a difficult position to figure out a k-ary sequence. A k-ary sequence is one in which every element is an integer from 0,1,...,k-1. For example,{2,2,0,1,1,3,3,3,2,3} is a 4-ary sequence. The elements in 4-ary sequence are randomly spotted. Therefore, I want to print out all the possible combinations. I am new to the matlab, could anyone help me to figure out how to code this?

3 comentarios

Guillaume
Guillaume el 30 de Nov. de 2014
It's not clear what the inputs are. You want to generate all the possible combinations of what?
Bear
Bear el 30 de Nov. de 2014
I want to input k value, and generate all the possible combinations of k-ary sequence. Such as the 4-ary sequence above there, there are total 1 zero, 2 ones, 3 twos and 4 threes. But their spots in the sequence will be randomly. I want to print out the all the unique combinations of 4-ary sequence.
Image Analyst
Image Analyst el 30 de Nov. de 2014
Do you want to save a combination that does not appear, but that could appear, for example (using 0,1,2,3) you might have a combination of (1,2,3) but you don't have that in the data, or you might have a combination of (3,2,1,1,2,3,3,2) but you don't.
If you're allowing sequences that don't actually occur in the data, how long can these sequences be? Any length from 1 up to the length of the array, or even longer???

Iniciar sesión para comentar.

 Respuesta aceptada

Guillaume
Guillaume el 30 de Nov. de 2014

0 votos

For reasonably short sequences, use unique and perms (same as for binary sequences):
kseq = [2,2,0,1,1,3,3,3,2,3];
allp = unique(perms(kseq), 'rows')
For long sequences, perms becomes inefficient/unusable. This thread got the code for a more efficient uniqueperms by John D'Errico.

Más respuestas (1)

Star Strider
Star Strider el 30 de Nov. de 2014

0 votos

This seems to do what you want:
k = 4;
s = perms([0:k-1]);

4 comentarios

Bear
Bear el 30 de Nov. de 2014
hey, I do not think this is correct. {2,2,0,1,1,3,3,3,2,3} is a 4-ary sequence. and k=4 at this time, the total number of elements in this sequence is equal to (k*(k+1))/2, which is 10, your output is 4 elements total.
Star Strider
Star Strider el 30 de Nov. de 2014
Does this do what you want?
len = fix(k*(k+1)/2);
cmbs = nchoosek(len,k);
for k1 = 1:cmbs
seq(k1,:) = randi([0 k-1], 1, len);
end
sequ = unique(seq,'rows');
Bear
Bear el 30 de Nov. de 2014
I think you are close to right, but as the 4-ary sequence above there, there are total 1 zero, 2 ones, 3 twos and 4 threes. But their spots in the sequence will be randomly. I want to print out the all the unique combinations of 4-ary sequence.
Star Strider
Star Strider el 30 de Nov. de 2014
Editada: Star Strider el 30 de Nov. de 2014
There may be as many as 4^10 = 1048576 such unique sequences, so get another several reams of paper and a dozen or more ink or toner cartridges first.
I limited my results to 210 to demonstrate that there were no repeats in that number of sequences.

Iniciar sesión para comentar.

Categorías

Más información sobre Graph and Network Algorithms en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 30 de Nov. de 2014

Editada:

el 30 de Nov. de 2014

Community Treasure Hunt

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

Start Hunting!

Translated by