各种数据结构的算法用途,总结
1.栈(Stack)
(1)深度优先搜索
(2)表达式求值
2.队列(Queue)
(1)宽度优先搜索
3.并查集
(1)维护无向图的连通性,支持判断两个点是否在同一连通块内,和判断增加一条边是否会产生环
(2)用在求解最小生成树的Kruskal算法里面
3、二叉堆
(1、)堆排序,建立一个堆,每次取出堆顶元素,然后删除堆顶元素,这样得到的序列是有序的
(2、)实现优先队列Priority_queue
4、伸展树
(1、)可以用来实现动态树
5、图的染色
(1、)给地图着色
(2、)数独可以被看作是对给定的图求一种9染色
6、深度优先遍历DFS
(1、)遍历隐式图,求一个可行解/所有解
7、广度优先遍历BFS
(1、)寻找无权图两点间最短距离
(2、)判断图是否为二分图
(3、)遍历隐式图,求解最优解/所有解
8、欧拉路
(1、)图的一笔画问题
9、最短路—Bellman-ford算法 单源最短路
(1、)带负权的最短路
(2、)求解差分约束
10、最短路—Dijkstra算法 单源最短路
(1、)非负权图的最短路径问题
(2、)构造最短路径树
11、最短路—Floyd(弗洛伊德)算法—原理(动态规划)多源最短路
(1、)判断是否有负环
(2、)求图的最小环
12、Prim算法(图——》树)
(1、)生成无向带权连通图的最小生成树
13、Kruskal算法(图——》树)
(1、)生成无向带权连通图的最小生成树
14、二分图*
(1、)求解二分图最大匹配,最大独立集、最小边覆盖
(2、)二分图也可以用来求解有向无环图G的最小路径覆盖:
建立一个新的二分图G’:将原图中的每一个点拆成一个入点A和一个出点A’,原图中的i->j的边变成i’->j’的边
在这个二分图中所求得的最大匹配满足等式:|最小路径覆盖(G)|=|V(G)|-|最大匹配(G’)|
15最大权匹配
(1、)用于求解一些最优化问题
16、稳定婚姻
(1、)求解一些最优分配问题
17、最大闭合子图
(1、)在实际应用中,闭合子图的性质恰好对应了事件之间的必然条件:一个事件必须在其需要的所有的前提都发生的情况下发生