我正在学习算法复杂度分析。我遇到了与不一致或C(n, k)
有关的问题。
int C(int n, int k){
if(n==k || k==0)
return 1;
return C(n-1, k) + C(n-1, k-1);
}
我如何确定它的执行复杂度或 T(n)
?
我正在学习算法复杂度分析。我遇到了与不一致或C(n, k)
有关的问题。
int C(int n, int k){
if(n==k || k==0)
return 1;
return C(n-1, k) + C(n-1, k-1);
}
我如何确定它的执行复杂度或 T(n)
?
显然,每一步n都会减少1。如果我们暂时忽略参数k,基本上每一步调用次数会翻倍。这种情况会发生n次,直到n=1。现在C(1,k)返回1。因此,最多调用C(n,k) 2n次。因此,C(n,k)是O(2n)。T(n,k) = T(n-1,k) + T(n-1,k-1) + O(1) 其中 T(n,n) = T(n,0) = O(1)
算法C(n,k)通过添加1来计算二项式系数。通过使用Stirling's approximation近似值,你可以看到C(n,n/2) ≈ 2n/sqrt(n)(为简化省略了一些常量)。因此,该算法必须添加那么多1,因此它的复杂度为O(2n/sqrt(n))。
if(n==k || k==0)
?少了一个0
。 - AbcAeffchen