我从#34开始的采访问题;这可以通过为数组元素生成所有可能的组合来解决。通常是为了让我找到更好的东西。
无论如何我想添加"我肯定更喜欢另一种解决方案,因为这是O(X)" ..问题是:生成所有组合的O(X)复杂度是多少?给定的?
我知道有n! /(n-k)!k!组合(二项式系数),但如何从中得到大O符号?
答案 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,然后 情况2:如果k 假设n = 11,k = 3,n-k = 8,然后 哪个给我们O(n ^ min {k,n-k}) 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))
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))
答案 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
,但不知道是否有更严格的上限来更好地描述它。