算法设计技巧——贪婪算法、分治算法、动态规划算法、随机化算法和回溯算法(未完待续)

tech2024-06-16  60

系列文章目录

(一)引论——为后续章节搭建一个学习平台


(二)算法分析——时间复杂度的分析法则及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

五、回溯算法

传送门:(暂无,后续补上)

最新回复(0)