`
缥缈孤鸿
  • 浏览: 42014 次
  • 性别: Icon_minigender_1
  • 来自: 大连
最近访客 更多访客>>
社区版块
存档分类
最新评论

基于map-reduce的并行最短路径算法 (转)

阅读更多
一个有向图,由(V,E)组成,其中V是顶点的集合,E为联结各顶点的边,每条边e可能有相应的权重w。

图的表示方式有两种:邻接矩阵和邻接表。其中对于节点数较少的图,用邻接矩阵表示较为方便,计算时也能充分应用矩阵计算的一些优势。但是当节点数特别大,需要借助map-reduce计算时,用邻接表是更为合适的选择。每一行数据,key为NodeId,值为与这个节点邻接的所有节点的AdjacentList(可能还包含了每一个节点的权重)。


有向图的最短路径,即从源点s出发,到达图上任意结点的最短路径。

图论中最经典的最短路径算法即Dijkstra算法,它采用了贪心的策略,利用宽度优先一层层搜索,直到遍历所有结点或已经找到最短路径。算法伪代码如下:

Dijkstra(G,w, s)
    d[s] ← 0
    for all vertex v ∈ V do
        d[v] ← ∞
    Q ← {V }
    while Q != ∅ do
        u ←ExtractMin(Q)
        for all vertex v ∈ u.AdjacencyList do
            if d[v] > d[u] + w(u, v) then
                d[v] ← d[u] + w(u, v)


以下图的例子来说明这个算法:





n1为起始点。首先标记它到自已的距离为0,然后算法把所有节点(n2~n5)加入到优先队列Q中,并标记n1到这些点的距离为∞。

进入循环:

第一次迭代,从Q中取出最近的扩张点n1,找到n1的邻接点n2, n3,并更新到n2, n3的距离分别为10和5。

第二次迭代,从Q中取出最近的扩张点n3,找到n3的邻接点n2, n5, n4,这时发现n1经n3到n2的距离比直接到n2的距离要短,于是更新到n2的距离为8,到n5的距离为7,到n4的距离为14。

第三次迭代,从Q中取出最近的扩张点n5...

当所有点都搜索过后,算法终止,此时已经找到n1到各点的最短距离。

Dijkstra算法关键的一点是优先队列Q(实际实现可以用数组),它保存了全局的从源点出发最近的结点。而map-reduce则无法做到这一点(其实也不是做不到,就是比较麻烦,需要用distributed cache)。




基于map-reduce的并行算法跟Dijkstra算法有点类似,它也基于Dijkstra的迭代思想,伪代码如下:

class Mapper
    method Map(nid n, node N)
    d ← N.Distance
    Emit(nid n,N)                                  //Pass along graph structure [1]
    for all nodeid m ∈ N.AdjacencyList do
        Emit(nid m, d+w)                          //Emit distances to reachable nodes [2]

class Reducer
    method Reduce(nid m, [d1, d2, . . .])
    dmin←∞
    M ← ∅
    for all d ∈ counts [d1, d2, . . .] do
        if IsNode(d) then
            M ← d                                       //Recover graph structure
        else if d < dmin then                  //Look for shorter distance
            dmin ← d
    M.Distance← dmin                        //Update shortest distance
    Emit(nid m, node M)

它每次迭代执行一个map-reduce job,并且只遍历一个节点。在Map中,它先输出这个节点的完整邻接节点数据,即[1]。然后遍历该节点的邻接节点,并输出该节点ID及权重。在Reduce中,对当前节点m,遍历map的输出权重,若比当前的路径值小,则更新。最后输出该节点的路径值及完整邻接节点数据,作为下一次迭代的输入。

实现上有个细节需要注意的是,map的输出有两种类型的数据:邻接节点数据和权重数据,这可以通过一个包装类,并设置一个dataType变量来实现。

当遍历完所有的节点之后,迭代就终止了。

这个实现还有一个小问题就是,不知道完整的最短路径,这可以在[2]中修改一下Map的输出来实现。

下面是一个例子,邻接节点的数据格式为: nodeId --> distance | adj1: w1, adj2: w2...

原始输入为:

n1 --> 0 | n2: 6, n3: 15, n4:20


n2 --> ∞ | n3: 5, n4:8

n3 --> ∞ | n4:2

n4 -> ∞ |




第一次迭代:

Map:

n1 --> 0 | n2: 6, n3: 15, n4:20

n2 --> ∞ | n3: 5, n4:8


n3 --> ∞ | n4:2

n4 -> ∞ |

n2 --> 6
n3 --> 15

n4 --> 20

Reduce:

n1 --> 0 | n2: 6, n3: 15, n4:20

n2 --> 6 | n3: 5, n4:8

n3 --> 15 | n4:2

n4 --> 20 |

第二次迭代:

Map:


n1 --> 0 | n2: 6, n3: 15, n4:20

n2 --> 6 | n3: 5, n4:8

n3 --> 15 | n4:2

n4 --> 20 |

n3 --> 11
n4 --> 14

Reduce:


n1 --> 0 | n2: 6, n3: 15, n4:20

n2 --> 6 | n3: 5, n4:8

n3 --> 11 | n4:2

n4 --> 14 |

第三次迭代:


Map:


n1 --> 0 | n2: 6, n3: 15, n4:20

n2 --> 6 | n3: 5, n4:8

n3 --> 11 | n4:2

n4 --> 14 |

n4 --> 13
Reduce:


n1 --> 0 | n2: 6, n3: 15, n4:20

n2 --> 6 | n3: 5, n4:8

n3 --> 11 | n4:2

n4 --> 13 |

第四次迭代:

Map:


n1 --> 0 | n2: 6, n3: 15, n4:20

n2 --> 6 | n3: 5, n4:8

n3 --> 11 | n4:2

n4 --> 13 |

Reduce:

n1 --> 0 | n2: 6, n3: 15, n4:20

n2 --> 6 | n3: 5, n4:8

n3 --> 11 | n4:2

n4 --> 13 |

迭代终止


分享到:
评论

相关推荐

    基于云计算的大规模交通路网的最短路径算法.pdf

    总之,基于云计算的大规模交通路网最短路径算法,通过利用MapReduce并行编程模型,实现了并行搜索方法,大大提高了大规模交通路网最短路径计算的效率和准确性。这项技术的发展和应用,对于提升智能交通系统的整体...

    单源最短路径算法(MapReduce)源代码

    通过以上分析,我们了解到该源代码实现了一个基于MapReduce框架的单源最短路径算法,适用于大规模图数据的处理。通过将问题分解为Map和Reduce阶段,并利用Hadoop提供的分布式计算能力,该算法能够高效地解决单源最短...

    MapReduce实现单元最短路径算法.doc

    《MapReduce实现单元最短路径算法》 MapReduce是一种分布式计算模型,常用于处理大数据集。在本文档中,我们探讨了如何利用MapReduce来解决图论中的单元最短路径问题。单元最短路径问题旨在寻找图中从一个源节点到...

    08-图算法-21

    3. 单源最短路径算法:Dijkstra算法、Floyd-Warshall算法等,用于计算从一个源节点到所有其他节点的最短路径。 4. 所有节点间的最短路径:Floyd-Warshall或Johnson算法。 5. 最小生成树算法:Prim算法、Kruskal...

    高性能计算与云计算实验三报告.docx

    - **最短路径算法**: - 应用Map/Reduce实现Dijkstra算法或Floyd-Warshall算法来求解图中最短路径问题。 - Map阶段负责处理图的顶点,Reduce阶段更新顶点的距离信息。 - **并行矩阵乘法**: - 包括简单并行算法...

    一种基于Hadoop的大规模图最短路径查询方法

    标题:“一种基于Hadoop的大规模图最短路径查询方法”描述了研究论文的主要内容,即提出一种新的大规模图最短路径查询方法,该方法是基于Hadoop平台来实现的。在大数据环境下,对大规模图数据进行最短路径查询是一个...

    MapReduce求解物流配送单源最短路径研究

    否则,重复Map和Reduce过程,直至找到最短路径。 此外,文章还提供了MapReduce算法的伪代码,清晰展示了Map和Reduce阶段的处理逻辑。Map阶段主要负责处理节点,当节点颜色为1时,生成新的中间结果;Reduce阶段则...

    MapReduce下的Dijkstra并行算法研究.pdf

    Dijkstra算法是一种经典的单源最短路径算法,广泛应用于网络路由、图形理论等领域。其基本思想是从源节点开始,逐步扩展最短路径树,直到到达所有其他节点。在单机环境下,Dijkstra算法的时间复杂度为O(V^2),其中V...

    Ch5-MapReduce算法设计1

    - 图算法并行化:如最短路径、最小生成树等。 - 聚类分析:文档聚类、图聚类等,用于发现数据的内在结构。 - 相似性比较:比较字符序列、文档、图或数据集的相似度。 - 机器学习和统计模型:如决策树、SVM、最大...

    MIT算法导论公开课之课程笔记 21.高级课题、并行算法(二).rar

    5. **图算法并行化**:包括并行Dijkstra算法、Floyd-Warshall算法等,用于解决图的最短路径问题和所有对之间的最短路径问题。 6. **分布式计算**:讨论如何在多台机器上分布计算任务,如PVM(Parallel Virtual ...

    大数据之数据挖掘课程:海量数据集挖掘 11-图论 graphs1 共54页.pdf

    - 最短路径问题 - **应用场景**:社交网络分析、路由优化、生物信息学等。 - **示例**:HITS 算法介绍 - **目标**:找到高质量的权威网页(Authority)和专家网页(Hub)。 - **原理**: - 权威网页是指含有有用...

    高性能计算与云计算-教学大纲.pdf

    分布式大规模数据处理部分,主要讲解Map/Reduce编程模型,包括其原理、工作机制以及基于Map/Reduce的并行算法设计。学生应掌握Map/Reduce的负载均衡和容错机制,以及如何实现最短路径等算法。 云存储部分,课程介绍...

    华南理工大学云计算试卷.pdf

    以上是对云计算试卷中涉及知识点的详细解释,包括MapReduce、Hadoop、分布式文件系统、并行算法、排序算法、最短路径计算以及并行计算性能分析等。这些知识点都是云计算领域的重要组成部分,对于理解和应用云计算...

    基于MapReduce和多目标蚁群算法的制造云服务动态选择算法.pdf

    蚁群算法通过模拟蚂蚁群体在寻找食物过程中释放信息素,并依赖信息素来指导后续蚂蚁的移动,从而寻找最短路径。 多目标蚁群算法是在蚁群算法的基础上发展起来的,它不仅能够寻找单个最优解,还能够同时求解多个目标...

    大数据之数据挖掘课程:海量数据集挖掘 05-聚类算法 clustering 共53页.pdf

    - 最短路径问题:寻找两点间最短路径的方法。 #### 11. 大规模机器学习(Large Scale Machine Learning) - **定义**:在海量数据上训练机器学习模型的技术。 - **关键技术**: - 分布式训练:利用多台计算机并行...

    大数据基础算法10节

    图算法在社交网络分析、网络路由等领域有广泛应用,如PageRank、社区检测算法和最短路径算法。本节将阐述如何在大数据环境下实现这些图算法。 第9节:深度学习与神经网络 随着计算能力的增强,深度学习成为大数据...

    Java并发编程实践.pdf

    此外,还有处理树和图的算法,如连接组件、生成树、最短路径和图着色等。 4. **原子操作和STM(软件事务内存模型)**:Amino还支持原子操作和软件事务内存模型,这是并发编程中处理复杂更新操作的重要工具,可以...

Global site tag (gtag.js) - Google Analytics