【离散数学】图论 第七章(3) 图的矩阵表示(邻接矩阵、可达矩阵、传递闭包求解算法)

本文深入探讨离散数学中的图论概念,阐述邻接矩阵如何表示有向图,并通过实例解释其在计算路径和判断连通性中的作用。此外,介绍了可达矩阵及其在识别强分图和计算传递闭包中的应用,展示了一种求解传递闭包的快速算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文属于「离散数学」系列文章之一。这一系列着重于离散数学的学习和应用。由于内容随时可能发生更新变动,欢迎关注和收藏离散数学系列文章汇总目录一文以作备忘。此外,在本系列学习文章中,为了透彻理解数学知识,本人参考了诸多博客、教程、文档、书籍等资料。以下是本文的不完全参考目录,在后续学习中还会逐渐补充:

  • 国外经典教材)离散数学及其应用 第八版 Discrete Mathematics and Its Applications Eighth Edition ,作者是 Kenneth H.Rosen ,袁崇义译,机械工业出版社
  • 离散数学 第二版,武波等编著,西安电子科技大学出版社,2006年
  • 离散数学 第三版,方世昌等编著,西安电子科技大学出版社,2013年
  • (经典参考书及其题解)离散数学/离散数学——理论•分析•题解,左孝凌、李为鉴、刘永才编著,上海科学技术文献出版社
  • 离散数学习题集:数理逻辑与集合论分册,耿素云;图论分册,耿素云;抽象代数分册, 张立昂。北京大学出版社


7.3 图的矩阵表示

采用矩阵表示图,便于计算机存储和处理图的信息(只对小图、稠密图有点用),也便于运用代数的方法研究图的性质(这才是重点!),例如,我们可以通过矩阵计算结果,判定图的连通性/可达性等问题。

7.3.1 邻接矩阵

定义7.3.1 G = ⟨ V , E ⟩ G= \langle V, E\rangle G=V,E 是一个线图,结点集合 V = { v 1 , v 2 , … , v n } V = \{ v_1, v_2, \dots, v_n\} V={ v1,v2,,vn} ,令 A ( G ) = [ a i j ] n × n A(G) = [a_{ij}]_{n\times n} A(G)=[aij]n×n ,其中:
a i j = { 1 若 [ v i ,   v j ] ∈ E 0 若 [ v i ,   v j ] ∉ E a_{ij} = \begin{cases} 1 \quad &若[v_i,\ v_j] \in E\\ 0\quad &若[v_i,\ v_j] \notin E \end{cases} aij={ 10[vi, vj]E[vi, vj]/E 则称 A ( G ) A(G) A(G) G G G邻接矩阵 adjacency matrix

【例1】设 G 1 G_1 G1 是有向图、 G 2 G_2 G2 是无向图,分别如图7.3.1(a)和(b)所示,写出 G 1 , G 2 G_1, G_2 G1,G2 的邻接矩阵。

解:
A ( G 1 ) = [ 1 1 0 0 0 0 1 0 1 1 0 0 0 0 1 1 ]   A ( G 2 ) = [ 1 1 1 1 1 0 1 0 1 1 0 1 1 0 1 1 ] A(G_1)= \begin{bmatrix} 1 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0\\ 1 & 1 & 0 & 0 \\ 0 & 0 & 1 & 1 \end{bmatrix} \ A(G_2)= \begin{bmatrix} 1 & 1 & 1 & 1 \\ 1 & 0 & 1 & 0\\ 1 & 1 & 0 & 1 \\ 1 & 0 & 1 & 1 \end{bmatrix} A(G1)=1010101001010001 A(G2)=1111101011011011

当结点编号次序不同时,同一个图所得的邻接矩阵可能不同,但可以通过有限次的行、列变换而得到相同的邻接矩阵(同构的图?)。

通过图的邻接矩阵运算,可以判断图的一些性质。设 G = ⟨ V , E ⟩ G = \langle V, E\rangle G=V,E有向线图 ∣ V ∣ = n |V| = n V=n A A A G G G 的邻接矩阵。

1. A A T AA^T AAT 的元素的意义

可知, b i j = ∑ k = 1 n a i k ⋅ a j k b_{ij} = \displaystyle \sum^n_{k = 1} a_{ik} \cdot a_{jk} bij=k=1naikajk ,如图7.3.2所示,则在 G G G 中恰好有 b i j b_{ij} bij 个结点,从 v i v_i vi v j v_j vj 均有边引出到这些结点 v k 1 , v k 2 , … , v k n v_{k_1}, v_{k_2}, \dots, v_{k_n} vk1,vk2,,vkn 。特别地, i = j i = j i=j b i j b_{ij} bij 表示 v i v_i vi 的出度

2. A T A A^TA ATA 的元素的意义

可知, b i j = ∑ k = 1 n a k i ⋅ a k j b_{ij} = \displaystyle \sum^n_{k = 1} a_{ki} \cdot a_{kj} bij=k=1nakiakj ,如图7.3.3所示,则在 G G G 中恰好有 b i j b_{ij} bij 个结点,以这些结点为始点,既有边引入到 v i v_i vi又有边引入到 v j v_j vj 。特别地, i = j i = j i=j b i j b_{ij} bij 表示 v i v_i vi 的入度

3. A 2 = A × A A^{2} = A\times A A2=A×A 的元素的意义

若有 b i j = ∑ k = 1 n a i k ⋅ a k j b_{ij} = \displaystyle \sum^n_{k = 1} a_{ik} \cdot a_{kj} bij=k=1naikakj ,如图7.3.4所示,则从 v i v_i vi v j v_j vj 长度为 2 2 2 的路有 b i j b_{ij} bij 条。特别地,当 i = j i = j i=j v i v_i vi 到自身长度为 2 2 2 的回路有 b i j b_{ij} bij 条。

对于 A m = A × A × ⋯ × A ⏟ m 个 A ,   m ≥ 1 A^m =\underbrace{ A\times A\times \dots \times A}_{m个A},\ m \ge 1 Am=mA A×A××A, m1 ,有如下结论。
定理7.3.1 G = ⟨ V , E ⟩ G = \langle V, E\rangle G=V,E有向线图,结点集 V = { v 1 , v 2 , … , v n } V = \{ v_1, v_2, \dots, v_n\} V={ v1,v2,,vn} A = [ a i j ] n × n A = [a_{ij}]_{n\times n} A=[aij]n×n G G G 的邻接矩阵, A m = [ a i j ( m ) ] n × n A^m = [a_{ij}^{(m)}]_{n\times n} Am=[aij(m)]n×n ,则 G G G 中从 v i v_i vi v j v_j vj a i j ( m ) a_{ij}^{(m)} aij(m) 条长度为 m m m 的路。
证明 m m m 进行归纳。

  • m = 1 , m = 2 m = 1, m = 2 m=1,m=2 时,由定义和上面的分析可知,显然成立;
  • 设当 m = t   ( t ≥ 2 ) m = t\ (t \ge 2) m=t (t2) 时,命题成立;
  • m = t + 1 m = t + 1 m=t+1 时,由
    A t + 1 = A ⋅ A t = [ a i j ( t + 1 ) ] n × n = [   ∑ k = 1 n a i k ⋅ a k j ( t )   ] A^{t + 1} = A \cdot A^t = [a_{ij}^{(t + 1)}]_{n\times n} =\bigg [\ \sum^n_{k = 1} a_{ik} \cdot a_{kj}^{(t)}\ \bigg] At+1=AAt=[aij(t+1)]n×n=[ k=1naikakj(t) ] a i j ( t + 1 ) = ∑ k = 1 n a i k ⋅ a k j ( t ) \displaystyle a_{ij}^{(t + 1)} = \sum^n_{k = 1} a_{ik} \cdot a_{kj}^{(t)} aij(t+1)=k=1naikakj(t) 。根据邻接矩阵的定义可知, a i k a_{ik} aik 表示结点 v i v_i vi v k v_k vk 的长度为 1 1 1 的路的条数。根据归纳假设知, a k j ( t ) a_{kj}^{(t)} akj(t) 是连接 v k v_k vk v j v_j vj 的长度为 t t t 的路的条数。因此, a i k ⋅ a k j ( t ) a_{ik} \cdot a_{kj}^{(t)} aikakj(t) 表示从结点 v i v_i vi 出发、经过 v k v_k vk 、到达结点 v j v_j vj 的长度为 t + 1 t+1 t+1 的路的条数。
    对所有的 k ∈ { 1 , 2 , … , n } k \in \{ 1, 2, \dots, n\} k{ 1,2,,n} 求和得 a i j ( t + 1 ) = ∑ k = 1 n a i k ⋅ a k j ( t ) a_{ij}^{(t + 1)} = \displaystyle \sum_{k = 1}^n a_{ik} \cdot a_{kj}^{(t)} aij(t+1)=k=1naikakj(t) a i j ( t + 1 ) a_{ij}^{(t + 1)} aij(t+1) 就是从结点 v i v_i vi 到结点 v j v_j vj 的、所有长度为 t + 1 t + 1 t+1 的路的条数。故当 k = t + 1 k = t + 1 k=t+1 时命题也成立。

以上仅给出有向线图的一些基本结论,对于无向线图也有类似结论。

【例2】有向图 G = ⟨ V , E ⟩ G = \langle V, E\rangle G=V,E 如图7.3.5所示,用 G G G 的邻接矩阵计算从顶点 v 3 v_3 v3 v 1 v_1 v1 的所有有向通路 path

解:图 G G G 的邻接矩阵为:
A = [ 0 1 0 0 0 0 1 1 0 1 0 1 1 1 0 0 ] A =\begin{bmatrix} 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 1 \\ 0 & 1 & 0 & 1 \\ 1 & 1 & 0 & 0 \end{bmatrix} A=0001101101000110 A [ 3 ] [ 1 ] = 0 A[3][1] = 0 A[3][1]=0 知(下标从1开始),从顶点 v 3 v_3 v3 v 1 v_1 v1 没有长度为 1 1 1 的通路。再计算 A 2 A^2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

memcpy0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值