在我的书的行使要我计算循环下的运行时间:以下程序的运行时间是多少?
for (int i = 0; i < n; ++i)
++k;
这立刻让我想起了求和符号的。于是,我写下了适当的语法:
这是正确的吗?如果没有,为什么不 - 我如何正确计算它?
在我的书的行使要我计算循环下的运行时间:以下程序的运行时间是多少?
for (int i = 0; i < n; ++i)
++k;
这立刻让我想起了求和符号的。于是,我写下了适当的语法:
这是正确的吗?如果没有,为什么不 - 我如何正确计算它?
让我们看看循环内的操作:
++k;
不管是什么k
是,该操作将需要一定的时间。所以让我们用O(1)
替换它。
for (int i=0; i<n; ++i)
O(1)
我们可以看到,我们将在O(1)
块迭代n
倍。所以,那就是:
O(n) * O(1)
其中明确等于:
O(n)
在我所关注的书中,我们没有使用'O'语法。我们打破代表代码的方程式。所以在这种情况下,它就像我的问题中的总结符号。 – 2014-09-06 21:02:49
也许你的书正在寻找'\ sum_ {i = 1}^{n} 1'?但我只能帮助我知道的符号。如果你想阅读这个符号,[这里是维基百科链接](https://en.wikipedia.org/wiki/Big_O_notation)。 – 2014-09-06 21:04:23
您的代码正在求和'1 + 1 + 1 + ...''n'次。我的代码添加了'k + 1 + 1 ...' - 'k'不保证从'1'开始。 – 2014-09-06 21:07:11
这是正确的吗?
不是。
如果不是,为什么不 - 我怎样才能正确计算它?
k
由1
在每个迭代递增的,即当循环终止n
被添加到它。因此,k = k + 1
不等于k = k + k
。
运行代码的时间顺序n
因为循环运行n
倍,++k
在循环内恒定的时间内完成。
所有你在这里做计数。如果我理解你的练习陈述,那么它与测量时间有关。为此,您需要使用高精度时钟功能。 – Logicrat 2014-09-06 20:58:25