重学数据结构一:代码效率优化方法论

复杂度

复杂度通常包括时间复杂度与空间复杂度

复杂度的计算
它与具体的常系数无关,O(n)和O(2n)表示同样同样的复杂度。
复杂度相加的时候,选择高者作为结果,也就是O(nn)+O(n) 与O(nn)表示相同的复杂度。
O(1)也是表示一个特殊的复杂度,即任务与算例个数n无关。

时间复杂度与代码的结构设计高度相关。
空间复杂度与代码中数据结构的选择高度相关。

时间变空间

将“昂贵”的时间复杂度转换为“廉价”的空间复杂度。

假定在不限时间、也不限空间的情况下,可以完成某个任务的代码的开发
这就是通常说的暴力解法,更是程序优化的起点。

在程序开发中,连接时间和空间的桥梁就是数据结构
对于一个开发任务,如果能找到一种高效的数据组织方式,采用合理的数据结构
就可以实现时间复杂度的再次降低,这通常会增加数据的存储量,也就是增加了空间复杂度。

程序优化最核心的思路:
第一步,暴力解法:
在没有任何时间、空间约束下,完成代码任务的开发。
第二步,无效操作处理:
将代码中的无效计算、无效存储剔除,降低时间或空间复杂度。
第三步,时空转换:
设计合理数据结构,完成时间复杂度向空间复杂度的转移。

降低复杂度的案例:
1)有任意多张面额为2元、3元、7元的货币,现要用他们凑出100元,求总共有多少总可能?
在这里插入图片描述
2)求一个输入数组中,查找出现次数最多的元素?

解法一:时间复杂度为O(n*n)
在这里插入图片描述
解法二:利用数据结构,空间换时间,O(n)

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

希境

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值