学习笔记 - 离散数学 - 图论(持续更新)
说不准哪天写烦了就会把之前的笔记删了重构一遍(
图论
基本概念
有向图及无向图
有向图是一对有序偶 \(D=<V,A>\)
- 顶点 + 弧
- \(A\) 是 \(V\) 中的一个二元关系
无向图是一对有序偶 \(G=<V,E>\)
- 顶点 + 边
- \(E\) 是 \(V\) 中元素的无序偶组成的多重集合
带权图
图上的边可以附带边权
通常解释为路径长度,运费,管道流量等
关联、相邻、邻接的概念
给定有向图 \(D=<V,A>\),若 \(a=<u,v>\in A\)
- \(u\) 邻接到 \(v\) (\(u\) 和 \(v\) 邻接)
- \(a\) 关联于 \(u\) 和 \(v\)
若两个弧关联于同一个顶点,则称这两个弧是相邻的
给定无向图 \(G=<V,E>\),若 \(e=<u,v>\in E\)
- \(u\) 和 \(v\) 邻接 (无 邻接到 的概念)
- \(e\) 关联与 \(u\) 和 \(v\)
总结: 点与边关联,点与点邻接,边与边相邻
简单图
自环:两个端点相同的弧或边
平行弧:有向图中,始点和终点相同的两条弧
平行边:无向图中,两个顶点之间的两条边
多重弧图:有平行弧的有向图
多重边图:有平行边的图
多重图:多重弧图 + 多重边图
简单图:无资环和平行弧(或平行边)的图
顶点的次数 / 度数
有向图分入度 \(id(u)\) 和出度 \(od(u)\)
无向图只有度 \(d(u) = id(u) + od(u)\)
\(n\) 阶图:有 \(n\) 个顶点的图
\((n, m)\) 图:有 \(m\) 条边或弧的 \(n\) 阶图
- 孤立点:度数为 \(0\) 的点
- 悬挂点:度数为 \(1\) 的点
- 悬挂边:与悬挂点关联的边
- 零图:每个顶点都是孤立点的图
- 平凡图:1 阶零图
握手定理
有向图中:\(\sum\limits_{i=1}^nod(u_i)=\sum\limits_{i=1}^nid(u_i)=m\)
对于 \((n, m)\) 图: \(\sum\limits_{i=1}^nd(u_i)=2m\)
奇顶点:度数为奇数的顶点
偶顶点:度数为偶数的顶点
- 在任何图中,奇顶点的个数必为偶数
正则图
若无向图 \(G\) 的所有顶点的度数都是 \(r\) ,则称 \(G\) 为 \(r\) 次正则图
完全图
完全图:任何两个顶点之间都有一条边简单无向图,将 \(n\) 阶完全图记为 \(K_n\)
\(K_n\) 也是 \(n - 1\) 次正则图,边数为 \(\frac{n(n-1)}{2}\)
有向完全图:任意两顶点之间都恰有一条弧的简单有向图,也称为 竞赛图 。(可以理解为带方向的完全图)
图的同构
存在双射\(\tau:V_1\to V_2\) 使得 \((u,v)\in E_1\) 当且仅当 \((\tau(u), \tau(v))\in E_2\),并且重数相同,则 \(G_1, G_2\) 同构。有向图同理
同构图的性质:
- 顶点数、边数相同
- 对任意的自然数 \(k\) ,度数为 \(k\) 的顶点一样多
- 自环数量相同
子图
设 \(G_1=<V_1,E_1>\) 和 \(G_2=<V_2,E_2>\) 是两个图,若 \(V_1\subseteq V_2\) 且 \(E_1\subseteq E_2\) 则称 \(G_1\) 为 \(G_2\) 的子图,记为 \(G_1\subseteq G_2\)
若 \(G_1\subseteq G_2\) 且 \(G_1 \neq G_2\) ,则 \(G_1\) 是 \(G_2\) 的真子图
补图
\(E_2 = E - E_1\)
\(V_2=\{v|(v\in V\land\exists e(e\in E_2\land e与 v关联))\lor(v\in V-V_1\land v是G中的孤立点)\}\)
- 边只能在图和补图中出现一次
- 点可以出现多次
导出子图和生成子图
设 \(G_1=<V_1,E_1>\) 是 \(G=<V,E>\) 的子图
导出子图:\(E_1=\{e|e\in E\land e的端点在V_1中\}\)
生成子图:\(V_1=V\)
去点运算:去掉顶点以及关联的边 \(G-v\)
去边运算:仅去掉边,\(G-e\)
加边运算:\(G\) 中 \(u\) 和 \(v\) 不相邻,增加边 \((u,v)\):\(G+(u,v)\)
图的并集:\(V=V_1\cup V_2,E=E_1\cup E_2\),则 \(G=G_1\cup G_2\)
连通性 - 通路
通路:有向图中\(D=<V,A>\) 中,首尾相接的弧的序列 \(P=(a_1,a_2,\cdots,a_t)\) 称为通路,且对于每个 \(i\), \(a_i\) 的终点是 \(a_{i+1}\) 的始点。通路中出现的弧的数目 \(t\) 为该通路的长度,记为 \(|P|=t\)
简单通路:不出现相同弧的通路
基本通路:不出现相同顶点的通路
- 基本通路一定是简单通路,简单通路不一定是基本通路
- 基本通路的长度不超过 \(n - 1\)
连通性 - 回路
回路:始点和终点相同的通路
简单回路:不出现相同弧的回路
基本回路:不出现相同顶点的回路
无回路图:没有回路的有向图
- 基本回路的长度不超过 \(n\)
连通性 - 可到达
可到达:若存在 \(u\) 到 \(v\) 的通路,则称 \(u\) 可到达 \(v\)
- 若从 \(u\) 可以到达 \(v\), 则存在从 \(u\) 到 \(v\) 的基本通路,且最短通路必是基本通路(回路同理)
半通路:每条弧都与后一条弧相邻的弧的序列 \((a_1, a_2, \cdots, a_t)\) 称为半通路。
- 通路是每条弧都从前向后的半通路
连接到:若存在 \(u\) 到 \(v\) 的半通路,则称 \(u\) 连接到 \(v\)
连通性 - 强连通,单向连通,弱连通
强连通 / 3 度连通:任意两点互相可达
单向连通 / 2 度连通:任意两点,至少有一个方向可达
弱连通 / 1 度连通:任意两点互相连接
不连通 / 0 度连通:不满足弱连通,则称为不连通
完备路
完备通路:通过有向图中所有顶点的通路
完备回路:通过有向图中所有顶点的回路
完备半通路:通过有向图中所有顶点的半通路
- 强连通 \(\Leftrightarrow\) 有完备回路
- 单向连通 \(\Leftrightarrow\) 有完备通路
- 半连通 \(\Leftrightarrow\) 有完备半通路
链
链:无向图中,每条边都与随后的那条边相邻的序列 \((e_1,e_2, \cdots,e_t)\),可记为顶点序列,长度 \(|P|=t\)
简单链:各边互不相同
基本链:各顶点互不相同
闭合链: \(u_1 = u_{t+1}\)
圈
\(u_1,\cdots,u_t\) 各不相同,且各边互不相同的闭合链
连通分支
连通:若顶点 \(u\) 和 \(v\) 之间存在链,则称 \(u\) 和 \(v\) 是连通的
连通分支:有连通关系构成的等价类所导出的子图
- 图 \(G\) 是连通的当且仅当 \(G\) 中只有一个连通分支
割点:\(G\) 连通,\(G-v\) 不连通,则 \(v\) 是割点
割边:\(G\) 连通,\(G-e\) 不连通,则 \(e\) 是割边 / 桥
顶点基和强分图
可到达:对于有向图 \(D=<V,A>, B\subseteq V\),\(v\in V\),若从 \(B\) 中的某个顶点可以到达 \(v\) ,则称 \(B\) 可以到达 \(v\)。
顶点基:若 \(B\) 可到达 \(V\) 的所有顶点,且任何 \(B\) 的真子集都无法到达 \(V\) 中的每个顶点, 则称 \(B\) 为 \(D\) 的一个顶点基
强分图:\(D\) 是有向图, \(D'\) 是 \(D\) 的强连通子图,并且对于 \(D\) 的任意强连通子图 \(D''\),若 \(D' \subseteq D''\) ,则 \(D'=D''\)。称 \(D'\) 为 \(D\) 的强连通分图, 或者强分图。
(单向分图,弱分图同理)
- 每个顶点在唯一的强分图中,每条弧至多在一个强分图中
- 无回路有向图有唯一的顶点基,由所有引入次数为 0 的点组成
- 每个顶点基包含同样数目的顶点
压缩
每个强分图可以用一个点替代(缩点)
- \(D\) 的每一个顶点基都可以由可以由 \(D^*\) 的顶点基 \(B^*\) 得到(在 \(B^*\) 的每个元素中取出一个顶点)
通路问题
记通路的长度为 \(I(P)\) ,两点之间的最短通路记为最短路 \(d(u,v)\)。最短通路可以用 Dijkstra 来求
工序图
-
简单带权有向图
-
没有回路
-
有唯一的引入次数为 0 的点,称其为发点
-
有唯一的引出次数为 0 的点,称其为收点
-
每个顶点都在某条从发点到收点的通路上
-
每条弧的权都是非负实数
关键工序和关键事件
关键工序对应有向图的边
关键事件对应有向图的点
关键事件和关键工序的延迟都会导致整个工程的延误
关键时间和关键工序都位于关键通路中
关键通路
最早完成时间 \(TE\) :从发点 \(u_1\) 到 \(u_j\) 的最长通路的长度记为 \(u_j\) 的最早完成时间 (拓扑排序)
最迟完成时间 \(TL\) :在保证 \(u_n\) 的最早完成时间不变的前提下,到达事件 \(u_j\) 的最迟时间 (反着来一次拓扑排序)
缓冲时间 \(TS\) :\(TL-TE\)
- 关键通路上的所有事件的缓冲时间都是 0
图的矩阵表示
邻接矩阵
邻接矩阵就是关键矩阵 \(M = (m_{ij})\)
邻接矩阵也可以表示可达性:若在邻接矩阵上, \(m_{ij}=1\) ,则表示从 \(u_i\) 到 \(u_j\) 存在一条长度为 \(1\) 的通路
求到达某个点的长度为 k 的路径数量
考虑动态规划
长度为 \(k\) 的路径,可以由长度为 \(k - 1\) 的路径,加上长度为 \(1\) 的路径组合而来
不妨设 dp[u][v][k]
表示 \(<u, v>\) 之间长度为 \(n\) 的路径数量,则可以通过枚举 \(m_{ij}\) 进行转移
for(int t = 1;t <= n; ++t)
for(int u = 1;u <= n; ++u)
for(int v = 1;v <= n; ++v)
dp[u][v][k] += dp[u][t][k - 1] * m[i][j];
同时,我们也知道 \(dp[u][v][1] = m[u][v]\) ,而这三重循环恰好是进行了一次矩阵乘法
即:若记 \(dp[][][k] = dp^k\),则 \(dp^k=M^k\)
有向图的可达性矩阵
可达性矩阵的元素只包含 \(0, 1\)。设为 \(R\),通过枚举通路的长度,则有
其中 \(B(M) = (bool(m_{ij}))\),等号成立是因为只取结果只取 \(0, 1\) 与系数无关
强分图
\(R\) 为可达性矩阵,记 \(R^2=(s_{ij})\) 则 \(s_{ii}\) 可以表示图中可以到达 \(i\) 的顶点数量
关联矩阵
有向图的关联矩阵:\(D=<V,A>\) ,\(n\) 个点 \(m\) 条边。则 \(B=(b_{ij})_{n\times m}\)
无向图的关联矩阵:\(b_{ij}=e_i与u_i的关联次数\),\(b_{ij}\in\{0,1,2\}\)
- 有向图同构 \(\Leftrightarrow\) 适当排列顶点和弧的顺序,可以得到同样的邻接矩阵和关联矩阵
树
连通且无圈的无向图
树的一般定义
设 \(T\) 是 \((n,m)\) 无向图,则以下说法等价
- \(T\) 连通且无圈
- \(T\) 无自环,并且每对顶点之间有唯一基本链
- \(T\) 连通,在 \(T\) 中加一边仅有一个圈
- \(T\) 连通,去掉任何一边就不连通了
- \(T\) 连通,并且 \(m=n-1\)
- \(T\) 无圈,并且 \(m=n-1\)
树叶:次数为 1 的顶点
分支顶点:次数大于 1 的顶点
非平凡树中至少有两个树叶
有向树
将一个树的边加上任意的方向,就构成了有向树
有向树是弱连通的无回路有向图
弱连通的无回路有向图不一定是树
根树
有向树 \(T\) 中,有一个顶点引入次数为 0, 其余顶点的引入次数为 1,则称 \(T\) 为根树。
根树中,引入次数为 0 的点为树根,引出次数为 0 的点为树叶
若指定了 顶点或弧的次序的根树也称为有序树
二元树
\(m\) 元树:每个顶点的引出次数 小于等于 \(m\)
完全 \(m\) 元树:每个顶点的引出次数等于 \(m\) 或 \(0\)
位置 \(m\) 元树:每个顶点都规定了各儿子的顺序的 \(m\) 元树
一个有序树可以转变为位置二元树:
- 左儿子为长子
- 右儿子为兄弟
生成树
若无向图 \(G\) 的生成子图 \(T\) 是树,则称 \(T\) 为 \(G\) 的生成树
所有生成树中权值最小的称为最小生成树
(Kruskal算法)
割集
(类比最小割)
\(G=<V,E>, E'\subseteq E\),\(G-E'\) 不连通,且对任意的 \(E''\subset E\),\(G-E''\) 连通。则 \(E'\) 是割集
基本割集:只包含一个树枝的割集
基本圈:只有一条弦,剩下的全为树边的圈
性质
- 每个圈都包含弦
- 每个割集都和任何生成树有至少一条公共边
- 任何圈和任何割集都有偶数条公共边
穿程问题
欧拉图
欧拉圈:穿过无向图中每条边的简单闭合链位欧拉圈
欧拉图:有欧拉圈的图位欧拉图
- 欧拉圈中边不重复,但点可能重复,因此欧拉圈不一定是圈
欧拉链:穿过无向图中每条边的简单非闭合链称为欧拉链
- 欧拉链一般不是基本链
欧拉回路:穿过有向图中每条弧的简单回路称为欧拉回路
欧拉图:有欧拉回路的图称为欧拉图
欧拉通路:穿过有向图中每条胡的非闭合简单通路位欧拉通路
性质
若无向图 \(G\) 中每个顶点的次数大于 1,则在 \(G\) 中存在圈
连通无向图 \(G\) 是欧拉图当且仅当 \(G\) 的每个顶点都是偶顶点
连通无向图 \(G\) 中存在连接顶点 \(u,v\) 的欧拉链当且仅当只有 \(u\) 和 \(v\) 是奇顶点
强连通图有向图 \(D\) 是欧拉图当且仅当 \(D\) 中的每个顶点的引入次数和引出次数相同
单向连通有向图 \(D\) 有从顶点 \(u\) 到 \(v\) 的欧拉通路当且仅当 \(u\) 的引出次数比引入次数大 1, \(v\) 的引入次数比引出次数大 1, \(D\) 中其他顶带你引入次数和引出次数相同
哈密顿图
哈密顿圈:穿过无向图 \(G\) 中每个点一次且仅一次的圈位哈密顿圈
哈密顿回路:穿过有向图 \(G\) 中每个顶点的基本回路为哈密顿回路
哈密顿图:有 哈密顿圈 或 哈密顿回路 的图称为哈密顿图
哈密顿链:穿过无向图 \(G\) 中每个顶点的基本链为哈密顿链
哈密顿通路:穿过有向图 \(G\) 中每个顶点的基本通路为哈密顿通路
性质
有哈密顿图的必要条件: \(p(G-U)\leq|U|\)
有哈密顿链的必要条件:\(p(G-U)\leq|U|+1\)
有哈密顿链的充分条件:不相邻顶点的次数之和 \(\geq n - 1\)
有哈密顿图的充分条件:不相邻顶点的次数之和 \(\geq n\)
有向完全图中必存在哈密顿通路
强连通的有向完全图中必存在哈密顿回路
二分图匹配问题
基本概念
二分图:设 \(G=<V,E>\) 是无向图,若可以将 \(V\) 分成两个非空子集 \(X\) 和 \(Y\) ,并且使得同一子集中的任何两个顶点都互不邻接,则称 \(G\) 为二分图。
-
只有一个顶点的图不是二分图
-
若非平凡图 \(G\) 的每个连通分量都是二分图或平凡图,则 \(G\) 是二分图
-
互补顶点子集分别有 \(p\) 个顶点和 \(q\) 个顶点的完全二分图记为 \(K_{p,q}\)
匹配:设 \(G=<V,E>\) 是二分图, \(M\subseteq E\) ,若 \(M\) 中任意两条边不相邻,则称 \(M\) 为 \(G\) 的匹配
性质
若无向图 \(G\) 中有长度为奇数的闭合链,则在 \(G\) 中有长度为奇数的圈
非平凡无向图 \(G\) 是二分图当且仅当 \(G\) 中的每个圈的长度都是偶数
二分图最大匹配
最大匹配:边数最多的匹配
交错链:设 \(M\) 是二分图 \(G\) 的匹配, \(P\) 是 \(G\) 中的基本链,若 \(P\) 中任何相邻的两条边中恰有一条属于 \(M\) ,则称 \(P\) 为关于 \(M\) 的交错链
饱和顶点与非饱和顶点:设 \(M\) 是二分图 \(G\) 的匹配,称与 \(M\) 中的边关联的顶点为 \(M\) 的饱和顶点,称不与 \(M\) 中任何边关联的顶点为 \(M\) 的非饱和顶点。
可扩充链:两个端点都是匹配 \(M\) 的非饱和顶点的交错链
性质
二分图 \(G=<V,E>\) 的匹配 \(M\) 是最大匹配当且仅当 \(G\) 中不存在关于 \(M\) 的可扩充链
从 X 到 Y 的匹配
设 \(X\) 和 \(Y\) 是二分图 \(G\) 的互补顶点子集, \(M\) 是 \(G\) 的匹配。若 \(X\) 中每个顶点都是 \(M\) 的饱和顶点,即是 \(M\) 中某条边的端点,则称 \(M\) 为从 \(X\) 到 \(Y\) 的匹配。