我有一个n元素集,我想考虑其固定大小为s的k元素子集的族 . 例如,如果n = 3,k = 1,s = 2,我们有以下系列:

{{1}, {2}}, {{1}, {3}}, {{2}, {3}}

在我的问题中,k,s不是那么小,例如s = n = 50,k = 20 .

让我们说所有这些家庭都按字典顺序排列(或者按照任何明确规定的顺序排列) . 我希望有一种有效的方式来获得一个家庭的数量 .

我想过使用itertools,但我担心它不适合这么大的数字 . 可能我需要自己实现一些东西,但我对如何做到这一点并不清楚 . 我只有以下想法:枚举n元素集的所有k元素子集(有一种有效的算法来获得i的第i个元素) . 然后使用相同的操作枚举comb(n,k)元素集的所有s元素子集 . 现在我们需要生成范围内的数字(0,梳(comb(n,k),s))并首先将其转换为s元素子集的数量,然后转换为k元素集的族 .

但是,这种方法看起来有点复杂 . 也许有一个更容易的?