大O复杂性

时间:2018-02-24 15:41:12

标签: python-3.x big-o

我试图理解Big O,并且认为单步执行一个简单的程序可能有所帮助。

def sum(n):
    k = 0
    j = 0
    while k < n:
        k = k + 1
    while j < n:
        j = j + 1
        k = k + j
    return k

k和j最初被分配值0,其计数为2个分配,第一个while循环执行n次分配n次,而第二次执行n次分配n次。所以表达式为2 + n + 2n。

因为上面的表达式(2和n)中的前两个项是常数,所以与第三项相比,它们将变得微不足道,当n增长时,n乘以n乘以2。所以代码的大O将是O(2n)。

我的逻辑和答案是否正确?提前致谢

1 个答案:

答案 0 :(得分:2)

你的答案是正确的,虽然我们没有说 O(2n),而是 O(n)

O(n)意味着算法的最坏情况时间复杂度最多线性增加,即最终受到某种形式函数的约束a * n其中 a 是常量。实际常数与big-O表示法无关。

为了更具技术性,我说最终因为我们正在谈论我们称之为算法的限制行为,你可以将其视为只为非常大的输入描述行为。

在您的算法中,随着n的增长,我们对分配k = 0j = 0的关注越来越少,它们变得可以忽略不计。

总之,big-O符号旨在描述运行时间增长的速度,而不是准确描述运行时间是什么。