一个有向图,由(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 |
迭代终止
分享到:
相关推荐
总之,基于云计算的大规模交通路网最短路径算法,通过利用MapReduce并行编程模型,实现了并行搜索方法,大大提高了大规模交通路网最短路径计算的效率和准确性。这项技术的发展和应用,对于提升智能交通系统的整体...
通过以上分析,我们了解到该源代码实现了一个基于MapReduce框架的单源最短路径算法,适用于大规模图数据的处理。通过将问题分解为Map和Reduce阶段,并利用Hadoop提供的分布式计算能力,该算法能够高效地解决单源最短...
《MapReduce实现单元最短路径算法》 MapReduce是一种分布式计算模型,常用于处理大数据集。在本文档中,我们探讨了如何利用MapReduce来解决图论中的单元最短路径问题。单元最短路径问题旨在寻找图中从一个源节点到...
3. 单源最短路径算法:Dijkstra算法、Floyd-Warshall算法等,用于计算从一个源节点到所有其他节点的最短路径。 4. 所有节点间的最短路径:Floyd-Warshall或Johnson算法。 5. 最小生成树算法:Prim算法、Kruskal...
- **最短路径算法**: - 应用Map/Reduce实现Dijkstra算法或Floyd-Warshall算法来求解图中最短路径问题。 - Map阶段负责处理图的顶点,Reduce阶段更新顶点的距离信息。 - **并行矩阵乘法**: - 包括简单并行算法...
标题:“一种基于Hadoop的大规模图最短路径查询方法”描述了研究论文的主要内容,即提出一种新的大规模图最短路径查询方法,该方法是基于Hadoop平台来实现的。在大数据环境下,对大规模图数据进行最短路径查询是一个...
否则,重复Map和Reduce过程,直至找到最短路径。 此外,文章还提供了MapReduce算法的伪代码,清晰展示了Map和Reduce阶段的处理逻辑。Map阶段主要负责处理节点,当节点颜色为1时,生成新的中间结果;Reduce阶段则...
Dijkstra算法是一种经典的单源最短路径算法,广泛应用于网络路由、图形理论等领域。其基本思想是从源节点开始,逐步扩展最短路径树,直到到达所有其他节点。在单机环境下,Dijkstra算法的时间复杂度为O(V^2),其中V...
- 图算法并行化:如最短路径、最小生成树等。 - 聚类分析:文档聚类、图聚类等,用于发现数据的内在结构。 - 相似性比较:比较字符序列、文档、图或数据集的相似度。 - 机器学习和统计模型:如决策树、SVM、最大...
5. **图算法并行化**:包括并行Dijkstra算法、Floyd-Warshall算法等,用于解决图的最短路径问题和所有对之间的最短路径问题。 6. **分布式计算**:讨论如何在多台机器上分布计算任务,如PVM(Parallel Virtual ...
- 最短路径问题 - **应用场景**:社交网络分析、路由优化、生物信息学等。 - **示例**:HITS 算法介绍 - **目标**:找到高质量的权威网页(Authority)和专家网页(Hub)。 - **原理**: - 权威网页是指含有有用...
分布式大规模数据处理部分,主要讲解Map/Reduce编程模型,包括其原理、工作机制以及基于Map/Reduce的并行算法设计。学生应掌握Map/Reduce的负载均衡和容错机制,以及如何实现最短路径等算法。 云存储部分,课程介绍...
以上是对云计算试卷中涉及知识点的详细解释,包括MapReduce、Hadoop、分布式文件系统、并行算法、排序算法、最短路径计算以及并行计算性能分析等。这些知识点都是云计算领域的重要组成部分,对于理解和应用云计算...
蚁群算法通过模拟蚂蚁群体在寻找食物过程中释放信息素,并依赖信息素来指导后续蚂蚁的移动,从而寻找最短路径。 多目标蚁群算法是在蚁群算法的基础上发展起来的,它不仅能够寻找单个最优解,还能够同时求解多个目标...
- 最短路径问题:寻找两点间最短路径的方法。 #### 11. 大规模机器学习(Large Scale Machine Learning) - **定义**:在海量数据上训练机器学习模型的技术。 - **关键技术**: - 分布式训练:利用多台计算机并行...
图算法在社交网络分析、网络路由等领域有广泛应用,如PageRank、社区检测算法和最短路径算法。本节将阐述如何在大数据环境下实现这些图算法。 第9节:深度学习与神经网络 随着计算能力的增强,深度学习成为大数据...
此外,还有处理树和图的算法,如连接组件、生成树、最短路径和图着色等。 4. **原子操作和STM(软件事务内存模型)**:Amino还支持原子操作和软件事务内存模型,这是并发编程中处理复杂更新操作的重要工具,可以...