最近工作中遇到的关于图连通的问题,感觉有些棘手。
假设给定的边如下(其中 abcdefgh 都是图的结点):
a, b
c, d
a, c
b, e
f, g
h, g
正确的连通结果如下:
a, b, c, d, e
f, g, h
我的问题是:
给定结点、边,是否存在一种通用的、分布式的图连通(无向图)算法?最好可以用 MapReduce/Spark 实现。
个人感觉不存在,这个算法应该需要迭代进行。可能还不如单机做。
Spark GraphX 是分布式的,应该很容易就能做这个,不知道是怎么做的呢?
如果用单机做,有什么高效的图连通算法?
我粗略想了一种时间复杂度 O(n) 的算法( n 是图中结点个数)。
大致思路是:对每个子图(这里就是一条条边)里的结点建倒排,然后按结点值 group by,建两个 map (一个存放各个子图的连通状态,另一个存储最终结果),用类似于并查集的方式做。
数据结构里图论掌握的比较浅,诚心求教。
谢谢大家。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.