1. 引言
根据Laplace谱确定的Fiedler向量进行的图划分是一种有效的图分割方法[1],它基于图的特征值分解和Fiedler向量的特性,是网络分析及其应用有效研究方法之一。Laplace能量在图论、信号处理、图像处理等多个领域也具有广泛的应用前景。因此,深入研究Laplace谱与图能量及其关系对于推动相关领域的发展具有重要意义。
图的笛卡尔乘积方法是由Sabidussi在1957年和1960年提出的一种重要的构图方法,它是从已知图构造更大图的有效手段,也是网络设计的一种核心手段。基于笛卡尔乘积互连网络的谱对于研究图论之所以重要,主要在于可以用其计算图的诸多不变量,如特征值及其重数等关键参数。在文献[2]-[6]中,对于一些著名的互连网络谱的研究,如(广义)超立方体、折叠超立方体、增广超立方体的(拉普拉斯)谱等,虽然给出了特征值,但并未得到相应重数。而本文利用其公式进行了具体证明研究,如互连网络
的邻接谱、拉普拉斯谱和能量公式,我们先给出环网
和星图
的定义,利用公式,得到并证明研究
的邻接谱和Laplace谱,并对其顶点进行了划分,再利用互连网络
的特征谱,计算得到了其能量。
下面给出本文所需的一些定义符号。
2. 基本概念
定义1 [2] 环网
是无向图,是循环无向图
,也是Cayley图。
Cayley图Star网络
,对于给定的
Star网络
,是如下Cayley图
,
是集合
上的对称群,
即为图
,环网
与Star网络的笛卡尔乘积互连网络表示为
。
根据定义,互连网络
有如下性质:
1)
有
个顶点、
条边。
2)
是
正则的连通图。
为了方便,互连网络
可用如下二元n序列来定义。
设有
的顶点为①,②,
,ⓝ
ⓘ
,
的顶点为
,当且仅当jⓘ有且仅有一个坐标不同。具体示例如下图1。
定义2 [3] 设G是一个简单图,
是对应的邻接矩阵。由特征多项式
的解构成所有特征值集合,称为图G邻接矩阵的谱,记作
。
其中
,为特征值,
为特征值对应的重数。
Figure 1. Interconnection network
and interconnection network
图1. 互连网络
和互连网络
定义3 [3] 设L是Laplace矩阵,由
,以及特征方程
的解构成所有特征值的集合,称为Laplace谱,记作
。
其中D与A分别是与L同阶的对角矩阵。矩阵D的对角线上的元素为对应的正则度,矩阵A为邻接矩阵。
定义4 [4] [5] 邻接谱能量为
、Laplace谱能量为
。
为了完成结论的证明,先给出下述的三个引理。
为其对应的邻接矩阵。如:
,
经观察易得图
的邻接矩阵
为
。一般地,图
的邻接矩阵
为
。
引理 1 Star网络
的邻接矩阵为
,邻接谱为表1。
证明:Star网络
的邻接谱为
,当
,得到
(重数为
),
(重数为1),
(重数为1)。
同样地,据文献[6] Star网络
、环网
的邻接谱如表1、表2:
Table 1. Adjacency spectrum of Star network
表1. Star网络
的邻接谱
m |
特征值 |
重数 |
3 |
|
1, 1, 1 |
4 |
|
1, 1, 2 |
5 |
|
1, 1, 3 |
6 |
|
1, 1, 4 |
|
|
|
m |
|
1, 1, m − 2 |
Table 2. Adjacent spectrum of ring network
表2. 环网
的邻接谱
n |
特征值 |
重数 |
3 |
2, −1 |
1, 2 |
4 |
3, −1 |
1, 3 |
5 |
4, −1 |
1, 4 |
6 |
5, −1 |
1, 5 |
|
|
|
n |
n − 1, −1 |
1, n − 1 |
引理2 [1] 设图G和图H的特征根分别是
和
,则笛卡尔乘积图的特征值为
,其中
。
引理3 [3] 已知图的邻接矩阵为A,邻接谱
,
正则度为
,则它的Laplace谱为
3. 互连网络
的谱
本节主要刻画互连网络
的邻接谱和Laplace谱。进一步,根据Laplace矩阵的Fiedler向量对
进行了图划分。
3.1.
的邻接谱
引理2.1 在图
中:当n与m共同改变时,图
的邻接矩阵可表示为
,这是一个n阶分块对角矩阵,其中,
是Star网络
的邻接矩
阵,而
与
分别是与
同阶的分块单位矩阵和零矩阵。
定理2.2 对于给定的n与m
中,互连网络
的邻接谱为
证明:对于给定的n与m
中,Star网络
的特征值为:0,
,
,重数分别为
,1,1环网
的特征值为:
,−1重数分别为1,
。
由引理2,得到
的特征值为
,
,
,
,−1,
。其重数分别为1,
,1,
,
,
综上所述,
的谱
通过利用定理2.2我们可以很容易的得到一些维数较低的互连网络的邻接谱。如:
3.2.
的Laplace谱
根据引理3,互连网络的Laplace谱实际上是由网络的邻接谱的特征值与其正则度经过逐项相加确定的,且对应特征值的重数不变。因此,互连网络
的Laplace谱特征有如下结论:
定理2.3 互连网络
的Laplace谱为
证明:根据定义性质,互连网络
的正则度为
,邻接矩阵特征值为
,
,
,
,−1,
。
由引理3可知:
通过利用定理2。3我们可以很容易的得到一些维数较低的互连网络的Laplace谱。如:
3.3.
的顶点划分
与Laplace谱的第二小特征值相关的特征向量(称为Fiedler向量)可用于对图划分。为此,我们根据第二小特征值的Fiedler向量中的正负值对应的顶点划分,将互连网络
的顶点划分为两部分。根据Fiedler向量的值较大的顶点通常是图中的关键节点,去掉这些节点会显著影响图的连通性,如去掉这些关键节点会导致电力网络的断开,从而影响电力供应。
算法如下:
算法2.4
输入:互连网络
的邻接矩阵A
计算度矩阵
,
计算L的特征值与特征向量
记
为L的第二小特征值
记
为
对应的特征向量
对所有
若
则
若
则
输出:两个顶点集合
和
例1 互连网络
的顶点划分。
解:根据上述算法2.4,我们设计了顶点划分程序代码(见附录),得到了互连网络
的顶点划分集
和
,其中集合
是指互连网络
的Fiedler向量中正值对应的顶点,集合
是指互连网络
的Fiedler向量中负值对应的顶点。具体对应顶点如下:
集合
:
集合
:
4.
的能量
根据两个能量的定义公式,由上节得到的谱特征值,下面我们重点分类讨论邻接谱能量、Laplace谱能量并得其能量公式。
4.1. 邻接谱能量
根据定义4,邻接谱的能量公式为
,
为邻接谱特征值,再由定理2.2,互连网络
的邻接谱为
,我们可以得到互连网络
的邻接谱特征值和重数并代入邻接谱的能量公式
,有互连网络
的邻接谱能量为
已知
。下面分情况讨论:
1) 当
,即
2)
,即
由上述讨论,我们得到如下定理:
定理3.1 1) 当
,
2) 当
,
4.2. Laplace谱能量
根据定义4,Laplace谱能量为
,
为Laplace谱特征值,再根据定理2.3互连网络
的Laplace谱为
,我们可以得到互连网络
的Laplace谱特征值和重数并代入Laplace谱的能量公式
,有
Laplace谱能量为
已知
,
为
,故有
。下面分情况讨论:
1) 当
时,
4) 当
时,
若
,即
,则有
若
,即
,则有
由上述讨论,我们得到如下定理:
定理3.2
当
,
当
,
。
附 录
顶点划分程序代码:
import numpy as npimport networkx as nxfrom scipy.sparse import csr_matrixfrom scipy.sparse.linalg import eigsh def create_node_index_map(graph): return {node: idx for idx, node in enumerate(graph.nodes())} def laplacian_matrix(graph, node_index_map): n = len(node_index_map) row, col, data = [], [], [] for u, nbrs in graph.adjacency(): u_idx = node_index_map[u] degree_u = len(nbrs) for v in nbrs: v_idx = node_index_map[v] row.append(u_idx) col.append(v_idx) data.append(-1.0) row.append(u_idx) col.append(u_idx) data.append(degree_u) return csr_matrix((data, (row, col)), shape=(n, n), dtype=float) def fiedler_vector_from_laplacian(L): eigvals, eigvecs = eigsh(L, k=2, which='SM') return eigvecs[:, 1].real def partition_graph_by_fiedler_vector(fiedler_vec, node_index_map): partition = {+1: set(), -1: set()} for node, idx in node_index_map.items(): sign = np.sign(fiedler_vec[idx]) partition[sign].add(node) return partition n = 4 m = 3 C = nx.cycle_graph(n) S = nx.star_graph(m) G = nx.cartesian_product(C, S) node_index_map = create_node_index_map(G) L = laplacian_matrix(G, node_index_map) fiedler_vec = fiedler_vector_from_laplacian(L) partition = partition_graph_by_fiedler_vector(fiedler_vec, node_index_map) print("图的顶点划分结果:")for sign, nodes in partition.items(): print(f"集合 {sign}: {nodes}")
NOTES
*通讯作者。