logo

网络流与图

王哲峰 / 2023-03-30


目录

图介绍

图(Graph)是图论的研究对象,图论是欧拉在研究哥尼斯堡七桥问题过程中,创造出来的新数学分支

网络(Graph / Network)视为一个系统,以 $G(N, E)$ 表示,由两种元素组成: 顶点/节点(Vertex/Node),以 $N$ 表示,和边/链接(Edge/Link),以 $E$ 表示。 顶点和边具有属性(Attribute),边可能有方向(有向图 Directed Graph)。 社交网络中,人是顶点,人和人之间的关系是边,人/顶点的属性比如年龄、性别、职业、爱好等构成了一个向量,类似的,边也可用向量来表示

img

图表示

图本身也具有表达其自身的全局属性,来描述整个图

邻接矩阵

如何用数学表示图中顶点的关系呢?最常见的方法是邻接矩阵(Adjacency Matrix), 下图中 A 和 B、C、E 相连,故第一行和第一列对应的位置为 1,其余位置为 0

img

如果将图片的像素表达为图,下左图表示图片的像素值,深色表示 1,浅色表示 0, 右图为该图片对应的图,中间为对应的邻接矩阵,蓝色表示 1,白色表示 0。 随着图的顶点数($n$)增多,邻接矩阵矩阵的规模($n^{2}$)迅速增大, 一张百万($10^{6}$)像素的照片, 对应的邻接矩阵的大小就是($10^{6} \times 10^{6} = 10^{12}$), 计算时容易内存溢出,而且其中大多数值为 0,很稀疏

img

文本也可以用邻接矩阵表示,但是问题也是类似的,很大很稀疏:

img

邻接列表

也可以选用边来表示图,即邻接列表(Adjacency List),这可以大幅减少对空间的消耗,因为实际的边比所有可能的边(邻接矩阵)数量往往小很多

img

类似的例子有很多: