算法与数据结构学习

一、学习路线

1.1. 入门篇

1. 时间复杂度
2. 空间复杂度
3. 大O表示法
4. 最坏、最好、平均复杂度分析技巧与方法

1.2. 基础篇

1. 常用数据结构
2. 常见算法
3. 实例应用
4. 实用宝典

1.3. 高级篇

 1. 不常用数据结构
 2. 不常用算法
 3. 强化逻辑思维

1.4. 实战篇

​ 通过开源项目、开源框架、系统设计相关问题去剖析其中的数据结构和算法。

1.5. 如何学习

  • 老师的专栏必须看完,同时多思考,刷题leetcode和算法
  • 学习某个数据结构/算法后,剖析使用该数据结构/算法框架,好处或弊端
  • 基础架构研发工程师,写出达到开源水平的框架才是你的目标!
  • 考虑千万级/亿级用户量,TB,PB级别的数据
  • 算法/数据结构的来历、自身的特点、适合解决的问题、实际的应用场
  • 边学边练,适度刷题
  • 多问、多思考、多互动、多沉淀

1.6. 学习路线图

在这里插入图片描述

二、复杂度分析

​ 数据结构和算法解决的是如何更省、更快地存储和处理数据的问题,

  • 更省就是指空间复杂度
  • 更快指的则是时间复杂度。

2.1. 时间复杂度

​ 从 CPU 的角度来看,每行代码操作:读数据-运算-写数据。尽管每行代码对应的 CPU 执行的个数、执行的时间都不一样,但是,我们这里只是粗略估计,所以可以假设每行代码执行的时间都一样,为 unit_time。

/* 如下例子 计算1到n的累加。*/
public Integer sumAdd(Interger n){
   
  int sum = 0; //花费1个 unit_time
  for(int i=1;i<n+1;i++){
     
    sum += i;   //花费n个 unit_time
  }
  return sum;
}
//如上代码计算耗时为 n+1

public Integer sumAdd(Interger n){
   
  int sum = 0; //花费1个 unit_time
  for(int i=1;i<n+1;i++){
       //执行n次
    sum += i;   //花费1个 unit_time
      for(int j=1;j<n+1;j++){
     //执行n次
          sum = sum + i+j;  //花费n个 unit_time
      }
  }
  return sum;
}
//如上代码计算耗时为 1+n(1+n)=n^2+n+1

结论: 所有代码的执行时间 T(n) 与每行代码的执行次数 n 成正比

大O时间复杂度

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KBvTfE1p-1666919861101)(.\images\时间复杂度O(n)].png)

大 O 时间复杂度不表示执行时间而是表示代码执行时间随数据规模增长的变化趋势,所以,也叫作渐进时间复杂度(asymptotic time complexity),简称时间复杂度当n的量级很大的时候,公式中的常量、低阶项可以被忽略

常见数据量级

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wOuKh0Mj-1666919861104)(.\images\时间复杂度量级.jpg)]
在这里插入图片描述
O(1) 只是常量级时间复杂度的一种表示方法,指的是执行常量次方法。

对数阶O(logn)分析

对数阶时间复杂度非常常见,同时也是最难分析的一种时间复杂度。

int i = 1;
while(i<n){
   
  i = i*2;
}
</
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值