我得到了一些我目前坚持的例子。非常感谢您的建议以及如何做到这一点。这些例子的最佳和最差情况是什么?
答案 0 :(得分:2)
我不会给你答案。但这是一个如何用评论来处理它的例子。
for(int i = 0; i < N; i++) //This line is executed N times
for(int j = i; j < N; j++) // This line is executed (N - i) times, for every N
doSomeWorkOn(i, j); //This can add complexity as well, but let's assume we're trying to figure out how many times this is called.
请注意,每次运行第一个循环时,我们在第二个循环中所做的工作量就会减少。这使事情变得复杂。如果我们的内循环读
for(int j = 0; ......)
然后答案很简单,它只是N * N.N次,我们需要做N量的工作。在这种情况下我们拥有的是
N +(N-1)+(N-2)....(NN)如果你那么谷歌数学系列你会发现这简化为(N(N + 1))/ 2。
编辑:
请注意,如果你按照我的方式反向进行,可能会更容易找到该系列,这意味着
0+1+2+...(N) = N + (N-1) + (N-2) ... (0) = (N(N+1))/2
第一种方法最常见。我有一个反向做的习惯,因为我已经记住了系列表,并且看到它与N相关对我来说更有意义,但从形成初学者的角度来看,你可能更容易从低端开始,如同这就是大多数帮助页面/教科书/教授将如何呈现它。然而,它是相同的。无论哪种方式对您来说最简单。
答案 1 :(得分:1)
对我来说看起来像算术类的作业,但是要分析迭代算法,你需要使用求和规则。 Anany Levitin的算法设计和分析介绍是一本很好的书。
与ChrisCM所说的一致 -
从书中取出:
有用的规则: