Time complexity 二项系数的时间复杂度评估
我是理论计算机科学的新手,我想计算以下算法的时间复杂度,该算法计算定义为 我的教科书建议使用斯特林近似 然而,考虑到I=2到n do nf=nf*I的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)来计
,我可以得到相同的结果代码>的复杂度为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