算法

来源:互联网 发布:淘宝店铺不能注册 编辑:程序博客网 时间:2024/06/04 20:10

看完还有不懂的话,可以看这篇文章:
http://blog.csdn.net/u012816041/article/details/49888631
大O符号:表示阶,小于关系:无穷大渐近
大O符号在分析算法效率的时候非常有用。举个例子,解决一个规模为n的问题所花费的时间(或者所需步骤的数目)可以表示为:T(n)=4n^2-2n+2。当n增大时,n^2项将开始占主导地位,而其他各项可以被忽略。 举例说明:当n=500,4n^2项是 2n项的1000倍大,因此在大多数场合下,省略后者对表达式的值的影响将是可以忽略不计的。

进一步看,如果我们与任一其他级的表达式比较,n^2项的系数也是无关紧要的。例如:一个包含n^3或n^2项的表达式,即使 T(n)=1,000,000\cdot n^2,假定 U(n)=n^3,一旦n增长到大于1,000,000,后者就会一直超越前者(T(1,000,000)=1,000,000^3=U(1,000,000))。

这样,大O符号就记下剩余的部分,写作:

T(n)\in\Omicron(n^2)

T(n)=\Omicron(n^2)
并且我们就说该算法具有n^2阶(平方阶)的时间复杂度。

无穷小渐近
大O也可以用来描述数学函数估计中的误差项。例如e^x的泰勒展开:

e^x=1+x+\frac{x^2}{2}+\hbox{O}(x^3)\qquad当x \to 0时
这表示,如果x足够接近于0,那么误差e^x - \left(1 + x + \frac{x^2}{2}\right)的绝对值小于x^3的某一常数倍。

给定两正值函数f和g,定义:

f(n)=O(g(n)),条件为:存在正实数c和N,使得对于所有的n >=N,有|f(n)| <= |cg(n)|
最后总结:
设函数f ( n )代表某一算法在输入大小为n的情况下的工作量(效率),则在n趋向很大的时候,我们将f (n)与另一行为已知的函数g(n)进行比较:

1)如果0,则称f (n)在数量级上严格小于g(n),记为f (n)=o( g(n))。

2)如果,则称f (n)在数量级上严格大于g(n),记为f (n)=w( g(n))。

3)如果c,这里c为非0常数,则称f (n)在数量级上等于g(n),即f (n)和g(n)是同一个数量级的函数,记为:f (n)=Θ( g(n))。

4)如果f (n)在数量级上小于或等于g(n),则记为f (n)=O( g(n))。

5)如果f(n)在数量级上大于或等于g(n),则记为f (n)=Ω( g(n))。

0 0