JAVA知识点全总结——(八)算法与数据结构

上一篇:JAVA知识点全总结——(七)设计模式

8. 算法与数据结构

8.1 排序算法

  • 冒泡排序
  • 选择排序
  • 插入排序
  • 希尔排序
  • 归并排序
  • 快速排序
  • 堆排序

8.2 查找算法

  • 遍历查找
  • 二分查找
  • 二叉树查找
  • 红黑树查找
  • 跳表查找

8.3 拓扑排序

对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。 

  • 在有向图中选一个没有前驱的顶点并且输出
  • 从图中删除该顶点和它相连的边
  • 重复上述两步,直至所有顶点输出。

8.4 红黑树

普通红黑树过于复杂,这里采用一种比较简单的左倾红黑树,定义略有不同,实现效果更好。

规定:

  • 所有红链接均为左链接
  • 没有任何一个结点连着两个红链接
  • 该树是完美黑色平衡的

操作:

  • 插入结点的链接颜色均为红色
  • 如果右结点链接为红色,左旋转
  • 如果左节点和左左节点链接均为红色,右旋转
  • 如果同层左右结点链接均为红色,它们同时变黑,父节点变红色
  • 根结点永远设置为黑色,如果由红变黑一次,说明树的高度增加

8.5 动态规划

动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。

基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。

由于动态规划解决的问题多数有重叠子问题这个特点,为减少重复计算,对每一个子问题只解一次,将其不同阶段的不同状态保存在一个二维数组中。与分治法最大的差别是:适合于用动态规划法求解的问题,经分解后得到的子问题往往不是互相独立的(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)。

  • 最优化原理:如果问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理。
  • 无后效性:即某阶段状态一旦确定,就不受这个状态以后决策的影响。也就是说,某状态以后的过程不会影响以前的状态,只与当前状态有关。
  • 有重叠子问题:即子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用到。(该性质并不是动态规划适用的必要条件,但是如果没有这条性质,动态规划算法同其他算法相比就不具备优势)

8.6 搜索算法

8.6.1 深度优先搜索

深度优先搜索是从一个点开始,标记所有与之相邻的点,然后选择其中的一个进行遍历重复上一步,这样遍历的点相对于原点的距离越来越大,直到不能遍历为止,退回到上一个节点,再遍历上一个节点的其他节点。

8.6.2 广度优先搜索

广度优先搜索是先遍历开始节点的所有节点,再根据所有节点遍历下一层的所有节点,一层层进行遍历。

下一篇:JAVA知识点全总结——(九)系统业务开发

你可能感兴趣的:(java,一周一篇Java概念)