图算法总结
来源:互联网 发布:织梦cms增加前台模块 编辑:程序博客网 时间:2024/06/04 08:34
图算法大体无非两种,广度优先搜索和深度优先搜索。
BFS的应用包括求最短路径,如Dijkstra算法;求最小生成树,如prim和kruskul算法。
它们最大的目标就是求得一颗最小树,或最短路径,或最小生成,总之都是树。
树,最大的特征就是无环。
广度优先搜索BFS:
Dijkstra算法和catch the cow有异曲同工之妙,前者是凡是选过的点(每轮的dist最小的)的dist值就无法更改(没被选过的点其dist值就有变化的可能)——用visit数组标记,后者是踩过的点就不能再踩(避免重复入队,做无用功)——用visit数组标记。这可以保证是无环的——因为不会产生后向边。
注意:没被选过的点其dist值就有变化的可能——每个点的dist值总有定型的时候,那么这个点此时就与最后那个使它dist的值改变的点相连(也唯一与它相连),抛弃前一个使它改变的点而不再与之相连。这保证了不会有不同的路径到达同一个顶点。
仔细分析上图的Dijkstra算法运行过程,就可以发现选择的策略是如何保证无环的——凡是选择过的都被标记,其dist值不可更改!
Dijkstra算法的每个顶点的dist是累计值,表示从源点到此顶点的累加距离,这也是最短距离。而prim算法的每个顶点的 dist 则表示从其前驱到此顶点的距离,
至于kruskul算法只要保证一条边的两个顶点不在同一集合中(如果两个顶点在同一集合中,就抛弃这条边,选择次小边),就可以保证结果无环,又因为每次选择的边都是当前最小的,所以可以保证结果的最小生成树也是正确的。
补充:无权最短路径问题——它是通过用队列和未被发现的结点的dist 用正无穷标记 来保证结果无环的,凡是结点的dist不再是正无穷,就说明已被访问过,从而入队,且其dist值此后一直不可改变(因为只有在入队的时候其dist 值才是改变的),这正是广度优先搜索的最典型应用!
Bellman-Ford算法是通过不断松弛来求最短路径的,而Floyd-Warshall 是动态规划的思想——最优子结构。
另外值得注意的是,Floyd-Warshall 的初始矩阵非相连边是初始化为正无穷还是负无穷,要看求的是最短路径还是最长路径!!!
- 图算法总结---Bellman_Ford算法
- 图算法总结----Kruskal算法
- 图算法总结---Prime算法
- 图算法总结
- 图算法总结
- 图 算法总结
- 图算法总结
- 图算法总结
- 图算法总结
- 图论算法总结
- 图算法总结
- 图算法总结
- 图类算法总结
- 图算法12之图算法总结
- 图算法总结——Dijkstra算法
- <算法4>第四章图算法总结
- 二分图匹配算法总结
- 关于图算法的总结
- How to Learn a Machine Learning Algorithm by Jason Brownlee on January 11, 2014 in Uncategorized
- 将字符串中的字符反向排序;
- 验证身份证号是否正确
- Android源码分析--MediaServer源码分析(二)
- Alipay Direct Bankpay 支付宝网银支付 (For OpenCart 2.x)
- 图算法总结
- 搭框架遇到的一些问题
- Android最佳实践之UI篇
- CentOS下设置FreeSWITCH自启动
- horizonview security server ssl 证书注意事项
- URAL 1500. Pass Licenses 枚举+位运算
- 开博客
- 智能卡的发展以及射频电子标签所处位置
- 数字字符转换为整数并返回这个整数