什么是算法的时间复杂度?

时间:2013-03-14 16:06:35

标签: algorithm time-complexity

这是一个算法教科书的问题,我认为时间复杂度是log(n!),但是我的同学说它是nlog(n)。非常感谢你回复!!

count ← 0
for i ← 1 to n do
    j ← ⌊n/2⌋
    while j ≥ 1 do
        count ← count + 1
        if j is odd then
           j←0
        else
           j ← j/2
        end if
    end while
 end for

2 个答案:

答案 0 :(得分:3)

  

我认为时间复杂度为log(n!),但我的同学说它是nlog(n)

你是对的。从Stirling's formula可以看出,

log n! = n * log n - n +O(log(n)),

log是这里的自然对数)更准确地说:

log n! = (n + 1/2) * log n - n + 1/2 * log (2π) + O(1/n)

因此O(log n!)O(n*log n)属于同一类。

答案 1 :(得分:1)

在最坏的情况下,n = 2 p

  • 循环1到n
  • 对于每个循环,将 j 除以2,直到它<1。 1

因此,n * log 2 (n)次迭代,或时间复杂度为O(n log(n))

-

(根据评论,日志库的复杂性不是必需的,因为 log 2 (x)实际上是 log(x)/ log(2) ) log(x)乘以常数