labuladong的算法秘籍-阶段总结
最近学习的知识点太多了,labuladong的算法秘籍、金字塔原理、认知颠覆以及各种思维模型等等的知识点,有点消化不良,决定把有些知识缓一缓放一放,按重要程度分类。金字塔原理>算法秘籍>认知颠覆。
每学习完一章都要留一到两天时间消化,将其加入自己的知识体系中,与旧知识产生联系。避免学完就忘。
并且会整理以后学习的方法论。
学习labuladong的算法秘籍有段时间了。到目前为止,学习了以下内容。
什么是数据结构?
数据+结构
数据(描述客观事物的符号)
结构(组合的方式)
数据结构即是研究数据组合的方式的学问
结构分为物理结构和逻辑结构
物理结构
1、顺序存储:逻辑上相邻的元素物理上也相邻
2、链式存储:逻辑上相邻的元素物理上不相邻,使用一定的空间存储下一个元素位置
顺序存储优缺点
查询方便,通过起始值计算得到任意元素的位置。
插入删除不方便,需要移动后续的元素。
链式存储优缺点
插入删除方便,只需要改变下一个元素位置即可
查询不方便,需要从头遍历
逻辑结构
1、集合 元素之间没有联系,只是单纯的集合
2、线性 元素之间存在一对一关系
3、树形 元素之间存在一对多关系
4、图形 元素之间存在多对多关系
按上述的说法,所有的数据结构基础就是数组和链表
现在回到算法秘籍
关于数组和链表的算法技巧
1、虚拟头节点:创建一个假的节点,用来处理链表头的边界问题
2、双指针:两个指针
2.1、左右指针:两个指针相背而行
2.2、快慢指针:两个指针相向而行,一个在前一个在后,步调可以一致也可以不一致。
2.3、滑动窗口:控制左右指针的间隔
动态规划
将问题分为几个子问题,然后求解每个子问题,得到总解决方案
回溯算法
通过回退选择,重新选择。跟深度优先遍历有点类似。
深度优先遍历遍历的节点,回溯算法遍历的路径。
目前就这么多