我想知道,让我们说我们有一个表格,例如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列)。
答案 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