MapReduce解决图N步是否可达问题

输入:
起始点集
结束点集
边集


问题:
求从起始点集到结束点集n步可到的边信息


输出:
连接起始点到结束点的边集


case:
起始点集
(1,4) 
结束点集
(5, 6)
边集
(1-2,2-4,4-6,1-7,2-7,7-3,3-5,2-5)


构造起始数据
iter_1 = start=(1-s,4-s)
边集加入反向边
edges=(1-2,2-1,2-4,4-2,4-6,6-4,1-7,7-1,2-7,7-2,7-3,3-7,3-5,5-3,2-5,5-2)
构造结束数据
end=(5-e,6-e)
迭代1
(iter_1 union edges).group_by_key = 
({
1:(1-s,1-2,1-7), 
2:(2-1,2-4,2-7,2-5),
3:(3-7,3-5),
4:(4-s,4-2, 4-6),
...
7:(7-1,7-2,7-3)
})
过滤掉不包含起始结点的组:
({
1:(1-s,1-2,1-7),
4:(4-s,4-2,4-6)
})
同组内不含s的边是新发现的边,包含s的是已经迭代出来的边,将新发现的结点加入到已经迭代边的首部,这里为了去掉环,还要对新发现的结点判断是否在该迭代的边中。如果在,则说明有出现环了,新结点就不用加入。
iter_2 = (2-1-s, 7-1-s, 2-4-s, 6-4-s)
输出一步可达结果
(iter_2 union end).group_by_key = ({
2:(2-1-s,2-4-s),
6:(6-4-s,6-e),
7:(7-1-s)
})
过滤掉不包含起始和结束结点的组
({
6:(6-4-s,6-e)
})

那么就可以得到一步有e-6-4-s这条边信息。


重复以上迭代流程就可以得所有起点结点和结束结点连接信息。


时间复杂库O(N) * c ,c为迭代次数,不包括集群内部的shuffle和sort复杂度
空间复杂,O(max(结点度数))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值