Time complexity 二项系数的时间复杂度评估

Time complexity 二项系数的时间复杂度评估,time-complexity,complexity-theory,Time Complexity,Complexity Theory,我是理论计算机科学的新手,我想计算以下算法的时间复杂度,该算法计算定义为 我的教科书建议使用斯特林近似 然而,考虑到I=2到n do nf=nf*I的,我可以得到相同的结果的复杂度为O(n-2)=O(n),这是主要的 斯特林近似似乎有点过分了。我的方法错了吗?在第一种方法中,您计算n!,K和(n-k)!然后分别计算二项式系数。因此,因为所有这些项都可以用最多的运算来计算,所以时间复杂度为O(n) 然而,关于计算斯特林公式的时间复杂性,你是错的。您只需要在base 2操作中使用log(n)来计

我是理论计算机科学的新手,我想计算以下算法的时间复杂度,该算法计算定义为

我的教科书建议使用斯特林近似

然而,考虑到I=2到n do nf=nf*I的
,我可以得到相同的结果的复杂度为O(n-2)=O(n),这是主要的


斯特林近似似乎有点过分了。我的方法错了吗?

在第一种方法中,您计算n!,K和(n-k)!然后分别计算二项式系数。因此,因为所有这些项都可以用最多的运算来计算,所以时间复杂度为O(n)

然而,关于计算斯特林公式的时间复杂性,你是错的。您只需要在base 2操作中使用log(n)来计算它。这是因为当你试图计算某个实数的p次方时,你不需要将它乘以p次,你可以继续平方来快速计算它。例如:

如果要计算2^17,请不要像这样进行17次运算:

return 2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2
您可以这样做:

a = 2*2
b = a*a
c = b*b
d = c*c
return d * 2
这仅仅是5次操作

注意:但是请记住,斯特林公式并不等于阶乘。这只是一个近似值,但很好

<>编辑:也可以考虑一个^ n为e^(log(a)*n),然后用快速收敛级数扩展< /p>计算它。 1+(对数(a)n)+(对数(a)n)^2)/2!+((日志(a)n)^3)/3!+

因为级数收敛得很快,你可以很快得到非常接近的近似值

a = 2*2
b = a*a
c = b*b
d = c*c
return d * 2