为什么在Python中使用networkx查找3cliques的结果不正确?

2024-10-04 07:24:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用networkx的find_cliques方法查找所有3个集团。然而,结果显示,应该远远不止2个。请帮我弄清楚原因。在

import networkx as nx
G = nx.Graph()
edges_fig_4 = [('a','b'),('a','c'),('a','d'),('a','e'),
           ('b','c'),('b','d'),('b','e'),
           ('c','d'),('c','e'),
           ('d','e'),('e','d'),
           ('f','b'),('f','c'),('f','g'),
           ('g','f'),('g','c'),('g','d'),('g','e')]
G.add_edges_from(edges_fig_4)
cliques = nx.find_cliques(G)
cliques3 = [clq for clq in cliques if 3<=len(clq)<= 3]

print(cliques3)

Tags: 方法importnetworkxasfig原因find集团
1条回答
网友
1楼 · 发布于 2024-10-04 07:24:50

根据文档,find_cliques返回所有最大的集团。在您的例子中,有大于3(abcde)(cdeg)的团,您还需要在更大的团中有所有可能的3-组合。这是因为一个集团的每个子集团也是一个集团,但它不是最大的。在

编辑:你还需要使用集合来避免重叠的派系。在

使用以下代码:

import itertools
cliques3 = set(sum([list(itertools.combinations(set(clq), 3)) for clq in cliques if len(clq)>=3],[]))

或者,使用enumerate_all_cliques也将给出大小(基数)k = 1, 2, 3, ..., maxDegree - 1的团。请参阅此处的文档:http://networkx.github.io/documentation/development/reference/generated/networkx.algorithms.clique.enumerate_all_cliques.html

相关问题 更多 >