線形インデックスを使用して、MがN個のタプルを選択してインデックスを作成しようとしています。少し前に、ペアのインデックス関数としてMChoose2のコードを作成しました。
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