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

本文涉及的产品
对象存储 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并查集:数据结构界的网红,让你的代码炫酷无比!
在编程的世界里,总有一些数据结构以其独特的魅力和高效的性能脱颖而出,成为众多开发者追捧的“网红”。今天,我们要介绍的这位明星,就是Python中的并查集(Union-Find)——它不仅在解决特定问题上大放异彩,更以其优雅的设计和强大的功能,让你的代码炫酷无比,燃爆全场!
36 0
|
9天前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
30 6
|
24天前
|
存储 Java 开发者
Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效
【10月更文挑战第19天】在软件开发中,随着项目复杂度的增加,数据结构的组织和管理变得至关重要。Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,帮助开发者告别混乱,提升代码质量。
26 1
|
2月前
|
数据采集 JavaScript 前端开发
使用 TypeScript 接口优化数据结构
使用 TypeScript 接口优化数据结构
|
1月前
|
存储 算法 索引
HashMap底层数据结构及其增put删remove查get方法的代码实现原理
HashMap 是基于数组 + 链表 + 红黑树实现的高效键值对存储结构。默认初始容量为16,负载因子为0.75。当存储元素超过容量 * 负载因子时,会进行扩容。HashMap 使用哈希算法计算键的索引位置,通过链表或红黑树解决哈希冲突,确保高效存取。插入、获取和删除操作的时间复杂度接近 O(1)。
29 0
|
1月前
05(数据结构考研)树相关操作代码
05(数据结构考研)树相关操作代码
27 0
|
1月前
|
算法
04(数据结构考研)串相关操作代码
04(数据结构考研)串相关操作代码
18 0
|
1月前
03(数据结构考研)队列相关操作代码
03(数据结构考研)队列相关操作代码
39 0
|
1月前
02(数据结构考研)栈相关操作代码
02(数据结构考研)栈相关操作代码
12 0
|
1月前
01(数据结构考研)线性表相关操作代码
01(数据结构考研)线性表相关操作代码
59 0