首先,我必须承认我不擅长图论。
我有一个弱连接的有向图G=(V,E)
,其中V
约为1600万,而E
约为1.8亿。
对于给定集合S
,它是V
的子集(S
的大小约为30),是否有可能找到弱连接的子图G'=(V',E')
,其中S
是V'
的子集,但尝试保持V'
和E'
的数量尽可能小?
我当前的解决方案是在S
中找到每对顶点的最短路径,并将这些路径合并以获得子图。结果还可以,但是运行时间非常昂贵。
是否有更好的方法来解决此问题?
如果您对当前方法的结果感到满意,那么至少可以更快地完成它:
将S中的每个顶点分配给不连续集合数据结构中的集合:https://en.wikipedia.org/wiki/Disjoint-set_data_structure。然后:
另一种考虑做完全相同的事情的方式: