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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
对象存储 OSS,恶意文件检测 1000次 1年
简介: 重学数据结构一:代码效率优化方法论

## 复杂度


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


**复杂度的计算**:

它与具体的常系数无关,O(n)和O(2n)表示同样同样的复杂度。

复杂度相加的时候,选择高者作为结果,也就是O(n*n)+O(n) 与O(n*n)表示相同的复杂度。

O(1)也是表示一个特殊的复杂度,即任务与算例个数n无关。


**时间复杂度**与代码的结构设计高度相关。

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


## 时间变空间

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


假定在不限时间、也不限空间的情况下,可以完成某个任务的代码的开发

这就是通常说的暴力解法,更是程序优化的起点。


在程序开发中,连接时间和空间的桥梁就是**数据结构**。

对于一个开发任务,如果能找到一种高效的数据组织方式,**采用合理的数据结构**,

就可以实现时间复杂度的再次降低,这通常会**增加数据的存储量**,也就是**增加了空间复杂度。**


**程序优化最核心的思路:**

第一步,暴力解法:

在没有任何时间、空间约束下,完成代码任务的开发。

第二步,无效操作处理:

将代码中的无效计算、无效存储剔除,降低时间或空间复杂度。

第三步,时空转换:

设计合理数据结构,完成时间复杂度向空间复杂度的转移。


**降低复杂度的案例:**

1)有任意多张面额为2元、3元、7元的货币,现要用他们凑出100元,求总共有多少总可能?

![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20200704085736176.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0OTY5NjQz,size_16,color_FFFFFF,t_70)

2)求一个输入数组中,查找出现次数最多的元素?


解法一:时间复杂度为O(n*n)

![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20200704085842829.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0OTY5NjQz,size_16,color_FFFFFF,t_70)

解法二:利用数据结构,空间换时间,O(n)


![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20200704085910392.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0OTY5NjQz,size_16,color_FFFFFF,t_70)

![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20200704085926758.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0OTY5NjQz,size_16,color_FFFFFF,t_70)

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
1月前
|
算法 安全 大数据
揭秘!Python堆与优先队列:数据结构的秘密武器,让你的代码秒变高效战士!
【7月更文挑战第8天】Python的heapq模块和queue.PriorityQueue提供堆与优先队列功能,助你提升算法效率。堆用于快速找大数据集的第K大元素,如示例所示,时间复杂度O(n log k)。PriorityQueue在多线程中智能调度任务,如模拟下载管理器,按优先级处理任务。掌握这些工具,让代码运行更高效!
49 1
|
2月前
|
存储 缓存 算法
Python中常用的数据结构与算法优化技巧指南
Python是一种强大而灵活的编程语言,它提供了丰富的数据结构和算法库,但是在处理大规模数据或者需要高效运行的情况下,需要考虑一些优化技巧。本文将介绍一些Python中常用的数据结构与算法优化技巧,并附带代码实例,帮助你更好地理解和运用。
|
1月前
|
算法 计算机视觉 开发者
燃爆全场!Python并查集:数据结构界的网红,让你的代码炫酷无比!
【7月更文挑战第16天】并查集,Python中的效率明星,处理不相交集合合并与查询。用于社交网络分析、图像处理、图论算法等领域。优雅实现结合路径压缩和按秩合并
22 1
|
1月前
|
存储 算法 调度
惊呆了!Python高级数据结构堆与优先队列,竟然能这样优化你的程序性能!
【7月更文挑战第10天】Python的heapq模块实现了堆和优先队列,提供heappush和heappop等函数,支持O(log n)时间复杂度的操作。优先队列常用于任务调度和图算法,优化性能。例如,Dijkstra算法利用最小堆加速路径查找。堆通过列表存储,内存效率高。示例展示了添加、弹出和自定义优先级元素。使用堆优化程序,提升效率。
41 2
|
1月前
|
缓存 算法 安全
Java中的数据结构与算法优化策略
Java中的数据结构与算法优化策略
|
2月前
|
存储 算法 搜索推荐
Java数据结构与算法优化
Java数据结构与算法优化
|
2月前
|
存储 算法
【单向链表】数据结构——单向链表的介绍与代码实现&笔记
【单向链表】数据结构——单向链表的介绍与代码实现&笔记
|
2月前
|
搜索推荐 算法
【排序】数据结构——排序算法概念及代码详解(插入、冒泡、快速、希尔)
【排序】数据结构——排序算法概念及代码详解(插入、冒泡、快速、希尔)
|
1月前
|
存储 算法 安全
解锁Python高级数据结构新姿势:堆与优先队列的实战演练,让你的代码更优雅!
【7月更文挑战第8天】Python的`heapq`模块和`queue.PriorityQueue`提供堆与优先队列功能,用于高效数据管理。堆是完全二叉树,`heapq`实现最小堆,常用于任务调度,如按优先级执行任务。当需要线程安全且更复杂操作时,`queue.PriorityQueue`成为优选,例如在管理网络请求时按优先级处理。这两个数据结构能提升代码效率和可读性。
24 0
|
1月前
|
存储 算法 搜索推荐
Java数据结构与算法优化
Java数据结构与算法优化