Algorithm 一种有效的大小为k的子集枚举算法

Algorithm 一种有效的大小为k的子集枚举算法,algorithm,Algorithm,是否有一种方法可以枚举大小等于k的集合S(以数组形式给出)的子集,其方式是O(n^k)时间,其中n是集合中的元素数。我看到的带有回溯算法的枚举在O(2^n)时间内运行,我想知道这是否有改进。我看到的回溯算法通常是O(kn^k)只要他们有逻辑在您需要i更多元素而

是否有一种方法可以枚举大小等于
k
的集合
S
(以数组形式给出)的子集,其方式是
O(n^k)
时间,其中
n
是集合中的元素数。我看到的带有回溯算法的枚举在
O(2^n)
时间内运行,我想知道这是否有改进。

我看到的回溯算法通常是
O(kn^k)
只要他们有逻辑在您需要
i
更多元素而
元素更少时提前跳过。根据它们处理数组的方式,其中可能还有另一个因子
k
。您可以计算每个数字在数组中出现的次数,然后可以枚举子集,而无需检查重复项(如果操作正确)。Knuth分册第9页的算法R: