算法的时间复杂度:如何在计算时间后确定哪种算法

时间:2012-05-11 07:02:15

标签: java algorithm time-complexity

今天我遇到了msdn中的博客,我注意到如何计算算法的时间复杂度。我完全理解如何计算算法的时间复杂度,但最后作者提到了以下几行

  

添加所有内容我

     

(N + 4)+(5N + 2)+(4N + 2)= 10N + 8

     

因此上述代码的渐近时间复杂度为O(N),其中   表示上述算法是线性时间复杂度算法。

那么作者怎么说它是基于班轮时间复杂度算法的。博客的链接

http://blogs.msdn.com/b/nmallick/archive/2010/03/30/how-to-calculate-time-complexity-for-a-given-algorithm.aspx

5 个答案:

答案 0 :(得分:7)

他说因为10N + 8是线性方程。如果绘制该等式,则得到一条直线。尝试在此网站(function graphs)上输入10 * x + 8并亲自查看。

答案 1 :(得分:0)

作者只是根据他选择最合适的经验。你应该知道,计数算法的复杂性几乎总是意味着找到一个 Big-Oh 函数,而这个函数只是给定函数的上界在你的情况下10N + 8

只有一些众所周知的复杂类型:线性复杂性,二次复杂性,etc。因此,计算时间复杂度的最后一步包括选择不太复杂的类型(我的意思是,线性二次更复杂,而二次型不那么复杂,指数等等,可以用于给定函数,正确描述其复杂性。

在你的情况下,O(n)和O(n ^ 2)甚至O(2 ^ n)确实是正确的答案。但是在[{3}}中完全适合的不那么复杂的函数是 O(n),这是一个答案。

以下是Big-Oh notation definition,完全解释了 Big-Oh符号

答案 2 :(得分:0)

时间复杂性的升序(常见的)

O(1) - Constant
O(log n) - logarithmic
O(n) - linear
O(n log n) - loglinear
O(n^2) - quadratic

注意:N增加无界限

答案 3 :(得分:0)

对于复杂性理论,你绝对应该阅读一些背景理论。它通常是渐近的复杂性,这就是为什么你可以删除较小的部分,只保留复杂性类。

关键的想法是NN+5之间的区别在N非常大的时候变得无效。

有关详细信息,请从此处开始阅读:

http://en.wikipedia.org/wiki/Big_O_notation

答案 4 :(得分:0)

一个非常实用的规则是:

当算法si的复杂性由poly 表示时,如A*n^2+B*n+C 那么复杂度的顺序(也就是O(某事)) 等于变量n的最高阶

A*n^2+B*n+C poly中,订单为O(n ^ 2)。

像josnidhin解释的那样,如果聚有

  • order 1(即n) - 它被称为线性
  • order 2(即n ^ 2) - 它被称为二次
  • ......等等。