图的带宽和带宽最小化问题
我们先从一个简单例子开始。假设你有一张图,每个顶点代表一个任务,每条边代表两个任务之间有依赖关系。现在你想把这些任务按顺序排成一列,但希望相互依赖的任务尽量靠近。这种“靠近程度”的度量就是图的带宽。
第一步:带宽的定义
给定一个无向图 \(G = (V, E)\),其中 \(|V| = n\)。一个标号(labeling)是指一个双射(一一对应)
\[f : V \to \{1,2,\dots,n\} \]
即给每个顶点一个 1 到 n 的不同整数编号。
对于一条边 \(uv \in E\),它的拉伸(stretch)是 \(|f(u) - f(v)|\),即两个端点的标号之差的绝对值。
图 \(G\) 在标号 \(f\) 下的带宽定义为所有边的拉伸的最大值:
\[B_f(G) = \max_{uv \in E} |f(u) - f(v)| \]
图 \(G\) 的带宽(bandwidth)是取所有可能的标号 \(f\) 的最小值:
\[B(G) = \min_{f: V \to [n] \text{ 是双射}} B_f(G) \]
直观上,如果带宽小,说明每条边两端的标号相差不大,即相邻顶点在标号序列中位置相近。
第二步:一个例子
考虑一条路径图 \(P_4\),顶点依次为 \(v_1-v_2-v_3-v_4\)(边是 \(v_1v_2, v_2v_3, v_3v_4\))。
- 标号 \(f(v_1)=1, f(v_2)=2, f(v_3)=3, f(v_4)=4\),则边拉伸分别为 1,1,1,带宽为 1。
- 可以证明 \(B(P_4) = 1\),这是最小的,因为相邻顶点必须标号不同。
对完全图 \(K_n\),任意两个顶点相邻,要使最大拉伸最小,最好把标号均匀散布,但总有一条边连接最小标号 1 和最大标号 n,拉伸为 \(n-1\),所以 \(B(K_n) = n-1\)。
第三步:带宽最小化问题的计算复杂性
带宽最小化问题是:给定图 G 和整数 k,判断是否 \(B(G) \le k\)。这个问题是 NP 完全的,即使对树(最大度 3)也是 NP 难的。因此通常用近似算法、启发式算法或精确指数算法求解。
常见的启发式方法有:
- Cuthill–McKee 算法:常用于稀疏矩阵的行/列重排以减少带宽,是一种广度优先搜索的排序策略。
- 谱排序:利用拉普拉斯矩阵的第二小特征值对应的特征向量(Fiedler 向量)对顶点排序,可得到较小带宽。
第四步:带宽的上下界
- 显然 \(B(G) \ge \Delta(G)\) 不对(反例:星图 \(K_{1,m}\),带宽为 \(\lceil m/2 \rceil\),可小于 m)。
- 一个简单下界:\(B(G) \ge \max_{H \subseteq G} \lceil \frac{|V(H)|-1}{\operatorname{diam}(H)} \rceil\),其中 H 是 G 的连通子图。
- 另一个下界:\(B(G) \ge \max_{i} \min\{i, n-i\}\) 的某种形式(与特征值有关)。
上界:对任意图,存在标号使得 \(B(G) \le n-1\)(平凡),但可以通过算法改进。
第五步:带宽与图参数的关系
- 与路径宽度的关系:对任意图,\(B(G) \le 2\,\text{pw}(G)\),其中 pw(G) 是路径宽度。
- 与树宽的关系:有 \(B(G) \le \operatorname{tw}(G) \cdot (\Delta(G)-1)\) 等不等式。
- 对平面图,带宽可以是 \(O(\sqrt{n})\)。
第六步:应用
带宽概念最初来源于数值线性代数中矩阵的带状存储:图的顶点标号对应矩阵行/列顺序,如果带宽小,矩阵的非零元集中在主对角线附近,可节省存储与计算。
另外,在电路布局、代码优化、网络结构等领域也有应用。
以上是“图的带宽和带宽最小化问题”的基本介绍。需要进一步展开某个细节(如 Cuthill–McKee 算法步骤、带宽的精确计算动态规划方法、与树宽关系的证明等)可以告诉我。