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

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000 次 1年
对象存储OSS,敏感数据保护2.0 200GB 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)

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
目录
相关文章
|
5月前
|
前端开发 Java
java实现队列数据结构代码详解
本文详细解析了Java中队列数据结构的实现,包括队列的基本概念、应用场景及代码实现。队列是一种遵循“先进先出”原则的线性结构,支持在队尾插入和队头删除操作。文章介绍了顺序队列与链式队列,并重点分析了循环队列的实现方式以解决溢出问题。通过具体代码示例(如`enqueue`入队和`dequeue`出队),展示了队列的操作逻辑,帮助读者深入理解其工作机制。
150 1
|
10月前
|
数据采集 存储 算法
Python 中的数据结构和算法优化策略
Python中的数据结构和算法如何进行优化?
211 19
|
10月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
245 1
|
10月前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
163 6
|
11月前
|
存储 Java 开发者
Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效
【10月更文挑战第19天】在软件开发中,随着项目复杂度的增加,数据结构的组织和管理变得至关重要。Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,帮助开发者告别混乱,提升代码质量。
106 1
|
11月前
|
存储 算法 索引
HashMap底层数据结构及其增put删remove查get方法的代码实现原理
HashMap 是基于数组 + 链表 + 红黑树实现的高效键值对存储结构。默认初始容量为16,负载因子为0.75。当存储元素超过容量 * 负载因子时,会进行扩容。HashMap 使用哈希算法计算键的索引位置,通过链表或红黑树解决哈希冲突,确保高效存取。插入、获取和删除操作的时间复杂度接近 O(1)。
195 0
|
11月前
05(数据结构考研)树相关操作代码
05(数据结构考研)树相关操作代码
70 0
|
11月前
|
算法
04(数据结构考研)串相关操作代码
04(数据结构考研)串相关操作代码
52 0
|
11月前
03(数据结构考研)队列相关操作代码
03(数据结构考研)队列相关操作代码
104 0
|
11月前
02(数据结构考研)栈相关操作代码
02(数据结构考研)栈相关操作代码
52 0