图算法笔记(1)- 图论基本概念
4900
2021.01.24
2021.01.24
发布于 未知归属地

Basic Concept

学习图算法,先从图的 概念定义性质 先掌握。

  • 图是一个三元组 ,其中 是一个非空的结点集合, 是边集合, 是从边集合 到结点集合上的函数。

    简而言之就是,图由边集、点集和边和点的关联关系组成。

image.png
{:align=center}

  • 有向与无向

    无向边:若边 与结点无序偶 相关联,则称该边为 无向边。即边所连两个结点没有顺序关系。

    有向边:若边 与结点有序偶 相关联,则称该边为 有向边。即边所连两个结点存在顺序关系。

    偶是指一对,有序偶是指有顺序关系的一对。无序偶是指没有顺序关系的一对。无序偶用 表示,有序偶用 表示。结点有序偶是指有顺序关系的两个结点。

    有向图:每一条边都是有向边的图称为 有向图

    无向图:每一条边都是无向边的图称为 无向图

    混合图:一些边有向一些边无向的图称为 混合图

  • 邻接与孤立

    邻接点:若两个结点之间存在边相连,则这两个结点称为 邻接点

    邻接边:若两条边关联同一个结点,则这两条边称为 邻接边

    孤立点:不与任何结点相邻接的结点,称为 孤立结点孤立点

    零图:仅有孤立结点组成的图称为 零图

    平凡图:仅有一个孤立结点的图称为 平凡图

    稀疏图:边的条数 不超过 的图称为 稀疏图(Sparse Graph),即边数很少的图。

    稠密图:边的条数 很接近 的图称为 稠密图(Dense Graph),即边数很多的图。

    环:关联于同一结点的一条边称为 自回路。环的方向是没有意义的,因此环可以称为无向边也可以称为有向边。

  • 平行边与简单图

    平行边:连接于同一对结点间的多条边称为 平行边

    多重图:含有平行边的图称为 多重图

    简单图:不含有平行边和环的图称为 简单图

    完全图:简单图中,若每一对结点间都有边相连,则该图称为 完全图。有 个结点的无向完全图记作

    定理: 个结点的无向完全图 中的边数为 ,即“握手定理”。

    补图:对于图 ,由 所有节点和所有能使 成为完全图的添加边组成的图,称为 相对于完全图的补图,记作

  • 权:每条边带有一个数字或者值,用于表示长度、距离、时间或其他意义,称作该边的

    带权图:每条边都带有权的图称为 带权图

    无权图:每条边不带有权的图称为 无权图

  • 子图

    子图:设图 ,如果有图 ,且 ,则称 子图。即由原图点集和边集的一部分组成的图。

    生成子图:如果子图 包含 的所有结点,则称 生成子图。即由原图所有节点,边集一部分组成的图。

    子图的补图:对于图 的子图 ,如果给定另一个图 使得 ,且 中仅包含 的边所关联的结点。则称 相对于 补图

  • 度数:在图中,与结点 关联的边的数量,称作该结点的 度数,记作 。若结点上增加一个环,则度数加 2。

    定理:图中所有结点的度数和为边数的两倍。

    定理:图中度数为奇数的结点必定为偶数个。

    入度:有向图中,射入一个结点的边数称为该结点的 入度

    出度:有向图中,由一个结点射出的边数称为该结点的 出度

    定理:有向图中,所有结点的入度和等于出度和。

  • 同构

    设图 及图 ,如果存在一一对应的映射 的一条边;当且仅当 的一条边,则称 同构

    同构的结果实际上指的是同一幅图,但是点的位置随意挪动之后生成的另一幅图,此时边会被拉伸,但依旧是原来的边。同构的目的是为了表示,在边长度可以拉伸的条件下,图形的表示并非唯一,因此同构的图在逻辑上是同一幅图。如以下这些图:

    image.png
    {:align=center}

    若图 无法通过挪动点的位置使之称为另一幅图 ,则二图不同构,反之则同构。但同构难以用程序验证,同构的必要不充分条件有:

    • 结点数目相同。

    • 边数相同。

    • 度数相同的结点数目相同。

    自补图:如果一个无向图同构于它的补图,则称该图为 自补图

    定理:如果一个图是自补图,其对应完全图的边数必定为偶数。

Path and Loop

    • 路:给定图 ,设 ,其中 是关联于结点 的边,交替序列 称为联结

      定理:在一个具有 个结点的图中,若从结点 存在一条路,则 间必定存在一条不多于 条边的路。
      很好理解,其实就是剔除掉路中成环的部分,最后连接两个点的边肯定只需要 以下的边数。

    • 回路: 分别称为路的起点和终点,边的数目 称作路的长度。当 时,这条路称作 回路

    • 迹:若一条路中,所有的边 均不相同,则该路称作

    • 通路:若一条路中,所有的结点 均不相同,则称作 通路

    • 圈:闭的通路,即除 外,其他结点均不相同的通路称为

  • 连通

    连通:在无向图 中,结点 之间若存在一条路,则称结点 连通的。

    连通分支:在无向图 中,将结点集 划分为非空子集 ,若 中任意两个结点都是连通的,则 则为 连通分支。图 的连通分支数记作

    连通图:若图 仅有一个连通分支,则称该图为 连通图

    割点:设无向图 为连通图,若删除点 后所得的子图不是连通图,则称该点为 割点

    点割集:设无向图 为连通图,若有点集 ,使图 删除了 的所有结点后,得到的子图不是连通图,而删除除 的任何真子集后,所得到的子图仍是连通图,则称 的一个 点割集

    割点集可以看作是放大的割点。如下图为割点与点割集:

    割点与点割集
    {:align=center}

    割边:设无向图 为连通图,若删除边 后所得到的子图不是连通图,则称该边为 割边

    边割集:设无向图 为连通图,若有边集 ,使图 删除了 的所有边后,得到的子图不是连通图,而删除 的任何真子集后,所得到的子图仍是连通图,则称 的一个边割集

    边割集可以看作是放大的割边。如下图为割边与边割集:

image.png
{:align=center}

> 定理:结点 $v$ 是割点的充分必要条件是存在两个结点 $u$ 和 $w$,他们之间的每一条路都通过 $v$。

强连通图:在简单有向图 $G$ 中,任何一对结点都相互可达则称该图为 **强连通图**
弱连通图:在简单有向图 $G$ 中,如果擦除所有边的方向能使得该图成为连通图,则称该图为 **弱连通图**
单侧连通:在简单有向图 $G$ 中,任何一对结点间,至少有一个结点到另一个结点是可达的,则称这个图是 **单侧连通图**
> 定理:一个有向图 $G$ 是强连通的,则 $G$ 中必定包含一个通过所有结点的回路。

强分图:简单有向图中具有强连通性质的最大子图称为**强分图**
弱分图:简单有向图中具有弱联通性质的最大子图称为**弱分图**
单侧分图:简单有向图中具有单侧连通性质的最大子图称为**单侧分图**
> 定理:在有向图 $G=\langle V,E \rangle$ 中,每一个结点位于并只位于一个强分图中。  
> 很好理解,如果处于某一个强分图中,该分图中所有节点必定都处于该分图中,不会处于其他分图中的。

Representation

图由点集、边集和点与边的关系构成,对图进行表示,只需要记录这三者的关系即可。

Adjacency Matrix

创建一个 的矩阵,每一行表示每一个结点,每一列表示另一结点,第 列的元素 表示二结点间的关系,这种图的表示方法称为邻接矩阵(Adjacency Matrix),该 阶方阵记为

对于无权图,该邻接矩阵称为 无权邻接矩阵,点 之间的关系 表示为:

对于带权图,该邻接矩阵称为带权邻接矩阵,点 之间的关系 表示为( 表示边 的权):

对于无向图,该邻接矩阵称为无向邻接矩阵 的值等于 的值。

image.png
{:align=center}

对于有向图,该邻接矩阵称为有向邻接矩阵,一条单向边仅代表一个方向,若 存在边而 不存在边,则

image.png
{:align=center}

邻接矩阵有几条有意思的性质:

  • 邻接链表的空间耗费为

  • 通过邻接矩阵判断两点间是否存在边的速度是 ,如果要判断 间是否存在边,对于无向图只需要判断 是否等于 0,对于有向图只需要判断 是否等于 0。

  • 遍历某一行/列元素即可计算该结点的度。

  • 无向图的邻接矩阵是对称的,其转置矩阵为本身,因此可以缩减一半的存储空间。

  • 对于零图,邻接矩阵中所有元素都为 0,因此零图的邻接矩阵是一个零矩阵。因此如果图的边越少,邻接矩阵所浪费的空间就越多,邻接矩阵更适合用于稠密图。

  • 对于无权邻接矩阵进行幂方,得到结果为 ,此时 等于 的长度为 n 的路的数目。

    假设求 长度为 2 的路的数目,即求 的路的数量,若存在某条路,则 a{kj} = 1a_{ik} \cdot a_{kj} = 1a_{ik} * a_{kj} = 0a_ia_j$ 长度为 2 的路的数目为:

    此结果等同于矩阵 列元素 ,更高次幂以此类推。

Adjacency Linked List

创建一个 个元素的数组,每个元素都是一个链表,每条链表表示与每个结点相连的所有其他结点。这种图的表示方法称为邻接链表,编程时通常使用这种方法表示图,使用 表示该邻接链表数组。

对于无向图而言, 的链表中记录所有 的邻接点,因此 中所有邻接链表长度和为

image.png
{:align=center}

对于有向图而言, 的链表仅记录所有 射出的边,因此 中所有邻接链表长度和为

image.png
{:align=center}

邻接链表同样有很多有趣的性质:

  • 邻接链表的空间消耗为

  • 邻接链表可以直接判断边的度或出度,但无法直接判断二结点是否邻接,必须遍历某结点的邻接链表才能判断。

  • 对于零图,数组中所有链表都为空,因此零图的邻接链表是一个所有元素都为空的数组。因此邻接链表非常适合稀疏图的表示,

Incidence Matrix

创建一个 的矩阵 ,每一行表示每一个结点,每一列表示每一条边,第 列的元素 表示 与边 的关系,这种图的表示法称为关联矩阵

对于无向图,关联矩阵元素 为:

image.png
{:align=center}

对于有向图,关联矩阵元素 为:

image.png
{:align=center}

关联矩阵的性质如下:

  • 关联矩阵的空间消耗为

  • 每一列只有 2 个元素空间会被使用。

  • 遍历第 行可判断 的度数。

  • 对于零图,由于不存在任何边,因此关联矩阵降为一维数组,且所有数组元素都为空。

Euler Graph

对于无孤立结点的图 ,如果存在一条路经过图中所有边一次且仅一次,该路就称为欧拉路。如果存在一条回路,经过图中每条边一次且仅一次,该回路称为欧拉回路。具有欧拉回路的图称为欧拉图

image.png
{:align=center}

给定有向图 ,通过图中每边一次且仅一次的一条单向路(回路),称作单向欧拉路(回路)

性质:

  • 无向图欧拉路的条件:当且仅当无向图 是连通的,且有零个或两个奇数度结点, 具有一条欧拉路。

    简单理解必要性:欧拉路不严格要求终点必须为起点,假设图 条边,那么欧拉路必须经过这些 条边各一次且仅一次,而每条边必定联结两个点,因此每走完一条边就会减少全局的两个度数,因此全局度数和必定是 。如果一端点为奇数度,那么该点只能作为起点或终点,因为它的最后一条邻接边要么作为射入要么作为射出,它无法作为一个中间点。因此欧拉路最多只有两个奇数度结点。如果没有奇数度结点,他就是欧拉回路。

    充分性不作证明。

  • 无向图欧拉回路的条件:当且仅当无向图 是连通的,且所有结点度数全为偶数时, 具有一条欧拉回路。

    简单理解必要性:当有奇数度的时候,该结点如果作为起点,必定无法回到该结点;该节点如果非起点,则最终只能停滞在该结点,因此无法组成欧拉回路。

    充分性不作证明。

  • 有向图欧拉路的条件:当且仅当有向图 是连通的,且除两个结点外,每个结点的入度等于出度,同时在这两个结点中,一个结点的入度比出度大一,另一个结点的入度比出度小一, 具有一条单向欧拉路。

    充分必要性不做证明。

  • 有向图欧拉回路的条件:当且仅当有向图 是连通的,且每个结点入度等于出度, 具有一条单向欧拉回路。

    充分必要性不做证明。

Hamiltonian Graph

给定图 ,若存在一条路经过途中每个结点恰好一次,这条路称为汉密尔顿路。若存在一条回路经过每个结点恰好一次,这条回路被称为汉密尔顿回路。具有汉密尔顿回路的图称为汉密尔顿图

image.png
{:align=center}

性质:

  • 必要条件:若图 具有汉密尔顿回路,则对于点集 的每个非空子集 均有 成立。 表示 的连通分支数。

  • 充分条件:设 具有 个结点的简单图,如果 中每一对结点度数之和大于等于 ,则在 中存在一条汉密尔顿路

  • 充分条件:设 是具有 个结点的简单图,如果 中每一对结点度数之和大于等于 ,则在 中存在一条汉密尔顿回路

Closure of Graph

给定图 个结点,若将图 中度数之和至少是 的非邻接结点连接起来得到图 ,对图 重复上述步骤,直到不再有这样的结点对存在为止,所得到的图称为图 闭包

性质:当且仅当一个简单图的闭包是汉密尔顿图是,该图是汉密尔顿图。

image.png
{:align=center}

Planar Graph

是一个无向图,如果能够把 的所有节点和边画在平面上,且使得任何两条边除了端点外没有其他的交点,就称 是一个平面图。

  • 面:设 是一个连通平面图,由图中的边所包围的区域,在区域内既不包含图的结点,也不包含图的边,这样的区域称作 的一个。包围该面的诸条边所构成的回路称为这个面的边界。面的边界的回路长度称为面的次数

    image.png
    {:align=center}

    性质:面的次数之和等于平面图中边数的两倍。

  • 欧拉定理:设一个连通平面图 ,共有 个结点, 条边和 个面,则有

  • 是一个有 个结点, 条边的连通简单平面图,若 ,则

  • 库拉托夫斯基(Kuratowski)定理:一个图是平面图,当且仅当它不包含与 在 2 度结点内同构的子图。

    两度结点内同构:给定两个图 ,如果它们是同构的,或者通过插入或除去度数为 2 的结点后是同构的,则称该两图是在两度结点内同构

    image.png
    {:align=center}

Tree

树:一个连通且无回路的无向图称为。树中度数为 1 的结点称为树叶,度数大于 1 的结点称为分支点内点。一个无回路的无向图称作森林,他的每个连通分支是树。

等价定义:

  • 无回路的连通图

  • 无回路且

  • 连通且

  • 无回路,但增加一条新边,得到一个且仅有一个回路。

  • 连通,但删去任何一条边后都不连通。

  • 每一对结点间有且仅有一条路。

生成树:若图 的生成子图是一棵树,则该树称为 生成树。不在生成树的边称作。所有弦的集合称作生成树的

最小生成树:在图 的所有生成树中,树杈最小的那棵生成树称作最小生成树

image.png
{:align=center}

性质:

  • 任何一颗树至少有两片树叶。

  • 连通图至少有一棵生成树。

  • 一条回路和任何生成树的补至少有一条公共边。

  • 一个边割集和任何生成树至少有一条公共边。

评论 (0)