Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 为什么时间复杂度为T(n)=2n^2+;n+;1._Algorithm_Big O - Fatal编程技术网

Algorithm 为什么时间复杂度为T(n)=2n^2+;n+;1.

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)

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)

范围(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