外存图算法之单源最短路径的MapReduce算法

单源最短路径单机版的经典MapReduce算法是Dijkstra算法。算法每次沿着一个中间顶点遍历这个图,根据到源点的距离确定优先级。在算法运行过程中维护一个堆,每次取堆顶的顶点进行计算,这里没有并行化,因为每次取堆顶的元素,相当于沿着一个顶点进行计算。

Dijkstra算法考察每个顶点u,从而可以确定在堆顶的点可以安全删除,这是一个贪心算法。对应这一个过程,在并行算法进行的过程中,对每个顶点w考察所有前驱引起的源点到w最短距离的变化,根据Dijkstra算法的性质,在第i轮生成距离源的路径包含i条边的结点到源点的最短路径。

算法描述

初始化:

输入:图G(困中结点集合V,边权值邻接表E)

输出:建立键值对,(键:当前结点v的IDv,值:(源结点u到现结点v路径长度初始化为∞,u到v最短路径上前一个结点ID初始化为null,结点v的邻接表,二元组集合{<结点v可直接到达的后继结点IDsuccnode-ID,该边权值edge-cost>}))

过程:

for each v in V do

    输出<.id,(co,null,(sucenode-ID,edge-cosl})>

迭代过程:

Map函数

输入:(键:结点ID,值:(源点到该结点的当前最短路径长度dist,当前具有最小开销的前驱结点next,当前结点的邻接表,二元组集合P=(<结点可直接到达的后继结点ID suc-node-ID,该边权值edge-cost>)))

输出:(键:可达结点ID,值:(源到该结点的当前最短路径长度dist,当前最短路径上的前一个结点ID))

过程:

 for each<succnode-ID,edgecost>in P do

    输出suc-node-ID,(<ID,distance+edgecost>);//计算路径权值累加,更新distance

Reduce 函数

输入:(键:结点ID,值:S=(源点到该结点的当前最短路径长度dist,当前其有最小开销的前驱结点next))

输出:(键:结点ID,值:(源点到该结点的当前最短路径长度dist,当前具有最小开销的前驱结点next,当前结点的邻接表,二元组集合<结点可直接到达的后继结点IDsuccnode-ID,该边权值edge-cost>))

过程:

distance=∞

fnext=NULL

for each(dist,next)∈S do

    if dist < 当前ID记录的dist then

        distance=dist

        fnext=next

给出(ID,<dislance,nert,{<suc-node-ID,edgecost>}>)

迭代终止条件:两轮MapReduce的结果不发生变化;或者设定迭代次数

过程分析

  • 开始对于每个有唯一标记ID的结点v,mapper输人的键值对中键是ID,值是一个多元组(dist,next,<succnode-ID,edge-cost>})

  • 接下来在map阶段,对输入的每个对应键值对为(ID,<dist,next,1<succnode-ID,edge-cost>}>)的结点,需要得到的结果包括要传送它的下一个邻居w的ID,还有它本身记录的到源结点的最短路径加上边(v,u)的长度

  • 在map阶段传送每个结点υ的ID、它到源的路径以及它的邻接表。经过mapper和reducer之间的分组,就可以将经过上一轮前驱得到的源点到w的新路径长度和源到w之前的路径长度相比较选出最小的。

  • reducer传出来的信息包括每个点v的ID,上一轮选出来的源点到v的最短路径开销,以及源点到v最短路径上v的前驱。相当于在reducer里面进行选择。在map阶段要传送当前计算出的源点到w的最短路径开销,过程不断重复,一直到计算出的源点到v的最短路径不发生变化。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大数据在不论在研究还是工程领域都是热点之一,算法大数据管理与计算的核心主题。本课程试简要介绍大数据计算中涉及到的基本算法设计方法。适用于大数据研究与开发人员,也适用于数据科学爱好者。 大数据算法这门课程旨在通过讲授一些大数据上基本算法设计思想,包括概率算法、I/O有效算法和并行算法,让听课的同学们接触到和传统算法课程不一样的算法设计与分析思路,并且以最新的研究成果为导向,让参与这门课程学习的同学了解大数据算法的前沿知识。通过这门课程的学习,同学可以掌握大数据算法设计的基本思想,掌握大数据算法设计与分析的技术。 【课程目录】 第1章 大数据算法概述 大数据的定义与特点 大数据算法 大数据算法设计与分析 第2章 亚线性算法概述 亚线性算法的定义 水库抽样—空间亚线性算法 平面直径—时间亚线性计算算法 全0数组判定—时间亚线性判定算法 第3章 亚线性算法例析 数据流中频繁元素 最小生成树 序列有序的判定 第4章 外存算法概述 外存存储结构与外存算法 外存算法示例:外存排序算法 外存数据结构示例:外存查找树 第5章 外存查找结构 B树 KD树 第6章 外存数据算法 表排序及其应用 时间前向处理方法 缩法 第7章 基于MapReduce的并行算法设计 MapReduce概述 字数统计 平均数计算 单词共现矩阵的计算 第8章 MapReduce算法例析 连接(Join)算法 算法 第9章 非MapReduce的并行算法设计 基于迭代处理平台的并行算法 基于处理平台的并行算法 第10章 众包算法 众包的定义 众包的实例 众包的要素 众包算法例析

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值