算法复杂度的渐近表示法(详细版)
2015-01-06 20:56
323 查看
转自:http://blog.csdn.net/corivsky/article/details/2772004
一个算法的时间复杂度,指算法运行的时间。
假设数据输入规模是n,算法的复杂度可以表示为f(n)的函数
一。大O记号
假设f(n)和g(n)的定义域是非负整数,存在两个正整数c和n0,使得n>n0的时候,f(n)≤c*g(n),则f(n)=O(g(n))。可见O(g(n))可以表示算法运行时间的上界。O(g(n))表示的函数集合的函数是阶数不超过g(n)的函数。
例如:f(n)=2*n+2=O(n)
证明:当n>3的时候,2*n +2<3n,所以可选n0=3,c=3,则n>n0的时候,f(n)<c*(n),所以f(n)=O(n)。
现在再证明f(n)=2*n+2=O(n^2)
证明:当n>2的时候,2*n+2<2*n^2,所以可选n0=2,c=2,则n>n0的时候,f(n)<c*(n^2),所以f(n)=O(n^2)。
同理可证f(n)=O(n^a),a>1
二。Ω记号
Ω记号与大O记号相反,他可以表示算法运行时间的下界。Ω(g(n))表示的函数集合的函数是所有阶数超过g(n)的函数。
例如:f(n)=2*n^2+3*n+2=Ω(n^2)
证明:当n>4的时候,2*n^2+3*n+2>n^2,所以可选n0=4,c=1,则n>n0的时候,f(n)>c*(n^2),所以f(n)=Ω(n^2)。
同理可证f(n)=Ω(n),f(n)=Ω(1)
三。Θ记号
Θ记号介于大O记号和Ω记号之间。他表示,存在正常数c1,c2,n0,当n>n0的时候,c1*g(n)≤f(n)≤c2*g(n),则f(n)=Θ(g(n))。他表示所有阶数与g(n)相同的函数集合。
四。小o记号
f(n)=o(g(n))当且仅当f(n)=O(g(n))且f(n)≠Ω(g(n))。也就是说小o记号可以表示时间复杂度的上界,但是一定不等于下界。
五。例子
假设f(n)=2n^2+3n+5,
则f(n)=O(n^2)或者f(n) = O(n^3)或者f(n)=O(n^4)或者……
f(n)=Ω(n^2)或者f(n)=Ω(n)或者f(n)=Ω(1)
f(n)=Θ(n^2)
f(n) = o(n^3)或者f(n)=o(n^4)或者f(n)=o(n^5)或者……
注:n^2表示n的平方,以此类推。
一个算法的时间复杂度,指算法运行的时间。
假设数据输入规模是n,算法的复杂度可以表示为f(n)的函数
一。大O记号
假设f(n)和g(n)的定义域是非负整数,存在两个正整数c和n0,使得n>n0的时候,f(n)≤c*g(n),则f(n)=O(g(n))。可见O(g(n))可以表示算法运行时间的上界。O(g(n))表示的函数集合的函数是阶数不超过g(n)的函数。
例如:f(n)=2*n+2=O(n)
证明:当n>3的时候,2*n +2<3n,所以可选n0=3,c=3,则n>n0的时候,f(n)<c*(n),所以f(n)=O(n)。
现在再证明f(n)=2*n+2=O(n^2)
证明:当n>2的时候,2*n+2<2*n^2,所以可选n0=2,c=2,则n>n0的时候,f(n)<c*(n^2),所以f(n)=O(n^2)。
同理可证f(n)=O(n^a),a>1
二。Ω记号
Ω记号与大O记号相反,他可以表示算法运行时间的下界。Ω(g(n))表示的函数集合的函数是所有阶数超过g(n)的函数。
例如:f(n)=2*n^2+3*n+2=Ω(n^2)
证明:当n>4的时候,2*n^2+3*n+2>n^2,所以可选n0=4,c=1,则n>n0的时候,f(n)>c*(n^2),所以f(n)=Ω(n^2)。
同理可证f(n)=Ω(n),f(n)=Ω(1)
三。Θ记号
Θ记号介于大O记号和Ω记号之间。他表示,存在正常数c1,c2,n0,当n>n0的时候,c1*g(n)≤f(n)≤c2*g(n),则f(n)=Θ(g(n))。他表示所有阶数与g(n)相同的函数集合。
四。小o记号
f(n)=o(g(n))当且仅当f(n)=O(g(n))且f(n)≠Ω(g(n))。也就是说小o记号可以表示时间复杂度的上界,但是一定不等于下界。
五。例子
假设f(n)=2n^2+3n+5,
则f(n)=O(n^2)或者f(n) = O(n^3)或者f(n)=O(n^4)或者……
f(n)=Ω(n^2)或者f(n)=Ω(n)或者f(n)=Ω(1)
f(n)=Θ(n^2)
f(n) = o(n^3)或者f(n)=o(n^4)或者f(n)=o(n^5)或者……
注:n^2表示n的平方,以此类推。
相关文章推荐
- 算法的复杂度的渐近表示方法
- 算法复杂度的渐近表示法
- 掌握算法的渐近时间复杂度和空间复杂度的意义与作用
- 大O算法复杂度表示
- 什么是算法 , 算法复杂度 ,表示形式 ,及分类
- 设以带头结点的双向循环链表表示的线性表L= (a1,a2,…,an),试写一时间复杂度O(n)的算法,将L改造为 (a1,a3,…,an,…,a4,a2)。
- 算法复杂度的渐近表示法(详细版)
- 什么是算法 , 算法复杂度 ,表示形式 ,及分类
- 算法复杂度攻击
- 算法——回溯法详细运用
- C++ STL标准容器插入删除算法的复杂度(来源flyhorse)
- 算法之带权调度问题(有个人新创复杂度n算法)
- 阿拉伯数字转换英文数字表示算法解析及其实现
- 【求解算法的时间复杂度的具体步骤】
- 如何计算一个算法的时间复杂度
- 用一个复杂度为O(n)的算法找出回文
- .NET平台上编写算法走迷宫的小游戏 (程序+详细文档+源代码)
- 算法复杂度计算 学习
- 应用系统权限表示的算法技巧
- 算法性能评估指标的时间复杂度