为什么说 Graph 和 Matrix 是兄弟呢?因为它们有同一个爹!

矩阵的历史我们见识过了,知道 Matrix 一词是由英国(废话,这是英文单词,难道由法国人或者德国人首创吗)数学家西尔维斯特(Sylvester)在 1850 年首次在论文中引入的。

那么,Graph 这个英文单词呢?

1图论简史

上图中两个小岛与河的两岸共有七座桥连通,在每座桥都只能走一遍的前提下,如何才能把这七座桥都走遍呢?

这个就是所谓的柯尼斯堡七桥问题,也是现在小学生玩的一笔画问题的历史来源。

下面简要介绍一下图论的历史。

  • 1735 年,有几名大学生写信给当时正在俄国彼得斯堡科学院任职的欧拉(Euler),请他帮忙解决柯尼斯堡七桥问题。欧拉于 1736 年发表的关于柯尼斯堡七桥的论文被认为是图论历史上的第一篇论文。
  • 该论文发表一个多世纪之后,英国数学家及矩阵代数理论开拓者凯莱(Cayley)研究了一类特定的图,即树。这项研究对理论化学有许多启示,后来图论标准术语的一部分就是来自数学和化学两个领域中的思想融合。
  • 而 Graph 一词由西尔维斯特在 1878 年发表于《自然》的一篇论文《化学和代数》中引入的。他在代数运算和分子图之间作了类比,还给出了图的几何乘法的规则,即用图的乘积构造图。

好了,原来这两个词是由同一个数学家引入的。看来它俩天生是一对好兄弟?

实际上,图和矩阵确实能相互表示,是一对可以互诉衷肠的好兄弟。但既然矩阵这词先出生,本篇就先来看看用矩阵表示图的常见方式。先简单概括下,用矩阵表示图有许多优点,

  • 可以使用代数方法来研究图论;

  • 对矩阵作分析可以得到图的性质;
  • 以矩阵的形式存储和处理图的有关信息。

2图论基本概念

.图(Graph)

定义: 设 是一个有 个节点(顶点)以及 条边的图,通常称为 图,其中

注:

  • 本文只考虑无向图,即边是没有方向的。
  • 在图中,若边 ,则称节点 与节点 相邻接;并说节点 与边 相关联,节点 与边 相关联;若边 和边 有一个共同的端点,则称边 和边 相邻接。
  • 在图中,两端点相同的边称为环;两个节点间如果有多条边,则称为平行边。有平行边的图称为多重图(Multigraph),带环的图称为带环图,没有环也没有平行边的图,称为简单图。

下图所示的三个图分别是简单图、多重图以及带环图。


1 例如,上面的七桥问题可以抽象一下,将陆地和桥分别简化抽象为点和边,


最终转化为如下所示的具有 4 个节点和 7 条边的图。


例 2 图中的边对应桥,意味着在两个节点之间可以,这个可以是物理上走得通,也可以是抽象意义上的通,例如心灵上能够沟通。

假如有四口程序猿,A、B、C 和 D,只会三种语言 Julia、Python 和 R 中的若干种。A 只会 Julia,B 只会 Python,C 只会 R 语言,而 D 精力旺盛,三种语言都会。

那么请问该如何用一个图来表示这几口猿之间的沟通关系呢?假设至少懂同一种语言算作可以沟通。

.通路(Path)

在图论中,图中的通路是指一个由有限或无限条相邻接的边组成的边序列。通路中边的条数称为通路的长度

请指出下图中桔红色粗线条指示的通路及其长度。


.距离(Distance)

图中节点 和 之间最短通路的长度称为 和 之间的距离,记为 。若 和 之间无通路相连,则令 。

3图的矩阵表示

.邻接矩阵(Adjacency matrix)

阶方阵 称为图 的邻接矩阵,其元素 是起点为 终点为 的边的数目。

需要注意的是,邻接矩阵并不唯一,换句话说,它依赖于 中各节点的次序。同一个图,由节点的不同次序可以导出不同的邻接矩阵。然而,图的任何这些邻接矩阵之间可以通过交换行和列的次序来相互转化。因此,我们可以选取给定图的任何一个邻接矩阵作为该图的邻接矩阵。

1 计算下图的邻接矩阵。


根据节点编号,我们计算邻接矩阵的各个元素如下,

     [,1] [,2] [,3] [,4][1,]    0    1    1    1[2,]    1    0    1    1[3,]    1    1    0    0[4,]    1    1    0    0

因此,邻接矩阵为,

2 求下面带环图的邻接矩阵(注意,节点 ② 是带环的)。


根据上面定义,得该图的邻接矩阵为,

注意,这里的一个环在算边数时只算 1。

图的邻接矩阵很好地刻画了图中各节点间的邻接关系,这很有用,但是这里不考虑这点。

我们来看看它作为矩阵,能不能让它参与运算呢?比如,矩阵乘法。我们知道,用矩阵表示线性变换的话,矩阵乘法可以表示变换的复合。

那么问题来了,邻接矩阵可以相乘吗?能的话,相乘又意味着什么呢?实际上,对于一个图,可以用它的邻接矩阵来确定两个节点之间的通路的数目。

我们直接看答案,邻接矩阵可以跟自己相乘,即幂次。

定理 设 为 阶图 的邻接矩阵,其中 ,则矩阵 的 次幂 的元素 等于从 到 的长度为 的通路的总数。

证明 只看核心点,假设 时结论成立,当 时,,因此

与距离的关系 由上面定理可知: 和 之间的距离 是使得 中的元素 不为零的最小正整数 。

.连通矩阵

两个节点间有通路相连则称两个节点连通,否则为不连通。

定义 设 是 阶图,其中,。 阶方阵 称为 的连通矩阵,其元素为

与连通与不连通

用计算机求一个图的连通矩阵并不像求邻接矩阵那样方便,特别是对于比较复杂的图。这里我们给出一个借助于邻接矩阵来求连通矩阵的方法。

根据上面定理可知,对于如下矩阵之和

当 时,若 ,则从 到 的基本通路存在。反之,若 ,则从 到 的基本通路不存在。再考虑到任何顶点 都与自己连通,所以令

将矩阵 中非零元改为 ,零元保持不变,就得到连通矩阵 ,这里 是单位矩阵。

例子 求上文中那个带环图的连通矩阵。

上面已经给出了它的邻接矩阵,

先求出它的幂,然后再按上面的方法求连通矩阵。

最后得到如下连通矩阵,

.关联矩阵(Incidence matrix)

定义 设 是图,则 阶矩阵 称为 的关联矩阵,其元素为

类似于邻接矩阵,关联矩阵依赖于 中各元素的给定次序和 中各元素的给定次序。同样,我们将选取给定图的任何一个关联矩阵作为该图的关联矩阵。

再次看上文中的带环图,它的关联矩阵如下,

其中边的次序为,

下面再看一个简单图的例子,如下图所示,该图由 4 个节点和 4 条边组成。


其关联矩阵为,

关联矩阵的行对应节点,列对应边。

.度矩阵(Degree matrix)

先看一个概念,即节点的度。节点 的度表示和该节点相关联的边的数量,记为 。如果节点处有环,则每一个环与该节点的关联边数记为 2。

我们来看一下七桥问题中的图上节点的度,


图 的度矩阵 是一个对角阵,对角线上的元素为各个节点的度。

例子 再次看上面那个带环图。


它的度矩阵为,

观察一下与邻接矩阵的关系,

发现邻接矩阵中对角线上的元素需要乘以 2,然后每行加起来就得到该行对应的节点的度。

.图拉普拉斯矩阵

对于没有环和平行边的简单图,可以如下定义图上的拉普拉斯矩阵,

即度矩阵减去邻接矩阵。


上面这个图的拉普拉斯矩阵为,

     [,1] [,2] [,3] [,4][1,]    3   -1   -1   -1[2,]   -1    3   -1   -1[3,]   -1   -1    2    0[4,]   -1   -1    0    2

这里主要是展现用矩阵表示图的情况,关于图上拉普拉斯矩阵的更多内容留到后面。

4小结

  • 矩阵可以表示图像(Image),也可以表示图(Graph),此时的矩阵并不像是变换的化身,算是矩阵的另一重身份。

  • 有趣的是,矩阵表示图以后,有时候竟然也能参与矩阵乘法,请弄清楚该运算的意义。

  • 此篇讲了用矩阵老哥表示图老弟的各种方式,下篇我们来看用图反过来表示矩阵。

.相关阅读

矩阵特征值与机器学习 之 谱聚类

GNN 入门系列: 一文入门图神经网络 GNNGNN 入门系列: 直观理解和应用介绍GNN 入门系列: 图卷积网络原来是这么回事

GNN 入门系列: 矩阵的谱与图卷积网络是这样结合的

矩阵对应元素相乘_图网络(GNN)前传 : 图与矩阵的兄弟情结相关推荐

  1. numpy 矩阵与向量相乘_高能!8段代码演示Numpy数据运算的神操作

    作者|王天庆 来源|大数据(ID:hzdashuju) 导读:本文介绍一下在Python科学计算中非常重要的一个库--Numpy. Numpy是Numerical Python extensions ...

  2. numpy 矩阵与向量相乘_有人把NumPy画成了花,生动又形象

    发现有很多想要学习Python却不知道如何下手的朋友,我这里整理了一些关于Python的学习资料,从基础到入门到实战都有!有需要的朋友可以关注并私信"01"免费获取... 创建数组 ...

  3. matlab 判断两个矩阵有元素相等_如何使用MATLAB对Excel中的多参数进行计算?

    THE START MATLAB和Excel这两者之间有着什么样的关系呢?今天我把之前学习以及用到的关于用MATLAB读写Excel数据,并进行计算处理的经验分享给需要的小伙伴.参加过数学建模的这个应 ...

  4. 图神经网络/GNN(三)-基于图神经网络的节点表征学习

    Task3概览: 在图任务当中,首要任务就是要生成节点特征,同时高质量的节点表征也是用于下游机器学习任务的前提所在.本次任务通过GNN来生成节点表征,并通过基于监督学习对GNN的训练,使得GNN学会产 ...

  5. 矩阵连乘 动态规划_如何构建移动营销时代的“动态矩阵”?

    如何规避全链路营销中出现的顾此失彼的问题呢?本文将为大家分析解决这个问题的三个动态矩阵--营销渠道矩阵(媒体矩阵).创意矩阵和活动矩阵. 前段时间写了一篇"全链路营销"相关的文章, ...

  6. CS224W 02-Properties of NetWorks, Random Graph Models 图网络特征,随机图模型

    02-Properties of NetWorks, Random Graph Models 文章目录 02-Properties of NetWorks, Random Graph Models 2 ...

  7. MarkDown图床助手: 截图-传图-生成url 一步到位

    简介 现在markdown越用越频繁了, md好用是好用, 但就是贴图片的时候有些麻烦: 要截图->上传图片->复制图片url, 于是做了个简单的工具: 截图->传图->生成图 ...

  8. python二维元素向量_详解python Numpy中求向量和矩阵的范数

    在python Numpy中求向量和矩阵的范数实例 np.linalg.norm(求范数):linalg=linear(线性)+algebra(代数),norm则表示范数. 函数参数 x_norm=n ...

  9. python列表对应元素相乘_关于python:如何对两个列表进行元素明智的相乘?

    我想执行元素明智的乘法,将两个列表按值在Python中相乘,就像我们在Matlab中可以做到的那样. 这就是我在Matlab中要做的. 1 2 3a = [1,2,3,4] b = [2,3,4,5] ...

  10. python列表对应元素相乘_在python中,将两个列表中的每个元素相乘

    我的任务是仅使用基本的python函数(而不是numpy)生成以下列表.以下是我所有的代码:#1.Create a list which contains i^2 with i = 1 through ...

最新文章

  1. 事务默认的传播属性和事务默认的隔离级别
  2. ssl2331OJ1373-鱼塘钓鱼 之3【dp】
  3. 详解CorelDRAW中如何合并与拆分对象
  4. 随心所欲的DateTime显示格式
  5. 湖北文理学院学位计算机考试,湖北文理学院学位计算机考试试题答案.doc
  6. 思考 | 西湖大学博导:都说不唯论文,那我们发表论文是为了什么?
  7. 或许你不知道的10条SQL技巧
  8. python learning2.py
  9. 计算机专业英语信息系统,信息系统项目管理师英语复习资料:计算机专业英语汇总[5]...
  10. 卷积编码verilog实现
  11. clark变换与Park变换的推导
  12. Java实习日记(7)
  13. A4张的尺寸大小是多大?像素又是多少呢?
  14. SOAR:软件定义安全之编排篇
  15. 机器学习笔记一. 特征工程
  16. 区块链技术应用场景有哪些?
  17. 计算机专业python毕业设计题目_计算机专业,毕业设计的选题?
  18. 拆散彩虹:牛顿生命最后时光里的棱镜
  19. HTC ONE X刷ruu的详细刷机教程
  20. 推荐系统实战:新闻推荐系统基本流程

热门文章

  1. Flash Builder4破解步骤
  2. oracle rac的特征
  3. GitHub上README写法暨markdown语法解读
  4. 免费有理—五款免费的网络管理工具介绍
  5. idea2020在工具栏显示前进和后退箭头
  6. sql 练习网站答案解析
  7. Bean property 'preFix' is not writable or has an invalid setter method
  8. HDFS-异常大全-《每日五分钟搞定大数据》
  9. 网络管理常用命令(6/14) -netstat命令详解
  10. ssl证书链的验证的其它方式