图论专题总结

ACM课程的最后一个专题,图论,其实这个专题还是比较有意思的,不过因为最后课时紧张,讲的也不是很详细。对于图也只是学个皮毛,因为快到期末考试了,题目做的也不是很多,其实还是学的东西不深,后面题目一难就不会做了。

一般图的问题都是根据路径求最小的问题,例如最短路程,最小花费等等。首先是并查集的问题,简单来说就是合并两个不相交的集合,这类题目有两个步骤。查找与合并,查找查的就是属于哪个集合,之后合并。因此做这类题目的时候需要两个函数分别实现查找和合并的功能。例如Problem C,把路连接起来的畅通工程的题就是典型的并查集。

之后是最小生成树的问题,这个问题主要是解决路径带权值的问题。求最小生成树主要有两个算法,prim算法与kruskal算法。对于Prim算法就是任取一个顶点加入生成树;在那些一个端点在生成树里,另一个端点不在生成树里的边中,取权最小的边,将它和另一个端点加进生成树。重复上一步骤,直到所有的顶点都进入了生成树为止。一般prim算法用邻接矩阵存储图,虽然Prim算法很难理解也比较复杂,不过代码重用性很高,只要把图建好,用同一个Prim算法大都能解决。本次专题的Problem A B C D E等都可以用同一个Prim函数解决,唯一有所变动的就是主函数建图的过程以及一些数据类型的变换。对于Kruskal算法思想就是对所有边从小到大排序,依次试探将边和它的端点加入生成树,如果加入此边后不产生圈,则将边和它的端点加入生成树,否则,将它删去。直到生成树中有了n-1条边,即告终止。也就是有点贪心的意思,一般用链表的形式来存储图的数据。

最后一节课讲的内容有点多,吸收不了。一口气讲了4个算法。分别是Bellman-ford算法。spfa算法,dijkstra算法,floyd-washall算法,这几个算法都是为了解决类似,给出两个点求出最短路径的问题。常用的就是dijkstra算法,主要思想设置一个集合S存放已经找到最短路径的顶点,S的初始状态只包含源点v,对viV-S,假设从源点vvi的有向边为最短路径。以后每求得一条最短路径v,…, vk,就将vk加入集合S中,并将路径v,…, vk, vi与原来的假设相比较,取路径长度较小者为最短路径。重复上述过程,直到集合V中全部顶点加入到集合S中。但是他有自身的局限性,就是不能处理负权值。对于负权值的问题用bellman算法,来弥补。spfa算法就是更加优化了bellman算法。总的来说就是

Dijkstra 算法的效率高,但是也有局限性,就是对于含负权的图无能为力。
Bellman-Ford
算法对于所有最短路长存在的图都适用,但是效率常常不尽人意。
SPFA
算法可以说是综合了上述两者的优点。它的效率同样很不错,而且对于最短路长存在的图都适用,无论是否存在负权。它的编程复杂度也很低,是性价比极高的算法。

最后也是最简单的floyd算法,就是用的三重循环看经过某一个节点是不是与不经过他更短。例如Problem I M N。都是用这种算法写的。应为比较简单,理解起来,写起来都很简单。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
amber大牛的图论总结 1. 图论 Graph Theory 1.1. 定义与术语 Definition and Glossary 1.1.1. 图与网络 Graph and Network 1.1.2. 图的术语 Glossary of Graph 1.1.3. 路径与回路 Path and Cycle 1.1.4. 连通性 Connectivity 1.1.5. 图论中特殊的集合 Sets in graph 1.1.6. 匹配 Matching 1.1.7. 树 Tree 1.1.8. 组合优化 Combinatorial optimization 1.2. 图的表示 Expressions of graph 1.2.1. 邻接矩阵 Adjacency matrix 1.2.2. 关联矩阵 Incidence matrix 1.2.3. 邻接表 Adjacency list 1.2.4. 弧表 Arc list 1.2.5. 星形表示 Star 1.3. 图的遍历 Traveling in graph 1.3.1. 深度优先搜索 Depth first search (DFS) 1.3.1.1. 概念 1.3.1.2. 求无向连通图中的桥 Finding bridges in undirected graph 1.3.2. 广度优先搜索 Breadth first search (BFS) 1.4. 拓扑排序 Topological sort 1.5. 路径与回路 Paths and circuits 1.5.1. 欧拉路径或回路 Eulerian path 1.5.1.1. 无向图 1.5.1.2. 有向图 1.5.1.3. 混合图 1.5.1.4. 无权图 Unweighted 1.5.1.5. 有权图 Weighed — 中国邮路问题The Chinese post problem 1.5.2. Hamiltonian Cycle 哈氏路径与回路 1.5.2.1. 无权图 Unweighted 1.5.2.2. 有权图 Weighed — 旅行商问题The travelling salesman problem 1.6. 网络优化 Network optimization 1.6.1. 最小生成树 Minimum spanning trees 1.6.1.1. 基本算法 Basic algorithms 1.6.1.1.1. Prim 1.6.1.1.2. Kruskal 1.6.1.1.3. Sollin(Boruvka) 1.6.1.2. 扩展模型 Extended models 1.6.1.2.1. 度限制生成树 Minimum degree-bounded spanning trees 1.6.1.2.2. k小生成树 The k minimum spanning tree problem(k-MST) 1.6.2. 最短路Shortest paths 1.6.2.1. 单源最短路 Single-source shortest paths 1.6.2.1.1. 基本算法 Basic algorithms 1.6.2.1.1.1. Dijkstra 1.6.2.1.1.2. Bellman-Ford 1.6.2.1.1.2.1. Shortest path faster algorithm(SPFA) 1.6.2.1.2. 应用Applications 1.6.2.1.2.1. 差分约束系统 System of difference constraints 1.6.2.1.2.2. 有向无环图上的最短路 Shortest paths in DAG 1.6.2.2. 所有顶点对间最短路 All-pairs shortest paths 1.6.2.2.1. 基本算法 Basic algorithms 1.6.2.2.1.1. Floyd-Warshall 1.6.2.2.1.2. Johnson 1.6.3. 网络流 Flow network 1.6.3.1. 最大流 Maximum flow 1.6.3.1.1. 基本算法 Basic algorithms 1.6.3.1.1.1. Ford-Fulkerson method 1.6.3.1.1.1.1. Edmonds-Karp algorithm 1.6.3.1.1.1.1.1. Minimum length path 1.6.3.1.1.1.1.2. Maximum capability path 1.6.3.1.1.2. 预流推进算法 Preflow push method 1.6.3.1.1.2.1. Push-relabel 1.6.3.1.1

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值