数据结构与算法之美【总结笔记】 -- 复杂度分析

1.为什么进行复杂度分析

不同运行环境下,由于硬件的不同、软件版本的不同,并发数不同等待原因,同一代码的运行时间可能相差极大,所以,测试环境下的运行效率虽然直观,但是不能完全信任,所以还需要可靠的理论来支撑。

时间复杂度和空间复杂度的分析,就是对于代码运行效率的抽象,不受运行环境影响,只面向巨大的数据量分析,具有极高的价值。

2.复杂度的表示方法

大 O 复杂度表示法

因为无法知道每一行代码的具体运行时间,所有可以使用参数 runTimeLine 来表示一行代码的运行时间,然后只需要计算每行代码运行多少遍就可以知道时间复杂度啦。

例如以下代码,第4行和第5行代码运行次数为n次,其他为1次,所有总的时间为 (2n+3)* runTimeLine

而用大O表示复杂度的时候,只看增长趋势,所以忽略 低阶、常量、系数  这三个无关部分

进而此代码的时间复杂度为O(n)

int cal(int n) { 
  int sum = 0;
  int i = 1;
  for (; i <= n; ++i) {
    sum = sum + i; 
  } 
  return sum; 
}

总结:直关注执行次数最多的行就可,可以用加法和乘法来计算复杂逻辑下的时间复杂度

3.常见时间复杂度

其中指数阶和阶乘阶的增长趋势太快,所以性能很差,尽量不要出现该复杂度的代码。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值