SparkGraphX加权最短路径算法实现
来源:互联网 发布:windows temp环境变量 编辑:程序博客网 时间:2024/05/16 12:28
版本:Spark 1.6
该版本自带的最短路径算法shortestPaths没办法自定义权重(默认每条边的权重都一样),不符合现实生活,比如在地图中计算两个位置的最短路线,要考虑线路的长度,线路的拥堵情况等多方面,所以写了个加权最短路径算法加入距离属性
算法说明:
加权最短路径算法计算所有的顶点到特定点的距离:
1.初始化开始顶点的距离为0,所有其他节点距离设置为无穷大
2. 将当前顶点设为初始顶点
3. 所有与当前顶点相邻的顶点,将距离设置为当前顶点的距离加上将当前顶点连接到该其他顶点的边的长度之和的较小值。
4.将当前顶点标记为已访问
5.迭代停止条件, 如果没有未访问的顶点
6.迭代第三步
代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
准备数据
vertices
(1L, “A”),
(2L, “B”),
(3L, “C”),
(4L, “D”),
(5L, “E”),
(6L, “F”),
(7L, “G”)
edges(边属性是两点间距离)
Edge(1L, 2L, 7.0),
Edge(1L, 4L, 5.0),
Edge(2L, 3L, 8.0),
Edge(2L, 4L, 9.0),
Edge(2L, 5L, 7.0),
Edge(3L, 5L, 5.0),
Edge(4L, 5L, 15.0),
Edge(4L, 6L, 6.0),
Edge(5L, 6L, 8.0),
Edge(5L, 7L, 9.0),
Edge(6L, 7L, 11.0)
用Gephi绘图(后面附赠graph对象生成.gexf文件方法):
步骤:
1.把边和顶点数据加载生成graph对象
2.调用dijkstra方法传入图对象和要算的顶点(本例用的顶点”1L”)
例:
dijkstra(myGraph, 1L)
3.取出顶点,最终的长度在顶点属性的第二个参数
.vertices.map(_._2).collect
结果为每个点到A(“1L”)的最短距离
大家可以根据上面的gephi绘图查看结果(最短距离)是否正确
最短路径算法只需在顶点属性中加一个list记录路径就好,剩下其他的和之前的一样
代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
最终结果
list中记载的是每个顶点到达A(“1L”)的最短路径
.gexf文件生成方式
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
.gexf可用gephi直接使用
- SparkGraphX加权最短路径算法实现
- SparkGraphX加权最短路径算法实现
- SparkGraphX加权最短路径算法实现
- 狄克斯特拉算法,解决加权最短路径问题--python实现
- 有向加权图的最短路径算法-Dijkstra
- 有向加权图的最短路径算法-Prim
- Dijkstra最短路径算法(针对加权有向图)
- 《数据结构实战》-------------------------------------------图论 无加权最短路径算法
- 最短路径算法实现
- 最短路径算法实现
- 拓扑排序+最短路径(无环加权有向图最短路径算法)
- Java邻接表表示加权有向图,附dijkstra最短路径算法
- floyd最短路径算法的实现
- Dijkstra 最短路径算法C#实现
- 最短路径实现(Dijkstra算法)
- A*算法的最短路径实现!
- Dijkstra算法的最短路径实现
- dijkstra最短路径算法C实现
- PHP面向对象编程基本原则
- ButterKnife
- 工厂模式
- Webpack系列专栏文章发布上线了
- 优雅的QSignleton (四) 通过属性器实现MonoSingleton
- SparkGraphX加权最短路径算法实现
- 2018届各大互联网公司校招薪资曝光汇总!!!
- ListView和ScrollView冲突问题解决
- 优雅的QSignleton (五) 优雅地进行GameObject命名
- 区间值比较算法
- Linux下自动化监控内存、存储空间!
- Unity 游戏框架搭建 (十五) 优雅的QChain (零)
- 输出text文件给用户
- typeScript里的循环