平均度与密度
由握手定理
立即得到
。无向简单图最多有
条边,故
。
ER 网络度分布的泊松极限
节点
的度是
次独立伯努利试验(成功概率
)的成功次数,故
。令
固定、,对固定的
:
其中用到
()。合起来得到泊松分布
,其均值与方差都等于
。这一近似要求
,对稀疏网络总是成立。
最大度与最小度
令
满足
。泊松分布在
时随
快速下降,和式由首项主导:,可用对数与
Stirling 公式数值求解。同理
给出
。由于泊松分布在均值附近近似正态,
与
同阶,相对偏离
随
增大而减小。
ER 网络的聚集系数
节点
有
个邻居,邻居对共
个。在
中,每一对邻居之间是否有边与
的连边独立,概率均为
,于是
,。
ER 网络的平均路径长度
见小世界性与平均距离:由
得
;有限规模修正为
(Fronczak
等 2004)。
巨连通分支的自洽方程
写法一(Barabási 书进阶专题 3.C)。记
为不在巨分支中的节点比例。节点
经由某个特定节点
连到巨分支失败,有两种情况:、
无边(概率
),或有边但
不在巨分支中(概率
)。
不在巨分支中,当且仅当经由其余
个节点都失败:
取对数并用
、:,即
,也就是
写法二(生成函数)。记
为“沿一条边到达的节点不通向巨分支”的概率。节点不在巨分支中,当且仅当它的所有邻居都不把它连到巨分支:。对泊松分布,沿边到达的邻居剩余度仍服从均值
的泊松分布,
满足同样的方程,于是
,结果相同。这种写法可直接推广到任意度分布(配置模型)。
临界点。
总是一个解。非零解存在的条件是右端函数在
处的斜率大于
1:。临界点附近展开
,代入得
。数值上可用不动点迭代
求解(见代码示例)。
分支大小分布
亚临界与临界状态下,从一个节点出发的探索近似为后代数服从泊松()的
Galton–Watson 分支过程。用 Lagrange 反演(或 Borel 分布)可得总后代数为
的概率
。代入
Stirling 公式
:
时指数部分为
,。代码示例在
的临界网络上验证:、、
的模拟值 0.368、0.137、0.074 与理论值 0.368、0.135、0.075 吻合。
完全连通区的阈值
在
较大时,巨分支已包含几乎所有节点,网络是否连通取决于是否还有孤立节点。一个节点孤立的概率
,孤立节点的期望数
。令
得
,即
。
广度优先搜索的伪代码与复杂度
算法 1 BFS 求单源距离(无权图)
输入:图 G,源点 s;输出:dist(s 到各可达节点的距离)
1. dist ← {s: 0};队列 Q ← [s]
2. while Q 非空:
3. v ← Q.popleft()
4. for u in 邻居(v):
5. if u 不在 dist 中:
6. dist[u] ← dist[v] + 1;Q.append(u)
7. return dist
每个节点入队、出队各一次,每条边在两端各被检查一次,总代价
。对全部节点各做一次得到所有点对距离,代价
。加权网络中改用以优先队列实现的
Dijkstra 算法,单源代价
,要求边上的“长度”非负,因此相关系数等“强度型”权重需先转换为长度(如
或
)。
Brandes 介数算法
关键观察:定义源点
对节点
的依赖度
,则
,且依赖度满足递推
其中
是
到
的最短路径上
的前驱节点。
算法 2 Brandes 介数(无权图)
对每个源点 s:
1. BFS:dist[s]=0,σ[s]=1;访问 v 的邻居 w 时,
若 w 首次被发现则 dist[w]=dist[v]+1 并入队;
若 dist[w]=dist[v]+1,则 σ[w] += σ[v],把 v 加入 pred[w]。
把出队顺序记入栈 S。
2. 回溯:δ ≡ 0;当 S 非空,弹出 w,
对每个 v ∈ pred[w]:δ[v] += σ[v]/σ[w]·(1+δ[w]);
若 w ≠ s:C_B[w] += δ[w]。
无向图最后把 C_B 除以 2。
每个源点的两个阶段都是
,总代价
(稀疏图),远优于朴素方法的
。代码示例中的手写实现与
NetworkX 结果之差在
量级。
谱类中心性的幂迭代与收敛条件
- 特征向量:。把初值按特征向量展开
,则
,归一化后其他分量以
衰减。二部图中
也是特征值,简单幂迭代会振荡,可改用
。
- Katz:。Neumann
级数
收敛当且仅当
。
- PageRank:,
为列随机矩阵。迭代映射是压缩映射,误差每步至少乘以
,收敛到
只需约
步,与网络规模无关。
- HITS:交替执行
、
并归一化,等价于对
与
做幂迭代。若主特征值不唯一(网络由多个互不相连的部分组成),结果依赖初值。
每次迭代只需一次稀疏矩阵–向量乘法,代价
。
k 核分解
算法 3 核数(Batagelj–Zaversnik 思想)
1. 计算所有节点的度,按度放入桶中;k ← 0
2. 重复直到所有节点被删除:
3. 取当前度最小的节点 v;k ← max(k, deg(v));core[v] ← k
4. 删除 v,把每个未删除邻居的度减 1 并移到相应桶中
每个节点删除一次,每条边导致一次度减少,用桶结构维护最小度,总代价
。“”保证核数单调不减:当剩余图的最小度为
时,剩余图本身就是 k 核。