贪心算法FN具体步骤如下所述:
(1)去掉网络中所有的边,网络的每个节点都单独作为一个社区;
(2)网络中的每个连通部分作为一个社区,将还未加入网络的边分别重新加回网络,如果加入网络的边连接了两个不同的社区,即合并了两个社区,则计算形成的新的社区划分的模块度的增量。选择使模块度增长最大或者减小最少的两个社区进行合并;
(3)如果网络的社区数大于1,则返回步骤 (2) 继续迭代,否则转到步骤 (4);
(4)遍历每种社区划分对应的模块度的值,选取模块度最大的社区划分作为网络的最优划分。
import networkx as nx
import matplotlib.pyplot as plt
import sys
sys.path.append('./')
class FN:
def __init__(self,G):
self.G = G
self.G_copy = G.copy()
self.edges = [n for n in self.G.edges] #把网络中的所有边保存在edges中
#print(self.edges)
self.G.remove_edges_from(self.edges) #将网络G中的所有图删除
self.temp_q = {} #存放每一轮的加入边后ÿ