Page 169 - 《软件学报》2020年第11期
P. 169

刘井莲  等:一种基于模糊相似关系的局部社区发现方法                                                      3485


                    输出:节点 v 所在的社区 D.
                    方法:
                    1)   initialize D={v},N=Γ(v);
                    2)   while (N!=NULL)
                    3)      dic={⋅};
                    4)      for any node a∈D
                    5)         for any node b∈N
                    6)            if R(a,b)≥q then
                    7)               dic[(a,b)]=R(a,b);
                    8)            End If
                    9)         End For
                    10)     End For
                    11)     if (dic==NULL)
                    12)        break;
                    13)     else
                    14)       find (x,y) such that R(x,y) is maximum;
                    15)        D=D∪{y};
                    16)        update N;
                    17)     End If
                    18) End While
                    19) return D;
                    第 1 行初始化局部社区 D 和外壳节点集 N.第 2 行~第 18 行通过最大连通子图的方法寻找局部社区,其中,
                 第 3 行~第 10 行计算 D 中节点与 N 中节点形成边的节点对的隶属度,将隶属度大于等于 q 的边以及该边的隶
                 属度保存到字典类型变量 dic 中;第 11 行~第 17 行选择隶属度最大的边并入连通子图,并更新外壳节点集 N.第
                 19 行返回找到的局部社区 D.
                 2.3   时间复杂度分析
                    本文算法采用整型数据类型来表示网络 G 中的节点,每个节点被赋予一个唯一的整型序号来表示,采用关
                 于节点的哈希表来存储整个网络,每个节点关联了一个向量,向量中存储按照由小到大排序好的邻居节点集.假
                 定网络中节点度的平均值为 k,那么查找任一节点的邻居节点集的时间复杂度为 O(1).计算两个节点 a 和 b 的共
                 同邻居时,采用两个“指针”分别指向 Γ(a)和 Γ(b)遍历求交集的方法,该操作的时间复杂度为 O(2k).
                    由于局部社区发现是在网络中给定节点的周围区域计算,不是建立在整个网络结构的基础上,因此算法的
                 时间复杂度与所得到的社区的规模有直接关系,而不依赖于网络 G 中节点数|V|、边数|E|的大小.算法 1 中,最频
                 繁的操作是第 6 行,计算节点 a,b 的隶属度 R(a,b),该操作的时间复杂度为 O(2k).假定最后得到的社区中节点个
                 数为|D|,则算法在执行过程中需要计算|D|⋅k 条边的隶属度,即第 6 行在整个算法中重复的次数为|D|⋅k.因此,算法
                                  2
                 的时间复杂度为 O(2k ⋅|D|).
                 2.4   实例分析

                                                                                                  [3]
                    为了更加直观地理解本文提出的局部社区发现算法,采用了由 9 个节点和 14 条边组成的小型网络 ,来说
                 明本文算法的计算过程.网络连接情况如图 2 所示,真实社区划分{1,2,3,4}和{5,6,7,8,9}.
                    计算流程:设置阈值 q=0.3,节点 1 作为初始节点,首先将节点 1 加入到局部社区 D 中,即 D={1},节点 1 与其
                 邻居节点 2~节点 4 的模糊关系隶属度 R(1,2)=0.5,R(1,3)=0.667,R(1,4)=0.333,均大于阈值 q,选择隶属度最大的节
                 点 3 加入到 D 中,即 D={1,3}.计算 D 内节点与其邻居节点 2、节点 4 的模糊关系隶属度 R(1,2)=0.5,R(3,2)=0.5,
   164   165   166   167   168   169   170   171   172   173   174