社区发现算法专题之 GN算法

本文介绍了介数的概念及其在图论中的重要性,阐述了如何计算节点和边的介数,并详细讲解了Girvan-Newman社区发现算法的步骤、模块度的计算以及算法优缺点。通过使用NetworkX工具包,演示了在Python中实现介数计算和社区检测的过程。
摘要由CSDN通过智能技术生成

图论基础:

何为“介数”(Betweenness)?

百度百科:介数通常分为边介数和节点介数两种:

  1. 节点介数定义为网络中所有最短路径中经过该节点的路径的数目占最短路径总数的比例。

    公式描述:节点的“介数中心性” (Betweenness Centrality)
    KaTeX parse error: Expected group after '_' at position 13: C_B(v)=\sum_̲\limits{s \neq …
    其中,

    σ s t \sigma_{st} σst是从节点 s s s 到 节点 t t t 的最短路径总数;

    σ s t ( v ) \sigma_{st}(v) σst(v)是其中通过节点 v v v的路径数量。

  2. 边介数定义为网络中所有路径中经过该边的路径的数目占最短路径总数的比例。

从直观上看,介数反映了节点作为中间“桥梁 ”的重要程度,介数反映了相应节点或者边在整个网络中的作用和影响力,是一个重要的全局几何量,具有很强的现实意义。

如何计算介数?

为了简化公式,定义一个中间变量代表 pair-dependency 为

KaTeX parse error: Expected group after '_' at position 68: …则 C_{B}(v)=\sum_̲\limits{s \neq …

引入记号,
P s ( v ) = { u ∈ V : { u , v } ∈ E , d G ( s , v ) = d G ( s , u ) + ω ( u , v ) } P_{s}(v)=\left\{u \in V:\{u, v\} \in E, d_{G}(s, v)=d_{G}(s, u)+\omega(u, v)\right\} Ps(v)={ uV:{ u,v}E,dG(s,v)=dG(s,u)+ω(u,v)}
用来表示从节点 s s s到节点 v v v的最短路径中 v v v的前驱节点集。

也可以认为 如果从 s → v s \to v sv 的最短路径包含边 ( u , v ) (u,v) (u,v) ,那么 u u u 属于这个集合。

根据上述关系,我们不难发现

对 于 ∀ s ≠ t , 有 下 面 的 关 系 成 立 σ s v = ∑ u ∈ P s ( v ) σ s u 对于 \forall s \ne t,有下面的关系成立\\ \qquad \sigma_{s v}=\sum\limits_{u \in P_{s}(v)} \sigma_{s u} s=t,σsv=uPs(v)σsu

对于上式可以理解为: s → v s\to v sv 的最短路径必然先从 s → u s\to u su,再通过边 ( u , v ) (u,v) (u,v)到达 v v v,其中 u u u v v v的前驱节点。

  • 对于无权图,调用广度优先算法BFS,在时间复杂度 O ( m ) O(m) O(m)的时间内算出 { σ s t ∣ t ∈ V } \{\sigma_{st}|t\in V\} { σsttV}
  • 对于有权图,调用Dijstra算法,时间复杂度为 O ( m + n l o g n ) O(m+nlogn) O(m+nlogn)

为什么选择 BFS?

  • BFS在遍历节点时的顺序恰好是按照距离节点 s s s的距离升序排列,而且节点 u u u v v v的前驱节点必然要求 d ( s , u ) <

  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值