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

本文涉及的产品
对象存储 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,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
6天前
|
Go 索引
掌握Go语言:Go语言范围,优雅遍历数据结构,简化代码操作实战解析(24)
掌握Go语言:Go语言范围,优雅遍历数据结构,简化代码操作实战解析(24)
|
6天前
|
存储 消息中间件 NoSQL
Redis数据类型详解:选择合适的数据结构优化你的应用
Redis数据类型详解:选择合适的数据结构优化你的应用
|
6天前
|
存储 编译器 C语言
【数据结构】C语言实现链队列(附完整运行代码)
【数据结构】C语言实现链队列(附完整运行代码)
43 0
|
6天前
|
存储 监控 NoSQL
Redis处理大量数据主要依赖于其内存存储结构、高效的数据结构和算法,以及一系列的优化策略
【5月更文挑战第15天】Redis处理大量数据依赖内存存储、高效数据结构和优化策略。选择合适的数据结构、利用批量操作减少网络开销、控制批量大小、使用Redis Cluster进行分布式存储、优化内存使用及监控调优是关键。通过这些方法,Redis能有效处理大量数据并保持高性能。
26 0
|
6天前
|
C语言
【C语言/数据结构】排序(快速排序及多种优化|递归及非递归版本)
【C语言/数据结构】排序(快速排序及多种优化|递归及非递归版本)
11 0
|
6天前
|
存储 算法 分布式数据库
数据结构第五课 -----二叉树的代码实现
数据结构第五课 -----二叉树的代码实现
|
6天前
|
存储
数据结构基础:一篇文章教你单链表(头插,尾插,查找,头删等的解析和代码)
数据结构基础:一篇文章教你单链表(头插,尾插,查找,头删等的解析和代码)
|
6天前
|
存储 算法 C语言
C语言进阶:顺序表(数据结构基础) (以通讯录项目为代码练习)
C语言进阶:顺序表(数据结构基础) (以通讯录项目为代码练习)
|
6天前
|
算法 数据处理 C语言
【数据结构与算法】快速排序(详解:快排的Hoare原版,挖坑法和双指针法|避免快排最坏时间复杂度的两种解决方案|小区间优化|非递归的快排)
【数据结构与算法】快速排序(详解:快排的Hoare原版,挖坑法和双指针法|避免快排最坏时间复杂度的两种解决方案|小区间优化|非递归的快排)
|
6天前
|
算法 索引
【算法与数据结构】深入二叉树实现超详解(全源码优化)
【算法与数据结构】深入二叉树实现超详解(全源码优化)