算法概念:大O表示法/小o表示法/Ω/Θ
2015-04-24 16:34
253 查看
如果算法A需要的时间与f(n)成正比,则算法A称为f(n)阶,表示为O(f(n))。函数f(n)称为算法的增率函数(growth-rate
function)。该表示法使用大写字母O来表示(order),故称大O表示法。若规模为n的问题需要的时间与n成正比,则问题表示为O(n),即n阶。若需要的时间与n^2成正比,则问题表示为O(n^2),以此类推。
下面是算法的阶的定义。
若存在常量k和n0,使算法A在解决规模n>=n0的问题时,需要的问题单元不大于k*f(n),则算法A为f(n)阶,表示为O(f(n))。
O(f(n))定义中的条件n>=n0正式阐明了问题规模足够大的概念,一般地,有很多k和n值可以满足这个定义。大O表示法的几个数学属性有助于简化算法分析。在讨论这些属性是要记住,O(f(n))意为f(n)阶,O并不是一个函数。
1)可忽略算法增率函数的低阶项。
2)可忽略算法增率函数中高阶项的倍数常量。
3)O(f(n))+O(g(n))=O(f(n)+g(n))可组合增率函数。
来源: </article/7637668.html>
对于任何数学函数,
这三个记号可以用来度量其“渐近表现”,即当趋于无穷大时的阶的情况,这是算法分析中非常重要的概念。大家可以把它们分别想象成≤、≥和,分别估计了函数的渐近上界、渐近下界和准确界。诚然,渐近关系和确切大小关系是有区别的,但当问题规模很大时,忽略这种区别能大大降低算法分析的难度。
下面我们就来具体定义这三种记号的表示。
设函数f ( n )代表某一算法在输入大小为n的情况下的工作量(效率),则在n趋向很大的时候,我们将f (n)与另一行为已知的函数g(n)进行比较:
1)如果
0,则称f
(n)在数量级上严格小于g(n),记为f (n)=o( g(n))。(小o表示法)
2)如果
正无穷,则称f
(n)在数量级上严格大于g(n),记为f (n)=( ( 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))。(大O表示法)
5)如果f(n)在数量级上大于或等于g(n),则记为f (n)=Ω( g(n))。
这里我们假定f (n),g (n)是非负单调的,且极限存在。如果这个极限
不存在,则无法对f
(n)和g (n)进行比较。在进行此种计算时,一个经常用到的技术是洛必达(L'Hopital)法则。该法则由17世纪法国数学家Guillaume de L'Hopital发现(也有人认为是瑞士数学家Johann Bernoulli发现的)。该法则声称,两个函数的比率极限等于两个函数的导数的比率极限,这里当然假定两个函数的导数比率的极限存在,即有:
有了这个定义,就可以对素性测试的两个算法进行比较了。
,符合第1个定义,因此这两个素性测试算法的效率差异是数量级的差异。
在算法分析中,最常选取的g(n)有如下一些,见表2-1。
一个值得提醒的问题是,根据定义,对于任意一个g (n)函数来说,可能存在很多个函数f (n),使得f (n)=O(g(n)),即O(g(n))表示的实际上是一个函数的集合,这里的等于也不是普通意义上的等于,而是说明f (n)是函数集合o(g(n))里的一员,即f
(n)=O(g(n))并不意味着f (n)等于O(g(n))。等于号的这种使用令那些严谨的科学家非常不快甚至愤怒,但计算机界人士很喜欢这种马虎的表示。不过,我们在心里应该知道,f (n)=O(g(n))并不意味着f (n)≠O(g(n))。不然,我们就被自己骗了!
等号在其他渐近表示中的使用也可以同样解释。
来源: <http://book.2cto.com/201211/8127.html>
function)。该表示法使用大写字母O来表示(order),故称大O表示法。若规模为n的问题需要的时间与n成正比,则问题表示为O(n),即n阶。若需要的时间与n^2成正比,则问题表示为O(n^2),以此类推。
下面是算法的阶的定义。
若存在常量k和n0,使算法A在解决规模n>=n0的问题时,需要的问题单元不大于k*f(n),则算法A为f(n)阶,表示为O(f(n))。
O(f(n))定义中的条件n>=n0正式阐明了问题规模足够大的概念,一般地,有很多k和n值可以满足这个定义。大O表示法的几个数学属性有助于简化算法分析。在讨论这些属性是要记住,O(f(n))意为f(n)阶,O并不是一个函数。
1)可忽略算法增率函数的低阶项。
2)可忽略算法增率函数中高阶项的倍数常量。
3)O(f(n))+O(g(n))=O(f(n)+g(n))可组合增率函数。
来源: </article/7637668.html>
对于任何数学函数,
这三个记号可以用来度量其“渐近表现”,即当趋于无穷大时的阶的情况,这是算法分析中非常重要的概念。大家可以把它们分别想象成≤、≥和,分别估计了函数的渐近上界、渐近下界和准确界。诚然,渐近关系和确切大小关系是有区别的,但当问题规模很大时,忽略这种区别能大大降低算法分析的难度。
下面我们就来具体定义这三种记号的表示。
设函数f ( n )代表某一算法在输入大小为n的情况下的工作量(效率),则在n趋向很大的时候,我们将f (n)与另一行为已知的函数g(n)进行比较:
1)如果
0,则称f
(n)在数量级上严格小于g(n),记为f (n)=o( g(n))。(小o表示法)
2)如果
正无穷,则称f
(n)在数量级上严格大于g(n),记为f (n)=( ( 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))。(大O表示法)
5)如果f(n)在数量级上大于或等于g(n),则记为f (n)=Ω( g(n))。
这里我们假定f (n),g (n)是非负单调的,且极限存在。如果这个极限
不存在,则无法对f
(n)和g (n)进行比较。在进行此种计算时,一个经常用到的技术是洛必达(L'Hopital)法则。该法则由17世纪法国数学家Guillaume de L'Hopital发现(也有人认为是瑞士数学家Johann Bernoulli发现的)。该法则声称,两个函数的比率极限等于两个函数的导数的比率极限,这里当然假定两个函数的导数比率的极限存在,即有:
有了这个定义,就可以对素性测试的两个算法进行比较了。
,符合第1个定义,因此这两个素性测试算法的效率差异是数量级的差异。
在算法分析中,最常选取的g(n)有如下一些,见表2-1。
一个值得提醒的问题是,根据定义,对于任意一个g (n)函数来说,可能存在很多个函数f (n),使得f (n)=O(g(n)),即O(g(n))表示的实际上是一个函数的集合,这里的等于也不是普通意义上的等于,而是说明f (n)是函数集合o(g(n))里的一员,即f
(n)=O(g(n))并不意味着f (n)等于O(g(n))。等于号的这种使用令那些严谨的科学家非常不快甚至愤怒,但计算机界人士很喜欢这种马虎的表示。不过,我们在心里应该知道,f (n)=O(g(n))并不意味着f (n)≠O(g(n))。不然,我们就被自己骗了!
等号在其他渐近表示中的使用也可以同样解释。
来源: <http://book.2cto.com/201211/8127.html>
相关文章推荐
- 2.1 算法的概念与表示方法
- python算法表示概念扫盲教程
- PHP实现图的邻接矩阵表示及几种简单遍历算法分析
- 网络层概念学习之一(基本概念、路由器、选路算法)
- 算法(渐进度表示)
- 算法训练 2的次幂表示 递归实现
- 图的概念和关于图的几个算法
- PV系统吞吐量概念及相关算法
- 【数据结构】算法3.1-3.2 栈的顺序存储表示
- 几个基础算法介绍和实现——基本概念
- 存储类型、ADT、纯C去引用、算法及设计原则、时间复杂度---基本概念
- 算法基本概念
- [叩响C#之门]第4章 流程控制 4.1 算法的概念(以“人鬼过河”游戏为例)
- 编程面试10大算法概念汇总
- 基本图算法之图的表示——习题思路(2)
- 编程面试的10大算法概念汇总
- 编程面试的10大算法概念汇总
- 编程面试的10大算法概念汇总
- 有必要澄清两个基本概念--算法和过程的关系以及关于程序设计方法论的一些看法
- 编程面试的10大算法概念汇总