输入:
起始点集
结束点集
边集
问题:
求从起始点集到结束点集n步可到的边信息
输出:
连接起始点到结束点的边集
case:
起始点集
构造起始数据
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 =
({
过滤掉不包含起始结点的组:
({
同组内不含s的边是新发现的边,包含s的是已经迭代出来的边,将新发现的结点加入到已经迭代边的首部,这里为了去掉环,还要对新发现的结点判断是否在该迭代的边中。如果在,则说明有出现环了,新结点就不用加入。
iter_2 = (2-1-s, 7-1-s, 2-4-s, 6-4-s)
输出一步可达结果
(iter_2 union end).group_by_key = ({
过滤掉不包含起始和结束结点的组
({
时间复杂库O(N) * c ,c为迭代次数,不包括集群内部的shuffle和sort复杂度
空间复杂,O(max(结点度数))
起始点集
结束点集
边集
问题:
求从起始点集到结束点集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(结点度数))