Graph

转载请注明出处:http://blog.csdn.net/a1dark

近段时间学了一些图论总结如下:

图的遍历、DFS与BFS的灵活运用

AOV网络拓扑排序判环
AOE网络寻找关键路径
最小生成树就是并查集的运用和kruskal算法(其实就是对边贪心)、prim算法(对点贪心)、由于贪心对象的不同、所以一个适用于稀疏图、一个适用于稠密图、就是看(N)点多还是(M)边多
最大生成树的话其实就是反向
最短路主要理解dijkstra算法、spfa算法、floyd算法、dijkstra算法时间复杂度比较低但是不适用于负权和判环、SPFA算法理论时间复杂度比较高、但实际效果非常好、如果再加点优化、基本不可能被卡、floyd算法时间复杂度非常高、但是有点是可以算出任意点间的距离、对于缩点和强连通的重新构图帮助很大、floyd还可以算最小环、根据DP的特性、相当于考虑了所有可能的解、
最短路衍生出来就是次短路、次短路有两种做法、一种是删边的思想、叫曹氏删边法、另一种是求K短路、K=2就是次短路、K算路需要用到启发式搜索(A*算法)、那个估价函数我现在还没搞清楚、
跟最短路有关的就是差分约束系统了、这个简单的还是比较简单、就是把不等式建成路、然后求最短路或者最长路、难点在于建图
欧拉回路和汉密尔顿回路我只记得一些结论、
然后就是各种概念了、支配集、覆盖集、独立集、咋一看感觉好多好难、慢慢发现其实都是相通的、举个简单的例子、求最小点覆盖、可以转化为求最大匹配数、于是一个KM就搞定(匈牙利算法)、比如强连通分量一般就会和缩点扯上关系、以为缩点可以将一个有许多强连通分量重新构成一个DAG、然后求解、
反正转化过来转化过去、核心思想就是KM和tarjan、主要变化以及建图比较困难、
最后不得不说的就是网络流了、其实前面说的那些东西大多数都可以用网络流来做、比如自己建立虚拟的源点和汇点然后求最大流或者最小费用流等等、
网络流比较有效的方法便是Dinic算法和SAP/ISAP算法、别的东西还是自己融会贯通、多看多琢磨、
总而言之、言而总之、图论不是为了考你那些个算法而出题的、更重要的是考验你的建图能力和思维能力、

就想那些大牛所说的、ACM带给你的不是学会了多少算法、而是增强了你的思考能力以及解决问题的能力、


你可能感兴趣的:(小结)