how to create an array of all permutations

3 ビュー (過去 30 日間)
antifreund
antifreund 2020 年 7 月 2 日
コメント済み: James Tursa 2020 年 7 月 3 日
Hi there,
I have a question about how to create the following array in a simple, concise way (for any permutations).
Think of a 4 digit lock, but numbers allowed are not 0-9, but 1-6 or 0-17 (or any other range).
For 0-9 there are 10^4 permutations, which should be a 10000 x 4 array, each row showing one of the permutations.
I thought of building the array from 4 vectors (thousand, hundred, tens, ones), but that is also cumbersome when looking at a 7digit lock with 11 possible numbers for each digit.
example:
4 digits, possible numbers for each digit 1 - 6 (1296 permutations)
unity_ones = [1;6];
which means that the ones vector can be created by:
n = 1296/6;
ones_vector = [];
for i=1:n
ones_vector = [ones_vector,ones];
end
Then one can do the same for the tens_vector, hundreds_vector and thousands_vector... This seems not very efficient. I am sure there is an easier, one or two liner out there.... :-)

採用された回答

James Tursa
James Tursa 2020 年 7 月 2 日
If you want all of them in an array (which might be too large if the number of digits is too large), you can use
n = number of digits
b = range of the digits (0 to b)
result = dec2base(0:(b+1)^n-1,b+1);
This will give you a character array since the digits might be bigger than 9.
If b is 9 or less, you can turn this into numeric with
result = dec2base(0:(b+1)^n-1,b+1) - '0';
Otherwise, you would need code to convert the letters 'A' - whatever into numbers.
  3 件のコメント
antifreund
antifreund 2020 年 7 月 2 日
Yes, I know it is str2num to convert a string into a number, but ideally each row needs to be mae into 4 columns with one digit in each, then converting into a number ( or if it is a letter for a range being beyond 0-9, first replacing and then converting to a number...)
James Tursa
James Tursa 2020 年 7 月 3 日
I already posted that. You simply do the - '0' operation at the end.

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

その他の回答 (1 件)

madhan ravi
madhan ravi 2020 年 7 月 2 日
  1 件のコメント
antifreund
antifreund 2020 年 7 月 2 日
this seems to generate only one permutation without repeats... But for a 4 digit lock with permissible numbers 1-6 one would have 1296 permutation from:
0 0 0 0
to
6 6 6 6
The question is how to populate that array with 1296 unique rows?

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

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

製品


リリース

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by