生成所有组合时的复杂性

时间:2015-06-29 16:04:06

标签: algorithm language-agnostic big-o time-complexity combinations

我从#34开始的采访问题;这可以通过为数组元素生成所有可能的组合来解决。通常是为了让我找到更好的东西。

无论如何我想添加"我肯定更喜欢另一种解决方案,因为这是O(X)" ..问题是:生成所有组合的O(X)复杂度是多少?给定的?

我知道有n! /(n-k)!k!组合(二项式系数),但如何从中得到大O符号?

4 个答案:

答案 0 :(得分:16)

首先,使用O(n! / (n-k)!k!) - 或任何其他函数f(n)作为O(f(n))没有任何问题,但我相信您正在寻找一种更简单的解决方案仍然保持相同的设置。

如果您愿意将子集k的大小视为常量,

表示k <= n-k:

n! / ((n-k)!k!) = ((n-k+1) (n-k+2) (n-k+3) ... n ) / k! 

但以上实际上是(n^k + O(n^(k-1))) / k!,位于O(n^k)

同样,如果n-k<k,则会获得O(n^(n-k))

这给了我们O(n^min{k,n-k})

答案 1 :(得分:3)

作为@amit的后续,min {k,n-k}的上限是n / 2.

因此,&#34; n的上限选择k&#34;复杂度为O(n ^(n / 2))

答案 2 :(得分:0)

情况1:如果n-k

假设n = 11,k = 8,n-k = 3,然后

 n!/(n-k)!k! = 11!/(3!8!)= 11x10x9/3!
 let suppose it is (11x11x11)/6 = O(11^3) and 11 was equal to n so O(n^3) and also n-k=3 so it become O(n^(n-k))

情况2:如果k

假设n = 11,k = 3,n-k = 8,然后

 n!/(n-k)!k! = 11!/(8!3!)= 11x10x9/3!
 let suppose it is (11x11x11)/6 = O(11^3) and 11 was equal to n so O(n^3) and also k=3 so it become O(n^(k))

哪个给我们O(n ^ min {k,n-k})

答案 3 :(得分:0)

我知道这是一个古老的问题,但是它在Google上排在第一位,并且恕我直言,它的标记错误地接受了答案。

C(n,k) = n Choose k = n! / ( (n-k)! * k!)

上面的函数表示可以由一组n元素构成的k元素的数量。纯粹从逻辑推理的角度来看,C(n, k)必须小于

∑ C(n,k) ∀ k ∊ (1..n)

,因为此表达式表示power-set。用英语,上面的表达式表示:add C(n,k) for all k from 1 to n。我们知道这有2 ^ n个元素。

因此,C(n, k)的上限为2 ^ n,对于任何n ^ k,该上限肯定小于n, k > 3, and k < n

因此,肯定要回答您的问题C(n, k)的上限为2 ^ n,但不知道是否有更严格的上限来更好地描述它。