[b]邻接表(adjacency lists)[/b]是表示图的标准方法。
如果是稠密图,可以使用[b]邻接矩阵(adjacency matrix)[/b]。
[b]BFS(Breadth First Search)[/b],广度优先搜索
[b]DFS(Depth First Search)[/b],深度优先搜索
[b]Topological sort[/b],拓扑排序
适用条件:有向无圈图
DFS方法:将每一次的遍历放在排序数组的末尾(从后往前插,类似树的后续遍历),重复下去。
BFS方法:
1. 计算每个点的入度,将入度为零的点入队。
2. 取队首元素,更新与其相连的剩余点的入度,将新出现的入度为0的点入队。
3. 重复2直到队列为空。
MST(Minimum Spanning Tree),最小生成树
贪心,适用条件:无向加权图
[b]Kruskal[/b]:找权值最小的边,并且所选的边不产生圈。可利用并查集
[b]Prim[/b]:每次找一个连接生成树的权值最小的新节点。
Single-Source Shortest Path,单源点最短路径,一个顶点到其他顶点的最短路径。
BFS:多用于无权最短路径
[b]Bellman-Ford[/b]:边权值可以为负值,能够判断是否存在负环路,O(VE),很暴力,效率没有Dijkstra好。
1. 对每条边进行|V|-1次Relax操作
2. 如果存在(u,v)∈E使得dis[u]+w<dis[v],则存在负权回路,返回False
[b]Dijkstra[/b]:边权值不可以为负值,每次新扩展一个距离最短的点,O(V^2),据说还可以用菲波那契堆来进行优化。
Relax操作
[img]http://dl.iteye.com/upload/picture/pic/91051/9f2a3bc6-d752-3701-8984-1b85bb217d3f.bmp[/img]
Dijkstra图解
[img]http://dl.iteye.com/upload/picture/pic/91053/9b50cabe-45f2-3eff-b6b3-a3df52f6e9cc.bmp[/img]
All-Pairs Shortest Paths
[b]Floyd-Warshall[/b]:边权可以为负,使用邻接矩阵表示,动态规划的思想,O(V^3)
网络流:一个发点、一个收点,每条边的流量有限制。
最大流问题就是求总流量最大的可行流。
暂时不懂
来自维基、NOCOW和《算法导论》
如果是稠密图,可以使用[b]邻接矩阵(adjacency matrix)[/b]。
[b]BFS(Breadth First Search)[/b],广度优先搜索
[b]DFS(Depth First Search)[/b],深度优先搜索
[b]Topological sort[/b],拓扑排序
适用条件:有向无圈图
DFS方法:将每一次的遍历放在排序数组的末尾(从后往前插,类似树的后续遍历),重复下去。
BFS方法:
1. 计算每个点的入度,将入度为零的点入队。
2. 取队首元素,更新与其相连的剩余点的入度,将新出现的入度为0的点入队。
3. 重复2直到队列为空。
MST(Minimum Spanning Tree),最小生成树
贪心,适用条件:无向加权图
[b]Kruskal[/b]:找权值最小的边,并且所选的边不产生圈。可利用并查集
[b]Prim[/b]:每次找一个连接生成树的权值最小的新节点。
Single-Source Shortest Path,单源点最短路径,一个顶点到其他顶点的最短路径。
BFS:多用于无权最短路径
[b]Bellman-Ford[/b]:边权值可以为负值,能够判断是否存在负环路,O(VE),很暴力,效率没有Dijkstra好。
1. 对每条边进行|V|-1次Relax操作
2. 如果存在(u,v)∈E使得dis[u]+w<dis[v],则存在负权回路,返回False
[b]Dijkstra[/b]:边权值不可以为负值,每次新扩展一个距离最短的点,O(V^2),据说还可以用菲波那契堆来进行优化。
Relax操作
[img]http://dl.iteye.com/upload/picture/pic/91051/9f2a3bc6-d752-3701-8984-1b85bb217d3f.bmp[/img]
Dijkstra图解
[img]http://dl.iteye.com/upload/picture/pic/91053/9b50cabe-45f2-3eff-b6b3-a3df52f6e9cc.bmp[/img]
All-Pairs Shortest Paths
[b]Floyd-Warshall[/b]:边权可以为负,使用邻接矩阵表示,动态规划的思想,O(V^3)
网络流:一个发点、一个收点,每条边的流量有限制。
最大流问题就是求总流量最大的可行流。
暂时不懂
来自维基、NOCOW和《算法导论》
本文介绍图的基本表示方法如邻接表和邻接矩阵,并详细探讨了图算法中的关键概念,包括广度优先搜索(BFS)、深度优先搜索(DFS)、拓扑排序、最小生成树(MST)算法如Kruskal和Prim算法、单源最短路径算法如Bellman-Ford和Dijkstra算法,以及所有顶点间的最短路径算法Floyd-Warshall。
878

被折叠的 条评论
为什么被折叠?



