开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 7 天,点击查看活动详情
更多、更体系化的内容请持续关注 《菜鸟程序员成长计划》之数据结构与算法 专栏,您的 关注、点赞、收藏 都将是小编持续创作的动力!
一. 确定学习目标
- 知道有哪些常用的数据结构和算法
- 能够写出高性能的底层轮子
- 知道如何进行复杂度分析、性能分析
- 通过不断训练,具备“算法思维”,提高分析和解决实际问题的能力
- 能够自如地应付大厂面试
二. 制定学习路线
(1)入门
- 知道数据结构和算法是什么
- 复杂度分析和大 O 表示法
- 稳定性
(2)基础
- 结合具体的示例,学习各种常用的数据结构和算法
- 知道各常用数据结构的优缺点
- 知道分析各常用算法的复杂度
(3)进阶、高级
- 不太常用的、比较高级的数据结构和算法,比如红黑树等
(4)实战
- 研究各经典开源项目中数据结构和算法的使用
三. 明确学习要点
- 不要死记硬背算法实现,你应该试着去理解不同的数据结构、算法的原理是什么,它们是怎么来的,是如何解决不同的问题的
- 分析时间和空间复杂度,知道各个算法和数据结构的优点、缺点是什么,以及适用于解决什么问题,什么情况下更适合采用哪种算法和数据结构
- 算法思想才是更重要的,比如:分而治之、动态规划、贪婪算法等,学习算法思想可以帮你更好地理解算法之间的快慢差异,并学会在算法对时间和空间的使用上做出平衡
- 尝试把数据结构图形化,视觉化
- 一定要自己动手实现一遍
- 学到的知识需要时间慢慢消化、沉淀,不要试图一下子就全部掌握,学习本身就是反复迭代和不断思考的过程。如果学习过程中遇到挫败感,想想“书读百遍其义自见”这句话,可以先跳过这部分理解不了的,后面回过头再学习
学习重点(学什么)
想要学习数据结构与算法,最重要的概念是---复杂度分析,必须熟练拿下,否则数据结构与算法等于没学; 我们在学习数据结构的时候都有哪些内容:
链表
- 链表
- 双向链表
哈希表/散列表 (Hash Table)
- 散列函数
- 碰撞解决
字符串算法
-
排序
-
查找
-
- BF算法
- KMP算法
- BM算法
-
正则表达式
-
数据压缩
树
- 二叉树
- 二叉查找树
- 伸展树(splay tree 分裂树)
- 平衡二叉树AVL
- 红黑树
- B树,B+,B*
- R树
- Trie树(前缀树)
- 后缀树
- 最优二叉树(赫夫曼树)
- 二叉堆 (大根堆,小根堆)
- 二项树
- 二项堆
- 斐波那契堆(Fibonacci Heap)
图的算法
- 图的存储结构和基本操作(建立,遍历,删除节点,添加节点)
- 最小生成树
- 拓扑排序
- 关键路径
- 最短路径: Floyd,Dijkstra,bellman-ford,spfa
排序算法
交换排序算法
- 冒泡排序
- 插入排序
- 选择排序
- 希尔排序
- 快排
- 归并排序
- 堆排序
线性排序算法
- 桶排序
查找算法
- 顺序表查找:顺序查找
- 有序表查找:二分查找
- 分块查找: 块内无序,块之间有序;可以先二分查找定位到块,然后再到
块
中顺序查找 - 动态查找: 二叉排序树,AVL树,B- ,B+ (这里之所以叫
动态查找表
,是因为表结构是查找的过程中动态生成的) - 哈希表: O(1)
15个经典基础算法
- Hash
- 快速排序
- 快递选择SELECT
- BFS/DFS (广度/深度优先遍历)
- 红黑树 (一种自平衡的
二叉查找树
) - KMP 字符串匹配算法
- DP (动态规划 dynamic programming)
- A*寻路算法: 求解最短路径
- Dijkstra:最短路径算法 (八卦下:Dijkstra是荷兰的计算机科学家,提出”信号量和PV原语“,"解决哲学家就餐问题",”死锁“也是它提出来的)
- 遗传算法
- 启发式搜索
- 图像特征提取之SIFT算法
- 傅立叶变换
- SPFA(shortest path faster algorithm) 单元最短路径算法
海量数据处理
- Hash映射/分而治之
- Bitmap
- Bloom filter(布隆过滤器)
- Trie树
- 数据库索引
- 倒排索引(Inverted Index)
- 双层桶划分
- 外排序
- simhash算法
- 分布处理之Mapreduce
算法设计思想
- 迭代法
- 穷举搜索法
- 递推法
- 动态规划
- 贪心算法
- 回溯
- 分治算法
常见算法问题分类
- 字符串
- 堆和栈
- 链表
- 数值问题
- 数组和数列问题
- 矩阵问题
- 二叉树
- 图
- 海量数据处理
- 智力思维训练
- 系统设计
致谢
莫笑少年江湖梦,谁不少年梦江湖.
本篇内容参考自互联网及开源社区,感谢前人的经验、分享和付出,让我们可以有机会站在巨人的肩膀上眺望星辰大海!
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 7 天,点击查看活动详情