我有一个带有m
特定源和n
特定终端节点的大型无向图,我想检查所有终端之间是否存在连接。答案是二进制标量,即如果所有源都连接到所有终端则为1,如果存在未连接的源和终端则为0。
对于单源单端连接,我可以使用Networkx检查连接(基于DFS算法):
has_path(G, source, target)
检查m
- 源n
- 终端连接的最简单方法是使用m+n-1
个独立的DFS运行(使用上面的函数)。但是,这可能不是执行任务的最有效方式,如果我们想要重复执行此任务(例如,数百万个图表),则速度会很慢。什么是最有效的算法?所需的DFS运行的最小数量是多少?我正在使用Python,我更喜欢使用Networkx来执行连接检查。谢谢!
答案 0 :(得分:1)
我认为对无向图执行此操作的最佳方法是使用networkx的node_connected_component命令查找与您的某个源节点相同的组件中的所有节点。然后检查所有目标节点和源节点是否也在该组件中。
node_connected_component返回1.11中的列表和2.0中的集合。进行测试的最佳方法可能是查看与该组件集相交的源和目标集是否等于源和目标集。