Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中通过子集数获取子集族的有效方法 我有n个元素集,并且我想考虑它的K元素子集的固定大小s的集合。 例如,如果n=3,k=1,s=2,我们有以下族: {{1}, {2}}, {{1}, {3}}, {{2}, {3}}_Python_Algorithm_Combinations_Combinatorics - Fatal编程技术网

Python中通过子集数获取子集族的有效方法 我有n个元素集,并且我想考虑它的K元素子集的固定大小s的集合。 例如,如果n=3,k=1,s=2,我们有以下族: {{1}, {2}}, {{1}, {3}}, {{2}, {3}}

Python中通过子集数获取子集族的有效方法 我有n个元素集,并且我想考虑它的K元素子集的固定大小s的集合。 例如,如果n=3,k=1,s=2,我们有以下族: {{1}, {2}}, {{1}, {3}}, {{2}, {3}},python,algorithm,combinations,combinatorics,Python,Algorithm,Combinations,Combinatorics,在我的问题n,k,s不是那么小,例如s=n=50,k=20 让我们假设所有这些族都是按字典顺序排列的(或者实际上是按任何明确的顺序排列的)。我想有一个有效的方法,通过它的数量来获得一个家庭 我曾想过使用itertools,但我担心它对这么大的数字不起作用。可能我需要自己实现一些东西,但我不清楚如何实现。我只有一个想法:枚举n元素集的所有k元素子集(有一个有效的算法通过I得到第I个元素)。然后使用相同的操作枚举comb(n,k)-元素集的所有s-元素子集。现在我们需要生成一个范围内的数字(0,co

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

让我们假设所有这些族都是按字典顺序排列的(或者实际上是按任何明确的顺序排列的)。我想有一个有效的方法,通过它的数量来获得一个家庭

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


然而,这种方法看起来有点复杂。也许有一个更简单的方法?

这可能更适合于。我想把它贴在这里,因为我实际上对实现更感兴趣。我所描述的解决方案看起来是可行的,但不是很像Python。一个族的元素是析取的吗?例如,n=4,k=2,s=2,family{{1,2},{2,3}有效吗?不,家族不是析取的,你的例子是有效的。你的问题在组合算法中被称为unrank(见这本书1stworks.com/ref/RuskeyCombGen.pdf)。然而,你的确切例子我并不清楚。你能给出一个更大的通用示例吗。