我书中的练习要求我计算以下for循环的运行时间:
for (int i = 0; i < n; ++i)
++k;
这立刻让我想起了总结符号。所以我写下了相应的语法:
这是对的吗?如果没有,为什么不 - 我怎样才能正确计算出来?
答案 0 :(得分:2)
这是对的吗?
没有。它不是。
在每次迭代中,如果没有,为什么不 - 我怎样才能正确计算?
k
递增1
,即当循环终止时n
被添加到它。因此,k = k + 1
不等于k = k + k
。
代码的运行时间为n
,因为循环运行n
次,++k
在循环内的常量时间内完成。
答案 1 :(得分:0)
让我们看一下循环中的操作:
++k;
无论k
是什么,该操作都需要一段时间。所以我们用O(1)
替换它。
for (int i=0; i<n; ++i)
O(1)
我们可以看到,我们将在O(1)
块n
次迭代。那就是:
O(n) * O(1)
这显然等于:
O(n)