Matlab排列表

时间:2014-04-13 18:29:53

标签: matlab math permutation

我想知道,让我们说我们有一个表格,例如4列,所有可能的数字组合介于0到2之间。所以它会是

     0     0     0     0
     0     0     0     1
     0     0     0     2
     0     0     1     0
     0     0     1     1
     0     0     1     2
     0     0     2     0
     0     0     2     1
     0     0     2     2
     0     1     0     0
     0     1     0     1

等包含3 ^ 4行。

有没有办法让我在第56行中找到组合,而不必构建整个表,因为不可能为更大的数字创建这样的表(例如,使用>的值从0到100; 1000列)。

3 个答案:

答案 0 :(得分:2)

n最右边的列只是mod(n, 3) 如果您随后将n替换为floor(n./3),则可以以相同的方式检索最右边的。{ 冲洗并重复以构建整行...

答案 1 :(得分:2)

每个组合是数字的base-3扩展,从0开始到3 ^ 4-1结束。因此,您可以使用dec2base将该数字转换为其扩展名:

N = 3; %// number of digits
M = 4; %// number of columns
n = 56; %// row number: 1, 2, ..., N^M

result = dec2base(n-1,N)-'0';

答案 2 :(得分:1)

这 -

%%// Given data
rownum = 56; %%// Row number to be found out
arr1=[0 1 2]; %%// Numbers used for perms
Nc = 4; %%// Number of columns

N = numel(arr1);%%// Number of array elements for perms

%%// Combination needed
comb1 = arr1(fliplr(ceil(bsxfun(@mod,rownum,power(N,1:Nc))./power(N,0:Nc-1))))

输出 -

comb1 =

     2     0     0     1