繁体   English   中英

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

[英]what is the time complexity of the algorithm?

这是一个算法教科书的问题,我认为时间复杂度是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

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

你是对的。 斯特林的公式可以看出,

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)是同一个类。

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

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

所以, n * log 2 (n)迭代,或O(n log(n))时间复杂度

-

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM