some parts were auto-completed by copilot, since I am a worn-out lazy heck, and never appeared to manage time properly.
Summary
- 图的基本概念
- 图
- 通路与回路
- 图的连通性
- 图的矩阵表示
- 欧拉图与汉密尔顿图
- 树
- 平面图
一. 图的基本概念
1) 图
图是由顶点和边组成的数学结构,用于表示对象之间的关系。图可以是有向的或无向的,边可以带权重或不带权重。
对于有向图或无向图,均用二元组 表示,其中 为顶点集合, 为边集合。
其中,对于边,无向边使用 表示,其中 与 为两个端点,顺序可调换;
有向边使用笛卡尔积 表示,即 ,其中 与 表示从 指向 的矢量,顺序不可调换。图的阶,指图中顶点的个数。 个顶点的图即称作 阶图。
(零图:没有边的图;平凡图:1阶零图)无向图的关联和相邻: 如图G1所示。
- 关联:
对于边 ,称 、 与 相关联,且由于 与 不相同,关联次数为1。
假设一自反关系 定义在图G1上,则称 与 相关联,且关联次数为2。同理, 与 的关联次数为0,即不关联。 - 相邻:
对于任意有公共边的点,如 、 或 、,称它们相邻。
对于任意有公共端点的边,如 、 或 、,称它们相邻。
- 关联:
- 有向图的端点、关联和相邻:
如图D1所示。
- 端点: 对于有向边 ,称 为始点, 为终点。
- 关联和相邻原理与无向图同理。
- 无向图的度数(度):顶点 作为无向边的端点的次数,记作 。
- 如图G1,,
- 有向图的度数:
- 入度:顶点 作为有向边的终点的次数,记作
- 出度:顶点 作为有向边的始点的次数,记作
() - 如图D2,
握手定理:
- 无向图:
- 有向图:
- 推论:
- 任何图中,奇度顶点的个数是偶数
(原因:每条边都会贡献两次度数,因此所有度数的和必为偶数,所以奇度顶点的个数必须是偶数,否则矛盾) - + =
- 任何图中,奇度顶点的个数是偶数
- e.g
已知阶无向图中有条边,各个顶点的度数均为,又已知, 则
解析:
度数列:
- 阶无向图:
- 阶有向图:
- 入度列:
- 出度列:
- 入度列:
- e.g.
- 一个三阶有向图的度序列是, 入度序列是,则出度序列是
- 非负整数列是可图化的,当且仅当为偶数;
- 非负整数列是简单可图化的,当且仅当:
- 1.为偶数
- 2.
即
(注:最大度,最小度)
- 阶无向图:
无向完全图:设为阶无向简单图,若中每个顶点均与其余的个顶点相邻,则称为无向完全图,记作。
阶无向完全图的边的条数为
2) 通路与回路
- 通路:对于无向图中G中的顶点与边的交替序列,若,则称为回路。
对于图,是一个回路。
3) 图的连通性
设无向图,若之间存在通路,则称是连通的,记作
若无向图是平凡图或中任意两个顶点都是连通的,则称是连通图。在有向图中,对于,若从到存在通路,则称到可达,记作。若在此基础上,从到也存在通路,则称是相互可达的。规定。
对于有向图:
- 强连通图:
- 单向连通图:
- 弱连通图: 在略去有向边后得到的无向图是连通的。
4) 图的矩阵表示
- 对于无向图, 令为和之间的边的条数,则称矩阵为图的关联矩阵。
<aigc>
其他常用的图的矩阵表示:
邻接矩阵(Adjacency matrix):对于简单无向图,定义,其中 a{ij}=\begin{cases}1,&\text{若 }(vi,v_j)\in E\0,&\text{否则}\end{cases} 对于有向图,为非对称矩阵;对于带权图,可取为对应边的权值。
关联矩阵(Incidence matrix):对于无向图,令,顶点为行、边为列,若边与顶点关联则(环可计为2),否则为0。对于有向图可将入、出端用-1、+1标记。
度矩阵(Degree matrix):对角矩阵,常与邻接矩阵一起用于构造拉普拉斯矩阵。
拉普拉斯矩阵(Graph Laplacian):定义为,其中为度矩阵,为邻接矩阵。为对称半正定矩阵,零特征值的重数等于连通分支数,可用于研究图的谱性质、连通性与随机游走。
归一化拉普拉斯矩阵(Normalized Laplacian):一种常用形式为,便于处理度异质性的图谱分析。
这些矩阵在图论的算法与谱图理论中广泛使用,用于表示结构、计算最短路、连通分量、谱聚类等。
</aigc>
二. 欧拉图与 汉密尔顿 哈密顿图
1) 欧拉图
- 欧拉通路:通过图中所有边一次,且仅通过一次的通路。
- 欧拉回路:定义相同的回路
- 欧拉图:具有欧拉回路的图
半欧拉图:具有欧拉通路但不具有欧拉回路的图
- 无向图是欧拉图,当且仅当是连通图且为偶数
- 有向图是欧拉图,当且仅当D为强连通图,且
2) 哈密顿图
- 哈密顿通路:经过图中所有顶点一次,且仅经过一次的通路。
- 哈密顿回路:定义相同的回路
- 哈密顿图:具有哈密顿回路的图
- 半哈密顿图:具有哈密顿通路但不具有哈密顿回路的图
- 充分条件:
- 设是阶无向简单图,若, 则G中存在哈密顿通路
- 设是阶简单无向图,若,则中存在哈密顿回路
- 充分条件:
3) 最短路问题
- 权和带权图:
称图为带权图,其中为权集,,为边的权值。
最短路径:在带权图中,,时,从到长度权的和最短的路径,称其长度为从到的距离,记作。
规定:最短路问题:在带权图中,求,时,从到的最短路径。
计算方法:Dijkstra算法
算法思想:
- 初始化:设定起点,将加入已确定最短路径的集合,并将所有顶点的距离初始化为,除了。
- 迭代:
* 从未确定的顶点中选择距离最小的顶点<span class="katex"><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span>,将其加入集合<span class="katex"><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.0576em;">S</span></span></span></span>。 (第一次选择也就是加入<span class="katex"><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">s</span></span></span></span>) * 对于每个与<span class="katex"><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span>相邻的顶点<span class="katex"><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">v</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel"><span class="mord"><span class="mrel">∈</span></span><span class="mord vbox"><span class="thinbox"><span class="llap"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="inner"><span class="mord"><span class="mord">/</span><span class="mspace" style="margin-right:0.0556em;"></span></span></span><span class="fix"></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord mathnormal" style="margin-right:0.0576em;">S</span></span></span></span>,检查是否可以通过<span class="katex"><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal">u</span></span></span></span>更新<span class="katex"><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.0359em;">v</span><span class="mclose">)</span></span></span></span>: <span class="katex-display"><span class="katex"><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.0359em;">v</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop">min</span><span class="mopen">(</span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal" style="margin-right:0.0359em;">v</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">d</span><span class="mopen">(</span><span class="mord mathnormal">u</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0269em;">w</span><span class="mopen">(</span><span class="mord mathnormal">u</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0359em;">v</span><span class="mclose">))</span></span></span></span></span>- 重复步骤2,直到所有顶点都被加入集合或所有可达顶点的最短路径已确定。
(其实我也不知道怎么描述,以上是aigc)
得,写不完了,让我拖完了,只能说f1太好看了。