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

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) (去除常量系数与低阶项,从内往外计算复杂度)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值