您的位置:首页 > 理论基础 > 数据结构算法

数据结构与算法一:算法复杂度分析

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) (去除常量系数与低阶项,从内往外计算复杂度)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: