在图中查找长度为k的派系

时间:2015-06-02 15:32:55

标签: python networkx clique-problem

我正在使用~200个节点和~3500个边缘的图表。我需要找到这张图的所有派系。使用networkx' enumerate_all_cliques()适用于最多100个节点的较小图形,但是对于较大的节点而言内存不足。

  

"然而,希望这种算法不会耗尽内存       因为它只将候选子列表保存在内存中       不断删除耗尽的子列表。" source code for enumerate_all_cliques()

为了节省内存,是否有办法返回长度为k的所有派系的生成器而不是所有派系?

1 个答案:

答案 0 :(得分:2)

似乎您的首要任务是节省内存而不是获得所有派系。在这种情况下,使用networkx.find_cliques(G)是一个令人满意的解决方案,因为您将获得所有最大派系(包含给定节点的最大完整子图)而不是所有派系。

我比较了两个函数的列表(子图)的数量:

G = nx.erdos_renyi_graph(300,0.08) print 'All:',len(list(nx.enumerate_all_cliques(G))) print 'Maximal',len(list(nx.find_cliques(G)))

  

全部:6087

     

最大2522

当图表中边缘数量增加时,结果的差异会变宽。