学习笔记 - 离散数学 - 图论(持续更新)

说不准哪天写烦了就会把之前的笔记删了重构一遍(

图论

基本概念

有向图及无向图

有向图是一对有序偶 \(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})\)

\[\begin{equation}m_{ij}=\begin{cases}1&当<u_i,u_j>\space\in\space A时\\0&当<u_i,u_j> \space\not\in\space A时\end{cases}\end{equation} \]

邻接矩阵也可以表示可达性:若在邻接矩阵上, \(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\),通过枚举通路的长度,则有

\[R = B(M^0+M^1+M^2+\cdots+M^{n-1})=B((I+M)^{n-1}) \]

其中 \(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}\)

\[\begin{equation}b_{ij}=\begin{cases}1&若u_i\space 是a_j的起点\\-1&若u_i\space 是a_j的终点\\0&若u_i不是弧a_j的端点\end{cases}\end{equation} \]

无向图的关联矩阵:\(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\) 的匹配。

posted @ 2020-11-19 14:09  Withinlover  阅读(2429)  评论(0)    收藏  举报