基于最短路径算法的社区发现算法-Gewman and Girvan算法)

Girvan and Newman(GN)算法通过边介数识别社区结构,删除高边介数边以分裂网络。算法包括计算边介数、删除最大边介数边、重新计算直至网络形成独立社区。其核心是利用最短路径计算边介数,并基于边介数矩阵进行社区识别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于最短路径算法的社区发现算法-Gewman and Girvan算法)

重要概念

边介数(betweenness):网络中任意两个节点通过此边的最短路径的数目。

GN算法的思想:在一个网络之中,通过社区内部的边的最短路径相对较少,而通过社区之间的边的最短路径的数目则相对较多。下图中展示了变得强度以及边介数在现实网络中的分布情况。GN算法是一个基于删除边的算法,本质是基于聚类中的分裂思想,在原理上是使用边介数作为相似度的度量方法。在GN算法中,每次都会选择边介数高的边删除,进而网络分裂速度远快于随机删除边时的网络分裂。

GN算法的步骤如下:
(1)计算每一条边的边介数;
(2)删除边界数最大的边;
(3)重新计算网络中剩下的边的边阶数;
(4)重复(3)和(4)步骤,直到网络中的任一顶点作为一个社区为止。

GN算法示例:
在这里插入图片描述
实现想法:
(1)用最短路径算法求出任意两点间的最短路径
(2)借用最短路径算出每条边的边介数,也就是创建一个节点数*节点数的二维矩阵,然后只要有最短路径通过某条边,此边的二维矩阵中的边介数加1
(3)遍历整个边介数矩阵,找出最大的边介数的边的值
(4)将所有等于此边介数的边的值赋值为无穷大(也就是断开这条边)
(5)找出所有的社团,并计算模块系数Q
(6)如果模块系数Q大于某个q值(一般在0.3到0.7之间),结束算法,输出所有的社团,否则从(1)再次执行
代码:
最短路径算法人尽皆知,不再展示,算出的最短路径存储在一个二维的AarryList或者二维的Stack中均可。


					//求出各边的边介数,Stack中存储的是最短路径
                    while (stack.size() > 1) {
   
                        int q = stack.pop();
                        int b = stack.peek();
                        edge[q][b]++;
                        edge[b][q]++;
                    }
                    stack.pop();
 		//找出最大边介数
        for (int q = 0; q < edge.length; q++) {
   
            for (int b = 0; b < edge.length; b++) {
   
                if (temp < edge[q][b]) temp = edge[q][b];
            }
        }

        //将边介数最大的边的权值设为无穷大
        for (int q = 0; q < edge.length; q++) {
   
            for (int b = 0; b < edge.length; b++) {
   
                if (temp == edge[q][b]) {
   
                    graph.edges[q][b] = INF;
                    graph.edges[q
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值