[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和《算法导论》