Pregel单源最短路径问题

介绍谷歌Pregel并行图处理系统,基于BSP模型解决大型图分布式计算问题,提供灵活API进行图遍历、最短路径及PageRank计算。通过示例展示单源最短路径求解流程与实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Pregel简介

  • 谷歌公司在2003年到2004年公布了GFS、MapReduce和BigTable
  • 谷歌在后Hadoop时代的新“三驾马车” Caffeine,Dremel和Pregel
  • Pregel是一种基于BSP模型实现的并行图处理系统
  • 为了解决大型图的分布式计算问题,Pregel搭建了一套可扩展的、有容错机制的平台,该平台提供了一套非常灵活的API,可以描述各种各样的图计算
  • Pregel作为分布式图计算的计算框架,主要用于图遍历、最短路径、PageRank计算等等

问题

如图所示,从0到各个顶点的单源最短路径是多少?

100
30
10
50
60
10
60
0
1
2
4
3

Pregrel求解流程

实现代码

class ShortestPathVertex
  : public Vertex<int, int, int> {
 void Compute(MessageIterator* msgs) {
    int mindist = IsSource(vertex_id()) ? 0 : INF;
    for (; !msgs->Done(); msgs->Next())
      mindist = min(mindist, msgs->Value());
    if (mindist < GetValue()) {
      *MutableValue() = mindist;
      OutEdgeIterator iter = GetOutEdgeIterator();
       for (; !iter.Done(); iter.Next())
          SendMessageTo(iter.Target(),
                    mindist + iter.GetValue());
 }
 VoteToHalt();
 }
};
顶点值变化

s0代表第一个超步,依次类推

v_id / v_value01234
初始值infinfinfinfinf
s0末010030inf10
s1末090306010
s3末070306010
各超步产生的消息队列

格式(target_id,edge_value)

  • s0:   (1,100)   (2,30)   (4,10)
  • s1:   (1,90)  (3,90)   (3,60)
  • s2:   (1,70)
     s2后没有消息队列产生,程序执行完毕
结果

节点0到各个顶点的单源最短路径:

1234
070306010
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值