数据结构与算法一:算法复杂度分析
2016-03-12 19:33
295 查看
T(f(N)) = O(g(N)) 表示f(N)的增长率是小于g(N)的。 数学表达是f(N) <= cg(N) N>n0(c、n0是个常数)
T(f(N)) =
θ(g(N)) 表示f(N)的增长率是等于g(N)的。 数学表达是f(N) = cg(N) N>n0(c、n0是个常数)
T(f(N)) =
Ω(g(N)) 表示f(N)的增长率是大于g(N)的。 数学表达是f(N) >= cg(N) N>n0(c、n0是个常数)
复杂度有这么3种描述,通常我们用big o 来描述复杂度,通过求一个算法的最坏情况就可以获得,这种最坏情况就是一个上限了,同时要保证这是一个渐进上界,常量系数与低阶项都可以去掉。 例如3N^3+2N^2+1可以写成N^3
我们之所以不去求复杂度的平均值,是因为有时候比较难求,而且不能说明算法到底效率怎么样
我们求算法复杂度是基于一个简单的计算模型的,每个操作是一个时间单位。
计算复杂度是,由内向外进行计算,这样子比较方便。
下面是一个for循环的计算方法
int sum = 0;
for(int i=0, i<N; i++){ 循环N次 初始化耗1个单位,比较耗N+1个单位,自增耗N个单位, 加上下面的(4N+2)*N个单位总耗4N^2+4N+2
for(int j=0; j<N; j++){
// 循环N次 初始化耗了1个单位, 比较N+1次耗了N+1个单位, 自增N次耗了N个单位, 加上下面语句2N个单位总共4N+2
sum += a[i][j]; // +与=耗了2个时间单位
}
}
最后T(f(N)) = O(N^2) (去除常量系数与低阶项,从内往外计算复杂度)
T(f(N)) =
θ(g(N)) 表示f(N)的增长率是等于g(N)的。 数学表达是f(N) = cg(N) N>n0(c、n0是个常数)
T(f(N)) =
Ω(g(N)) 表示f(N)的增长率是大于g(N)的。 数学表达是f(N) >= cg(N) N>n0(c、n0是个常数)
复杂度有这么3种描述,通常我们用big o 来描述复杂度,通过求一个算法的最坏情况就可以获得,这种最坏情况就是一个上限了,同时要保证这是一个渐进上界,常量系数与低阶项都可以去掉。 例如3N^3+2N^2+1可以写成N^3
我们之所以不去求复杂度的平均值,是因为有时候比较难求,而且不能说明算法到底效率怎么样
我们求算法复杂度是基于一个简单的计算模型的,每个操作是一个时间单位。
计算复杂度是,由内向外进行计算,这样子比较方便。
下面是一个for循环的计算方法
int sum = 0;
for(int i=0, i<N; i++){ 循环N次 初始化耗1个单位,比较耗N+1个单位,自增耗N个单位, 加上下面的(4N+2)*N个单位总耗4N^2+4N+2
for(int j=0; j<N; j++){
// 循环N次 初始化耗了1个单位, 比较N+1次耗了N+1个单位, 自增N次耗了N个单位, 加上下面语句2N个单位总共4N+2
sum += a[i][j]; // +与=耗了2个时间单位
}
}
最后T(f(N)) = O(N^2) (去除常量系数与低阶项,从内往外计算复杂度)
相关文章推荐
- 数据结构-图-经典算法(二)
- nginx 学习八 高级数据结构之基数树ngx_radix_tree_t
- JAVA自定义数据结构 更新ing
- JAVA自定义数据结构 更新ing
- JAVA自定义数据结构 更新ing
- JAVA自定义数据结构 更新ing
- JAVA自定义数据结构 更新ing
- JAVA自定义数据结构 更新ing
- JAVA自定义数据结构 更新ing
- JAVA自定义数据结构 更新ing
- 数据结构5—图-邻接表 java实现
- Oracle导出数据结构和数据表的方法
- 二叉查找树以及相关的几个树
- 【数据结构与算法】(三) c 语言栈的简单实现
- Android JNI 使用的数据结构JNINativeMethod详解 动态注册JNI
- 堆栈之静态数组
- Libevent源码分析(一)--- 基本数据结构
- 插入排序法
- 选择排序法
- JAVA内置数据结构概述