数据结构与算法学习(1)——代码效率优化

作为一名电子信息工程专业的学生,我们学校是在专业选修开设了数据结构课,但是大家都没有选择这一门课,由于一个偶然的机会,在一个技术交流群里有大牛推荐了这个数据结构课,只要1块钱还是9.9块钱我不记得了,反正属于薅羊毛性质,既然买了就拿来督促一下自己,也提升一下自己的代码思想。

复杂度

复杂度是衡量代码运行效率的重要因素,它包括:
时间复杂度(与代码的结构设计相关)
空间复杂度(与数据结构的选择相关)

复杂度是一个关于输入数据量 n 的函数。假设你的代码复杂度是 f(n),那么就用个大写字母 O 和括号,把 f(n) 括起来就可以了,即 O(f(n))

复杂度计算原则

  1. 复杂度与具体的常系数无关,例如 O(n) 和 O(2n) 表示的是同样的复杂度,即O(2n) 等于 O(n+n),也等于 O(n) +
    O(n)
  2. 多项式级的复杂度相加的时候,选择高者作为结果,例如 O(n²)+O(n) 和 O(n²) 表示的是同样的复杂度
  3. O(1) 也是表示一个特殊复杂度,与输入数据量 n 无关

经验性结论:

  1. 一个顺序结构的代码,时间复杂度是 O(1)
  2. 二分查找,或者更通用地说是采用分而治之的二分策略,时间复杂度都是 O(log n)
  3. 一个简单的 for 循环,时间复杂度是 O(n)
  4. 两个顺序执行的 for 循环,时间复杂度是 O(n)+O(n)=O(2n),其实也是 O(n) 两个嵌套的 for 循环,时间复杂度是
    O(n²)

牺牲空间复杂度来降低时间复杂度

代码效率的瓶颈可能发生在时间或者空间两个方面。如果是缺少计算空间,花钱买服务器就可以了。这是个花钱就能解决的问题。相反,如果是缺少计算时间,只能投入宝贵的人生去跑程序。即使你有再多的钱、再多的服务器,也是毫无用处。相比于空间复杂度,时间复杂度的降低就显得更加重要了

降低复杂度的方法

  1. 第一步,暴力解法。在没有任何时间、空间约束下,完成代码任务的开发
  2. 第二步,无效操作处理。将代码中的无效计算、无效存储剔除,降低时间或空间复杂度
  3. 第三步,时空转换。设计合理数据结构,完成时间复杂度向空间复杂度的转移
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值