首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大O复杂度

大O复杂度
EN

Stack Overflow用户
提问于 2018-02-24 15:41:11
回答 1查看 146关注 0票数 0

我试着理解“大O”,并认为通过一个简单的程序可能会有所帮助。

代码语言:javascript
复制
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次,第一次which循环执行1次赋值n次,第2次执行2次赋值n次。表达式为2+n+ 2n。

由于上述表达式(2和n)中的前两个项是常数,因此与第三个项相比,它们将变得无关紧要,后者是n随n的增长而乘以2的第三项。所以代码的大O是O(2n)。

我的逻辑和答案正确吗?提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-24 15:51:14

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

O(n)的意思是,最坏的情况下,你的算法的时间复杂度最多是线性增加的,也就是说,它最终受到形式a * n的某个函数的约束,其中a是某个常数。实际常量与大O表示法无关.

为了更专业一点,我最后说,因为我们说的是我们所说的算法的极限行为,你可以把它想象成只对非常大的输入描述这种行为。

例如,在您的算法中,随着n的增长,我们对分配k = 0j = 0的关注越来越少,它们变得微不足道。

总之,大O符号的目的是描述运行时间增长的速度,而不是精确地描述运行时是什么。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48964554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档