(一)引论——为后续章节搭建一个学习平台
(二)算法分析——时间复杂度的分析法则及5个经典算法案例分析
(三)链表——ArrayList与LinkedList源码解析和应用场景以及手写实现LRU缓存淘汰算法
(四)队列——线程池中有限资源请求队列排队功能的实现原理及队列的手写实现
(五)栈——用户界面的前进跳转及回退机制如何实现及栈的手写实现
(六)Hash表——HashMap 的实现原理精讲及Hash思想在ThreadLocal与数据库索引中的应用
(七)Java容器结构总结
(八) 树——基本概念,以及huffman编码、二叉排序树、二叉平衡树的原理及手写实现
(九)散列和优先队列(堆)以及不相交集类
(十)图论(1)——拓扑排序、最短路径算法、网络流问题
(十 一)图论(2)——最小生成树、深度优先搜索的应用、NP-完全性介绍
(十二)算法设计技巧——贪婪算法、分治算法、动态规划算法、随机化算法和回溯算法
(十三)摊还分析——二项队列、斜堆、斐波那契堆、伸展树
(十四)高级数据结构及实现——自顶向下伸展树、红黑树、treap树、后缀数组与后缀树、k-d树、配对树
(十五)【面试】常用算法实战——排序算法、二分查找算法、kmp匹配算法、递归算法、大数据判存算法
(十六)【面试】B+树——MySql数据库索引是如何实现的
\qquad
一、贪婪算法传送门:(暂无,后续补上)
\qquad
二、分治算法传送门:(暂无,后续补上)
\qquad
三、动态规划算法传送门:动态规划? so easy!!!
动态规划就是将一个大问题,按照同一个模型(通过数学建模得出的一个推导公式),逐层往下拆解,直到找到基准状态(一个已知的答案或者一个容易被求解的问题);然后再根据得出的推导公式自底向上逐层求解(期间保存每一层得出的答案),从而最终得出大问题的答案。 可以用12个字概括: 自顶向下拆解,自底向上求解
注意: 动态规划和分而治之都采用了分治思想,不同的是: 分而治之拆分出来的子问题是离散的,相互之间没有关系; 而 动态规划拆解出来的子问题是具有层级关系的父子问题。 父问题答案=子问题答案+差异部分的答案
\qquad
四、随机化算法传送门:(暂无,后续补上)
\qquad
五、回溯算法传送门:(暂无,后续补上)