我试图理解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)。
我的逻辑和答案是否正确?提前致谢
答案 0 :(得分:2)
你的答案是正确的,虽然我们没有说 O(2n),而是 O(n)。
O(n)意味着算法的最坏情况时间复杂度最多线性增加,即最终受到某种形式函数的约束a * n
其中 a 是常量。实际常数与big-O表示法无关。
为了更具技术性,我说最终因为我们正在谈论我们称之为算法的限制行为,你可以将其视为只为非常大的输入描述行为。
在您的算法中,随着n
的增长,我们对分配k = 0
和j = 0
的关注越来越少,它们变得可以忽略不计。
总之,big-O符号旨在描述运行时间增长的速度,而不是准确描述运行时间是什么。