T(n)= log(n * n!)的渐近时间复杂度(大theta)是多少?

时间:2018-10-13 17:19:26

标签: big-o

我认为是O(n * log(n)),但不确定。

我尝试过log(n * n!)= log(n(n * n-1 * n-2 * ... * 1))= n log(n)+ log(n)+ log (n-1)+ ... + log(1)<= nlog(n)+ nlog(n)= 2n log(n)

有人可以解释这是否正确吗?

1 个答案:

答案 0 :(得分:0)

上限

log(n*n!) = log(n) + log(n!)
          = log(n) + log(n) + log(n-1) + ... + log(2)
         <= log(n) + (n-1)log(n)
          = n*log(n)

下界

log(n*n!) = log(n) + log(n) + log(n-1) + ... + log(2)
         >= log(n) + (n-1)/2*log(n/2)                     ; 1st half >= log(n/2), 2nd >= 0
         >= log(n/2) + (n-1)/2*log(n/2)
          = (n+1)/2*log(n/2)
         >= (n/2)log(n/2)

注意: 在这里,我假设log(2)>0,如果我们以2为底的对数,则为true。这是一个有效的假设,因为不同底数的对数之间的关系是线性的,并且线性关系由big-O保留。

直观地,我们看到这是O(n*log(n)),对吧?但是为什么是真的吗?

要了解原因,我们需要找到C > 0N0这样的

           (N0/2)log(N0/2) >= C*N0*log(N0)

减少为:

           log(N0/2)/log(N0) >= 2*C

           1 - log(2)/log(N0) >= 2*C

因此,选择C < 1/2,例如C = 1/4N0的值仅需验证:

           log(N0) >= 2*log(2) = log(4).

因此足以拍摄N0 = 4

请注意,对于两个常数CN0,我们有一个不等式。这就是为什么我们必须选择一个(足够好),然后推断另一个的原因。