Algorithm 为什么时间复杂度为T(n)=2n^2+;n+;1.
T(n)=2n^2+n+1 我理解2n^2和1部分,但我对n感到困惑Algorithm 为什么时间复杂度为T(n)=2n^2+;n+;1.,algorithm,big-o,Algorithm,Big O,T(n)=2n^2+n+1 我理解2n^2和1部分,但我对n感到困惑 test = 0 for i in range(n): for j in range(n): test = test + i*j 这实际上取决于你的教授/书如何分解运营成本,但我认为我们可以从这里算出。让我们把2n^2+n+1分解。n^2来自两个循环 for i in range(n): for j in range(n): 2系数可能来自这两个操作。注:这只是恒定的时间复杂度,即O(1)
test = 0
for i in range(n):
for j in range(n):
test = test + i*j
这实际上取决于你的教授/书如何分解运营成本,但我认为我们可以从这里算出。让我们把
2n^2+n+1
分解。n^2
来自两个循环
for i in range(n):
for j in range(n):
2
系数可能来自这两个操作。注:这只是恒定的时间复杂度,即O(1)
范围(n)
的初始计算可能需要n
(即计算中的+n
)。然后可以优化对范围(n)
的第二次调用,以使用缓存的值
最后,可以是开头的
test=0
语句,也可以是+1
。这可能总共是2n^2+n+1
。然而,更糟糕的情况是时间复杂度仍然是O(n^2)
,即使公式是2n^2+n+1
(我认为不是),时间复杂度也只是n^2
。通常,除了最重要的一项,你会删除所有的项,并删除常数乘数。没有更多的上下文,这是无法回答的。如果这是教科书中给出的答案,那么可能是在计算回路控制的某些部分,但不清楚是什么。在这样一个假设的问题中,有几件事可能被计算在内,也可能不被计算在内:在i*j
中有n^2个+
的实例,在test+i*j
中有n^2个=
的实例,在test=.
中有n^2个=
的实例。n^2个递增j
实例,n^2个测试j
循环结束,n个递增i
实例,n个测试i
循环结束,以及1个赋值test=0
@paxdiablo实例:复杂度符号不一定用O表示。@Eric,这是正确的,但是,考虑到其中一个标签是big-o
,我认为这就是OP讨论的内容。当然,这可能是基于有限知识的错误标记。阅读我的第一条评论的人也应该考虑Eric的反应,然后重新阅读我的评论,就好像我说了“大O时间复杂性”:-)这是在教授的演讲幻灯片中给出的。我完全不懂n。所以如果我们要找T(n)来找到常数和n0,其实没什么大不了的,里面是2次运算还是3次运算,对吗?如果我们讨论的是big-O(更糟糕的情况下的时间复杂度),不仅常数不重要,而且几乎更小的阶数也不重要。如果你试图进行微观优化,或者你有真实世界或普通案例数据证明你在其他方面进展缓慢,那么它们可能很重要。这两个循环最终可能花费您最多,因此O(n^2)
。操作的数量仍然大致为2n^2+n+1
。我想指出的是range(n)
操作是问题的棘手部分,因为大多数其他语言都可以使用range执行for循环,而不必调用其他函数。
test = test + i * j