如何分析算法的复杂性?

时间:2013-06-03 14:27:01

标签: algorithm complexity-theory time-complexity

我得到了一些我目前坚持的例子。非常感谢您的建议以及如何做到这一点。这些例子的最佳和最差情况是什么?

  • 例1

example 1

  • 例2

example 2

  • 例3

example 3

2 个答案:

答案 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所说的一致 -

从书中取出:Time Efficiency

有用的规则:Iterative Algorithm Analysis