1. 简介
(0) 学习框架
分为至少3个阶段(预计共100小时左右):
- 第1阶段:
常用的 经典数据结构(比如二叉树、哈希表、Trie 等) - 第2阶段:
更高级的 数据结构(比如图、并查集、跳表、布隆过滤器等)
各种算法(比如排序、KMP、贪心、分治、动态规划等) - 第3阶段:
leetcode和算法真题(比如海量数据处理、字符串处理等)
(1) 概念
算法 + 数据结构 = 程序
- “算法“ -> 逻辑
- “数据结构“ -> 存储
问题 -> 数据结构+算法=程序 -> 解决问题
(2) 算法
算法:用于解决特定问题的一系列的执行步骤
算法优劣:
- 正确性、可读性、健壮性(对不合理输入的反应能力和处理能力)
- 时间复杂度(time complexity):估算程序指令的执行次数(执行时间)
- 空间复杂度(space complexity):估算所需占用的存储空间
1> 大O表示法(Big O)
一般用大O表示法来描述复杂度,它表示的是数据规模n对应的复杂度
- 忽略常数、系数、低阶
- 对数阶 一般省略底数,统称为logn
- 注意:大O表示法仅仅是一种粗略的分析模型,是一种估算,能帮助我们短时间内了解一个算法的执行效率
2> 常见复杂度
常见复杂度
3> 算法优化方向
- 用尽量少的 存储空间
- 用尽量少的 执行步骤(执行时间)
- 可以 空间换时间、 时间换空间
4> more
- 最好、最坏复杂度
- 均摊复杂度
- 平均复杂度
......
(3) 数据结构
数据结构:计算机存储、组织数据的方式
数据结构分类