码迷,mamicode.com
首页 > 编程语言 > 详细

算法分析| 集3(渐近符号)

时间:2017-10-12 20:25:13      阅读:359      评论:0      收藏:0      [点我收藏+]

标签:png   image   时间   height   ref   情况下   线性时间   简单   width   

前面三篇文章中,我们讨论了渐近分析最差,平均和最佳算法案例

渐近分析的主要思想是对不依赖于机器特定常数的算法的效率进行测量,并且不需要执行算法和程序进行比较的时间。

渐近符号是用于表示渐近分析的算法的时间复杂度的数学工具。

以下3个渐近符号主要用于表示算法的时间复杂度。

技术分享

1)Θ表示法: θ符号界定上下一个函数,因此它定义了精确的渐近行为。
获取表达式的Theta符号的一个简单方法是降低低阶项,忽略顶点常量。

例如,考虑以下表达式。

3n3 + 6n2 + 6000 = Θ(n3)

删除低阶项总是很好,因为不管所涉及的常数的情况下,总是会有一个N0,在Θ(n 3)具有比θ(n 2)更大的值。
对于给定的函数g(n),我们表示Θ(g(n))是以下函数集合

Θ(g(n))= {f(n)):存在正常数c1,c2和n0等 
                 对于所有n> = n0,0 <= c1 * g(n)<= f(n)<= c2 * g(n)

上述定义意味着,如果f(n)是g(n)的Θ,则对于大的n(n> = n0),值f(n)总是在c1 * g(n)和c2 * g N0)。θ的定义还要求对于n大于n0的值,f(n)必须是非负的。

技术分享

2)大O表示法:大O表示法定义了算法的上限,它仅从上面界定了一个函数。

例如,考虑插入排序的情况。

在最坏情况下,在最佳情况和二次时间内需要线性时间。我们可以安全地说,插入排序的时间复杂度是O(n ^ 2)。

请注意,O(n ^ 2)也包括线性时间。
如果我们使用Θ表示法来表示插入排序的时间复杂度,我们必须使用两个语句来实现最佳和最差情况:
1.插入排序最差的时间复杂度为Θ(n ^ 2)。
插入排序的最佳情况时间复杂度为Θ(n)。

当我们只有一个算法的时间复杂度上限时,大O符号是有用的。

很多时候,我们很容易找到一个上限,只需简单地看一下算法。

O(g(n))= {f(n)):存在正常常数c和 
                  n0,使得0 <= f(n)<= cg(n) 
                  全部n> = n0}

技术分享

3)Ω符号:正如大O表示法在函数上提供渐近上界,Ω表示法提供渐近下界。

当我们对算法的时间复杂度有较低的限制时,可以使用Ω表示法。

如前一篇文章所讨论的,算法最佳情况一般不是很有用,所以这三种算法中使用的符号最小。

对于给定的函数g(n),我们用Ω(g(n))表示函数集合。

Ω(g(n))= {f(n)):存在正常常数c和
                  n0,使得0 <= cg(n)<= f(n)
                  所有n> = n0}。

让我们在这里考虑相同的插入排序示例。插入排序的时间复杂度可以写为Ω(n),但它不是关于插入排序的非常有用的信息,

因为我们通常对最坏情况感兴趣,有时在平均情况下有兴趣。

练习:
下列哪些语句是有效的?
1.快速排序的时间复杂度是Θ(N ^ 2)
2.快速排序的时间复杂度是O(n ^ 2)
3.对于任何两个函数f(n)和G(N),我们已经F(N)=Θ (g(n))当且仅当f(n)= O(g(n))和f(n)=Ω(g(n)))。
4.所有的计算机算法时间复杂度可被写为Ω(1)

 

算法分析| 集3(渐近符号)

标签:png   image   时间   height   ref   情况下   线性时间   简单   width   

原文地址:http://www.cnblogs.com/wongyi/p/7657627.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!