Python 从NetworkX图中查找连接组件内的子图

Python 从NetworkX图中查找连接组件内的子图,python,graph,networkx,connected-components,network-analysis,Python,Graph,Networkx,Connected Components,Network Analysis,我构建了一个NetworkX图,其中包含50000个节点和大约1亿条边。我使用nx.connected_components(G)方法列出了该组中所有连接的组件。这种方法导致我拥有节点集群,这样每个节点都有一条路径可以到达该集群中的每个其他节点。现在我想要的是,在每个连接的组件中,我想要找到子图/子簇,这样每个子图都通过一条边相互连接。NetworkX中是否有我可以直接使用的方法,或任何其他方式来完成此任务?对不起,我对图论很陌生,所以需要一点指导。你想要的就是所谓的图论。使用networkx可

我构建了一个NetworkX图,其中包含50000个节点和大约1亿条边。我使用nx.connected_components(G)方法列出了该组中所有连接的组件。这种方法导致我拥有节点集群,这样每个节点都有一条路径可以到达该集群中的每个其他节点。现在我想要的是,在每个连接的组件中,我想要找到子图/子簇,这样每个子图都通过一条边相互连接。NetworkX中是否有我可以直接使用的方法,或任何其他方式来完成此任务?对不起,我对图论很陌生,所以需要一点指导。

你想要的就是所谓的图论。使用
networkx
可以这样做:

import networkx as nx
import matplotlib.pyplot as plt
G = nx.Graph()
G.add_edges_from([(1,2), (1,3), (2,3), (4,5), (4,6), (5,6)])
nx.draw(nx.minimum_spanning_tree(G), with_labels=True)
plt.show()
然而,我有点怀疑
networkx
是否能够根据需要在如此多的边缘上执行。我已经在
igraph
上测试了
connected components
算法,它对我也很有效(当然,速度更快),因此您可能还想寻找基于
igraph
的解决方案

结果

你想要的东西叫什么。使用
networkx
可以这样做:

import networkx as nx
import matplotlib.pyplot as plt
G = nx.Graph()
G.add_edges_from([(1,2), (1,3), (2,3), (4,5), (4,6), (5,6)])
nx.draw(nx.minimum_spanning_tree(G), with_labels=True)
plt.show()
然而,我有点怀疑
networkx
是否能够根据需要在如此多的边缘上执行。我已经在
igraph
上测试了
connected components
算法,它对我也很有效(当然,速度更快),因此您可能还想寻找基于
igraph
的解决方案

结果

如果我理解正确,那么对于每个子图,您希望找到大小为1的所有边,即如果去掉这些边,您希望找到所有边,将该图划分为两个子图。这些边被调用,并且有高效的算法来找到它们。networkx中的实现可通过
networkx.algorithms.bridges.bridges
访问

如果我理解正确,那么对于每个子图,您希望找到大小为1的所有边,也就是说,如果去掉这些边,您希望找到所有边,将该图划分为两个子图。这些边被调用,并且有高效的算法来找到它们。networkx中的实现可通过
networkx.algorithms.bridges.bridges
访问