图论基础算法

[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和《算法导论》
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值