数学推导与算法
握手定理:度之和等于两倍边数
无向简单图中,,于是 每条无向边 在矩阵中出现两次(),所以右端恰为 。一个直接推论是:奇数度节点的个数必为偶数(偶数个奇数相加才能得到偶数 )。有向图中每条边 只出现一次,相应地 。用关联矩阵也可以一行证明: 的每一列恰有两个 1,所以 全部元素之和既等于 (按列加),也等于 (按行加)。
Euler 判据
一条“每条边恰好经过一次”的路线称为欧拉路径(Eulerian path);起点与终点相同时称为欧拉回路。沿路线行走时,除起点和终点外,每经过一个节点都是“进一次、出一次”,消耗该节点的两条边,因此中间节点的度必须为偶数;只有起点和终点可以是奇数度。于是连通(多重)图存在欧拉路径的必要条件是:奇数度节点数为 0(此时存在欧拉回路)或 2。可以证明,这一条件对连通图也是充分的。七桥图 4 个节点的度为 5、3、3、3,奇数度节点有 4 个,因此不存在欧拉路径;若再加一座连接两个奇数度陆地的桥,奇数度节点数降为 2,欧拉路径即存在(见代码示例)。
充分性(Hierholzer 的构造)。设连通图所有节点度为偶数。从任一节点出发沿未用过的边随意行走:每进入一个节点就消耗它的一条边,由于度为偶数,除非回到起点,总有未用的边可以离开,所以行走必然在起点结束,得到一个回路 。若 未用完所有边,由连通性, 上必有某个节点 还连着未用的边;从 出发重复同样的过程得到另一个回路,并把它在 处“拼接”进 。剩余边构成的子图中每个节点度仍为偶数,因此可以一直重复,直到所有边用完。若恰有两个奇数度节点 ,临时加一条边 – 后得到欧拉回路,再删去这条边即得欧拉路径。
算法 2 Hierholzer 算法(欧拉回路)
输入:所有节点度为偶数的连通图 G;输出:欧拉回路(节点序列)
1. stack ← [任一有边的节点];circuit ← []
2. while stack 非空:
3. v ← stack 顶部
4. if v 还有未用的边 (v, u):
5. 标记该边已用;把 u 压入 stack
6. else:
7. 弹出 v,追加到 circuit
8. return circuit 的逆序
每条边只被标记一次,每个节点进出栈的次数与其度成正比,复杂度为
。NetworkX
中对应 nx.eulerian_circuit 与
nx.eulerian_path。
游走计数: 的组合意义
对 归纳。 时 是长度 1 的游走数。设结论对 成立,则 每条从 到 、长度 的游走都唯一地分解为“从 到某个 的长度 游走”加上“边 ”,对所有可能的倒数第二个节点 求和即得。三角形 ––– 作为闭游走会被每个顶点作为起点计一次、每个方向计一次,共计 次,所以三角形数为 。
拉普拉斯矩阵的性质
(1) 。。 时每条与 相关的边贡献 ,合计 ; 时只有连接 的那条边贡献 。这与边方向的选取无关。同理,无定向关联矩阵满足 。
(2) 二次型。由 (1), 因此 半正定,特征值非负。
(3) 零特征值的重数等于连通分支数。若 ,则 ,即每条边两端 ,于是 在每个连通分支内是常数。反之,每个分支的指示向量都满足 。所以零空间恰由 个分支的指示向量张成,维数为 。
(4) 迹。。
从边列表构造邻接矩阵
算法 1 边列表 → 邻接矩阵(无向图)
输入:节点列表 V(固定顺序),边列表 E;输出:N×N 矩阵 A
1. idx ← 节点到行号的映射;A ← N×N 零矩阵
2. for (u, v) in E:
3. A[idx[u], idx[v]] ← 1;A[idx[v], idx[u]] ← 1 # 有向图只写前一项
4. return A
稠密邻接矩阵需要 存储,边列表或稀疏矩阵只需要 。对 的稀疏网络,计算度(行和)的代价也从 降到 。
从边列表构造 CSR 稀疏矩阵
算法 3 边列表 → CSR(有向图;无向图把每条边按两个方向各写一次)
输入:已编号的边 (u_e, v_e),e = 1..M;输出:indptr(长 N+1)、indices(长 M)
1. count[i] ← 以 i 为起点的边数(一次遍历边列表)
2. indptr[0] ← 0;indptr[i+1] ← indptr[i] + count[i] # 前缀和
3. pos ← indptr 的副本
4. for e = 1..M: indices[pos[u_e]] ← v_e;pos[u_e] ← pos[u_e] + 1
5. return indptr, indices
两次遍历,时间与空间都是
。节点
的度就是 indptr[i+1] - indptr[i],无需再扫描。
二分图的加权投影
设药物–靶点二分图的关联矩阵为 ( 表示药物 作用于靶点 )。则 的非对角元正是药物 与 共享的靶点数,可作为投影后药物–药物网络的边权;对角元 是药物 的靶点数。投影到靶点一侧则取 。投影会丢失信息:不同的二分图可能投影出同一张单模网络。
投影网络的边数可以远大于二分网络:一个连接 个药物的靶点会在药物投影中贡献 对共享关系,所以投影的总“共享对”数为 ,由靶点度的二阶矩主导。少数被大量药物作用的靶点(高 )会让投影网络变得很稠密。