【问题标题】:Why time complexicity of this code is O(n) instead of O(log n)为什么这段代码的时间复杂度是 On) 而不是 O(log n)
【发布时间】:2021-07-31 17:22:13
【问题描述】:

以下代码的时间复杂度为 O(n log n) 我认为对于外循环日志 n 但对于内循环 n。 所以,O(n logn)

x = n 
while ( x > 0 ) { 
    y = n 
    while ( y > 0 ) { 
        y = y - 1 
    } 
    x = x / 2 
} 

但是下面代码的时间复杂度是O(n)

x = n 
while ( x > 0 ) { 
    y = x 
    while ( y > 0 ) { 
        y = y - 1 
    } 
    x = x / 2 
} 

为什么上面代码的时间复杂度是O(n)?

【问题讨论】:

  • 我对您添加的语言标签感到困惑。您的帖子看起来不像 python 代码。

标签: loops time-complexity big-o


【解决方案1】:

因为内循环的迭代次数减少了与x减少相同的比例。迭代的总数将始终约为2n - 1(当n 是2 的幂时,它与其他数字略有偏差)。 Big-O 会忽略总和的系数和低阶分量,因此是 O(n)。

例如,当n == 16时,外循环的第一次迭代执行内循环的16次迭代。第二次迭代执行 8 次,然后执行 4 次,以此类推。所以总数是16+8+4+2+1 == 31

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 2018-12-12
    • 2018-03-19
    • 1970-01-01
    • 2021-08-13
    • 2022-10-24
    • 2015-08-22
    • 2020-01-10
    相关资源
    最近更新 更多