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 件のコメント

Guillaume
Guillaume 2014 年 11 月 30 日
It's not clear what the inputs are. You want to generate all the possible combinations of what?
Bear
Bear 2014 年 11 月 30 日
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 2014 年 11 月 30 日
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???

サインインしてコメントする。

 採用された回答

Guillaume
Guillaume 2014 年 11 月 30 日

0 投票

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.

その他の回答 (1 件)

Star Strider
Star Strider 2014 年 11 月 30 日

0 投票

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

4 件のコメント

Bear
Bear 2014 年 11 月 30 日
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 2014 年 11 月 30 日
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 2014 年 11 月 30 日
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 2014 年 11 月 30 日
編集済み: Star Strider 2014 年 11 月 30 日
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.

サインインしてコメントする。

カテゴリ

ヘルプ センター および File ExchangeGraph and Network Algorithms についてさらに検索

質問済み:

2014 年 11 月 30 日

編集済み:

2014 年 11 月 30 日

Community Treasure Hunt

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

Start Hunting!

Translated by