最近实验室让看一篇论文,研究的是在社交网络中发现动态社区,整个大问题可以分成两个子问题,其中一个子问题就是寻找最稠密子图的问题
最稠密子图问题
给定一个静态图G = (V, E),V是节点的集合,E是边的集合,W是V的一个子集
先讲下求密度的公式:
1 | d(G) = 2*|E|/|V| |
再给出几个概念:
1 | E(W) = {(u,v) ∈ E | u,v ∈ W} |
最稠密子图问题便是找出一个V的子集W,使d(G(W))最大
算法思路
- 迭代删除度数最低的顶点,得到一系列子图
- 找到一系列子图当中密度最大的那个,将其节点和边作为解返回
代码如下, 可以自己设置顶点和边来进行测试:
1 | import copy |