我相信您的问题是组合或子集的排序问题。
我将通过 Combinatorica
包为您提供Mathematica的实现,但是除非您熟悉语义,否则上面的Google链接可能是一个更好的起点。
UnrankKSubset::usage = "UnrankKSubset[m, k, l] gives the mth k-subset of set l, listed in lexicographic order."UnrankKSubset[m_Integer, 1, s_List] := {s[[m + 1]]}UnrankKSubset[0, k_Integer, s_List] := Take[s, k]UnrankKSubset[m_Integer, k_Integer, s_List] := Block[{i = 1, n = Length[s], x1, u, $RecursionLimit = Infinity}, u = Binomial[n, k]; While[Binomial[i, k] < u - m, i++]; x1 = n - (i - 1); Prepend[UnrankKSubset[m - u + Binomial[i, k], k-1, Drop[s, x1]], s[[x1]]] ]用法就像:
UnrankKSubset[5, 3, {0, 1, 2, 3, 4}]**{0,3,4}**产生集合{0、1、2、3、4}的第6个(从0开始索引)长度3组合。



