树
-
并查集:
- 并查集的应用:
- 判断连通性、判环
- Kruskal算法=排序+并查集
- 并查集的存储方式
- 逻辑:双亲表示法的树
- 存储:数组
- 并查集的时间复杂度(m为并查集长度)
- find:优化前为 O ( m ) O(m) O(m);优化后为 O ( l o g 2 n ) O(log_{2}n) O(log2n)
- union: O ( 1 ) O(1) O(1)
- 总复杂度:优化前 O ( m 2 ) O(m^2) O(m2);优化后 O ( m ) O(m) O(m)
- 并查集的应用:
-
树、森林、二叉树遍历序列的关系
树 森林 二叉树 先根遍历 先序遍历 先序遍历 后根遍历 中序遍历 中序遍历 关于森林的中序遍历/后序遍历叫法问题:二者指森林的同一种遍历方法,都是先遍历第一棵树的子节点,然后是第一棵树的根节点,然后是第二棵树... 之所以称为中序遍历,是因为要先处理完一棵树再处理另一棵树。
图
- DFS与BFS算法的应用:
- DFS:
- BFS:
- 最短路径
- 有无环(回路)对Dijkstra算法并无影响,但Dijkstra算法不能求解存在负权值边的图;Floyd算法可以求带有负权值边的图,但图中不能存在负权回路(因为带有负权回路的图没有最短路径)
- Dijkstra算法是解决单源最短路径类问题,floyd算法是解决多源最短路径(指图中任意两个顶点之间的最短路径)类问题
- Dijkstra算法属于贪心算法,floyd算法属于动态规划算法
- 判断有向图是否有环(回路)的几种方法:
- 深度优先遍历:若在遍历过程中遇到要访问的节点已在栈中就是有环
- 拓扑排序:找不到拓扑序列必定有环
- 拓扑排序
- 在拓扑排序算法中,为暂存入度为零的顶点可以使用栈,也可以使用队列。(因为只要入了栈/队列,就都是入度为零的,从哪个入度为零的先开始都无所谓)
- 采用深度优先遍历也可实现拓扑排序