今天,我在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。
发布于 2012-05-11 07:08:49
他说,因为10N +8是一个线性方程。如果你画出这个方程,你就会得到一条直线。试着在这个网站上输入10 * x + 8
(函数图),自己看看。
发布于 2012-05-11 07:12:13
作者只是根据自己的经验选择最合适的。您应该知道,计数算法的复杂性几乎总是意味着找到一个大欧函数,它反过来只是给定函数的上界(在您的例子中是10N+8)。
已知的复杂性类型只有几种:线性复杂度、二次复杂度、等.因此,计算时间复杂度的最后一步是选择不太复杂的类型(我的意思是,线性比二次复杂,二次不那么复杂,指数等)可以用于给定的函数,从而正确地描述其复杂性。
在您的例子中,O(n)和O(n^2)甚至O(2^n)确实是的正确答案。但是,在大字号定义中最适合的不太复杂的函数是O(n),这是这里的一个答案。
这是一个真好文章,充分解释了大噢符号.
发布于 2012-05-11 07:14:08
时间复杂性的上升顺序(常见的)
O(1) - Constant
O(log n) - logarithmic
O(n) - linear
O(n log n) - loglinear
O(n^2) - quadratic
注:n无界增加
https://stackoverflow.com/questions/10546888
复制相似问题