我正在寻找使用线性索引索引 M 选择 N 元组。前段时间我写了 M 选择 2 作为一些配对索引函数的代码:
function K=pairidx( i, j)
if(i>j)
swap(i,j);
K=j-(i+1) + (i)*(2*M-1)-i*(i-1)/2;
end
我现在需要的是将此推广到 M 选择 N。理想情况下,我将有一个可逆函数,我可以将索引 K 转换为某个元组(K_1,K_2,...,K_N)。到目前为止,我一直在做一种蛮力方法,对于 N=3,我编写了以下函数,但我希望这不是最好的方法。
function lookup=tripletable()
d=nchoosek(M,N);
idx=1;
lookup=zeros(d,3);
for i=1:M
for j=i+1:M
for k=j+1:M
lookup(idx,:)=[i,j,k];
idx=idx+1;
end
end
end