Algorithm 我们如何扩展(logn)!还有(logn!)!确定复杂性?

Algorithm 我们如何扩展(logn)!还有(logn!)!确定复杂性?,algorithm,Algorithm,我知道那个日志!给出了O(nlogn)的复杂度,但如何检验上述情况?第二个可以简化为(nlogn)!。请对此进行澄清。更新:不,您不能使用(N ln N)在第二个公式中。下面使用第一个案例解释原因 随着时间的推移,我们有了 ln(z!) = (z+1/2) ln z - z + O(1)... 请注意,这里保留了额外的z,原因很快就会显而易见。现在如果我们让x=logn (ln N)! = x! = exp(ln x!) ~ exp((x+1/2) ln x - x) = x^(x+1/2)

我知道那个日志!给出了O(nlogn)的复杂度,但如何检验上述情况?第二个可以简化为(nlogn)!。请对此进行澄清。

更新:不,您不能使用
(N ln N)在第二个公式中。下面使用第一个案例解释原因

随着时间的推移,我们有了

ln(z!) = (z+1/2) ln z - z + O(1)...
请注意,这里保留了额外的
z
,原因很快就会显而易见。现在如果我们让
x=logn

(ln N)! = x! = exp(ln x!)
~ exp((x+1/2) ln x - x) = x^(x+1/2) exp(-x)
= (ln N)^((ln N)+1/2) / N
我们保留的额外项原来是
N
的逆项,它肯定会对复杂性产生影响,因为我们不能简单地丢弃某些东西的exp。如果我们表示上面的近似值
g(N)
,并且
f(N)=(lnn),然后
limf(N)/g(N)=sqrt(2pi)
,所以
f=O(g)

对于
(ln N!),有点复杂,我用mathematica来检查极限,它表明扩展

ln(z!) ~ (z+1/2) ln z - z + ln(sqrt(2pi)) 
够了。我们什么时候可以停下来,我没有一般规则。一般来说,仅仅使用有限项是不可能的。但在这种情况下,我们可以


如果您只需要一个宽松的边界,对于第一个公式,您实际上可以扔掉
-z
项,因为
(z+1/2)lnz>(z+1/2)lnz-z
您可以估计
(log(n))的上下限使用标识
连同产品评估

对于上限:

对于下限:

您将获得:

因此,至少:

显然,(in)方程在某种程度上是“奇数”的,因为乘积的非整数指数边界

更新: 使用sterling近似给出的界限较低(通过
sqrt(log(n))/n
),应该很紧


您可以使用Gamma函数替换n!是否
(logn)!=(日志(n))?和
(logn!)!=(日志(n!))?用户2697032正在谈论
(logn!)
log(n!)
只是提醒一下,与我的情况相比,你的情况是一个松散的上限$$N^(ln(ln))=O(lnN^(lnN+1/2)/N)$$是的。PS:在你的评论中必须是Ω而不是O。