我有一个超过 90000 个节点的网络。我想检查它是否有 5 个或更多成员的派系(=其中每个节点都连接到该集合的所有其他节点的节点集)。NetworkX 库中是否有一个命令可以为我的网络返回所有此类集团?
我试过了
cliques = list(networkx.enumerate_all_cliques(G))
但由于网络的规模,运行时间是不可接受的,这就是为什么我想设置 5 个或更多成员的阈值,这有望减少运行时间,因为将考虑更少的派系。
以下应该有效:
import networkx as nx
# Create a random graph.
G = nx.erdos_renyi_graph(100, .2, seed=0)
# iterate over cliques and keep only those with len(clique) >= 5
cliques = [clique for clique in nx.enumerate_all_cliques(G) if len(clique) >= 5]
根据文档,enumerate_al_cliques
返回一个迭代器:
返回迭代器
派系的迭代器,每个派系都是 G 中的节点列表。派系根据大小排序。
因此,使用上述解决方案,您只能记住那些拥有 5 个或更多成员的人。