算法复杂度的计算方法
2016-03-04 20:45
288 查看
引用转载自:
http://blog.chinaunix.net/uid-20490872-id-1665369.html http://www.icourse163.org/course/hit-356006#/info
常见算法时间复杂度:
O(1): 表示算法的运行时间为常量
O(n): 表示该算法是线性算法
O(㏒2n): 二分查找算法
O(n2): 对数组进行排序的各种简单算法,例如直接插入排序的算法。
O(n3): 做两个n阶矩阵的乘法运算
O(2n): 求具有n个元素集合的所有子集的算法
O(n!): 求具有N个元素的全排列的算法
优<---------------------------<劣
O(1)<O(㏒2n)<O(n)<O(n2)<O(2n)
时间复杂度按数量级递增排列依次为:常数阶O(1)、对数阶O(log2n)、线性阶O(n)、线性对数阶O(nlog2n)、平方阶O(n2)、立方阶O(n3)、……k次方阶O(nk)、指数阶O(2n)、阶乘O(n!)。
大O是上界,叫做低阶函数,c和n0都是任意取的。
小o是严格低阶函数,对于任意的c,n>=n0时,0<=f(n)<=cg(n)。
并非所有函数都是可比的,即既不是大O关系,也不是Ω关系。
求解递归方程的三个主要方法
•替换方法:
–首先猜想,
–然后用数学归纳法证明.
•迭代方法:
–循环地展开递归方程
–把方程转化为一个和式
–然后用估计和的方法来求解.
•Master定理方法:
–求解型为T(n)=aT(n/b)+f(n)的递归方程
(1)若
那么
(2)若
那么
(3)若
且对于某个常数
和所有充分大的
有
那么
也就是说把f(n)也化成n^k的形式,与 n^logba(以b为底a的对数)相比,若|k-logba| = ε,则可以使用master定理进行求解。
http://blog.chinaunix.net/uid-20490872-id-1665369.html http://www.icourse163.org/course/hit-356006#/info
常见算法时间复杂度:
O(1): 表示算法的运行时间为常量
O(n): 表示该算法是线性算法
O(㏒2n): 二分查找算法
O(n2): 对数组进行排序的各种简单算法,例如直接插入排序的算法。
O(n3): 做两个n阶矩阵的乘法运算
O(2n): 求具有n个元素集合的所有子集的算法
O(n!): 求具有N个元素的全排列的算法
优<---------------------------<劣
O(1)<O(㏒2n)<O(n)<O(n2)<O(2n)
时间复杂度按数量级递增排列依次为:常数阶O(1)、对数阶O(log2n)、线性阶O(n)、线性对数阶O(nlog2n)、平方阶O(n2)、立方阶O(n3)、……k次方阶O(nk)、指数阶O(2n)、阶乘O(n!)。
大O是上界,叫做低阶函数,c和n0都是任意取的。
小o是严格低阶函数,对于任意的c,n>=n0时,0<=f(n)<=cg(n)。
并非所有函数都是可比的,即既不是大O关系,也不是Ω关系。
求解递归方程的三个主要方法
•替换方法:
–首先猜想,
–然后用数学归纳法证明.
•迭代方法:
–循环地展开递归方程
–把方程转化为一个和式
–然后用估计和的方法来求解.
•Master定理方法:
–求解型为T(n)=aT(n/b)+f(n)的递归方程
(1)若
那么
(2)若
那么
(3)若
且对于某个常数
和所有充分大的
有
那么
也就是说把f(n)也化成n^k的形式,与 n^logba(以b为底a的对数)相比,若|k-logba| = ε,则可以使用master定理进行求解。
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析