离散数学(2) 第二章 道路与回路

这篇具有很好参考价值的文章主要介绍了离散数学(2) 第二章 道路与回路。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

(本文为作者期末复习时所写,内容源自教材《图论与代数结构》戴一奇等著,结合了作者本人的一些理解,如有错误,请指出!)

2.1道路与回路

1.【定义】(有向图)简单有向道路 简单有向回路:边不重复出现

初级有向道路 初级有向回路:点不重复出现

2.【定义】(无向图)有向道路 有向回路:点边交替序列

3.【定义】弦

【定理】简单图G中,若每一个点的度数d(v)>=3,则G中一定含有带弦回路

证明思路:(构造法)在G中找到一条极长初级道路,道路的上的点分别记为v0,v1,v2...对于v0,与其相邻的点除了v1外至少有两个,这些点应该在这条初级道路上,否则这条初级道路将可以延长,不符合题目中的“极长”。不妨设={v1,vj,vk...}.此时,{v0,v1...vk,v0}是一条初级回路,(v0,vj)是其中一条弦。

4.【定义】二分图

【定理】二分图中任一回路的边数一定为偶数

证明思路:二分图中节点集可划分为X,Y,从任意节点出发,一定需要经过偶数条边才能回到原来的节点集。

5.【定义】(无向图)连通图:任意两节点之间都存在道路

6.【性质】(无向图)树:任意两节点之间都只有唯一一条初级道路;树是含边数最少的连通图

7.【例题】G是简单图,证明当m>(n-1)(n-2)时,G是连通图

思路:(反证法)至少含有两个连通支,设其中一个连通支的点数为k,求出边的最大数量,放缩得m<=(n-1)(n-2)。

2.2道路与回路的判定

1.(无向图)判定两点间是否连通

(1)法一(判断任意两点间是否可达):邻接矩阵法(warshall算法)

算法理解:我们知道,邻接矩阵表示的是两点之间是否直接可达(aij=1表示i和j之间直接相连,aij=0表示i和j之间不直接可达但是可能间接可达),我们的目标是得到一个矩阵,这个矩阵中aij=1表示i和j之间直接或间接可达。

warshall算法中,第k次更新得到的邻接矩阵P(k)中,aij=1表示的是aij直接可达或者经由{1,2...k}间接可达。举例说明:P(0)是我们的初始矩阵(邻接矩阵),第一次迭代的时候发生了什么呢?我们试图求出一个矩阵,这个矩阵中,ij直接可达或者ij通过1可达,我们就把aij设为1.计算过程如下:第一步,我们先看P(0)的每一行的第一个元素,寻找哪一个元素可以到1,因为只有当这个元素可以到1时,我们才可以用1可达的点来拓展这个元素可达的点。我们发现a51=1,也就是5可以到1,现在我们已经锁定了矩阵的第5行,接下来我们准备更新第5行;第二步,我们寻找1可以到哪些点,我们发现a12=1,a13=1,也就是1可以到2和3;第三步,我们用1可达的点拓展5可达的点,因为存在路径5->1->2和5->1->3,我们就把矩阵的a52和a53更新为1.

我们重复这个动作,直到得到了P(5),迭代结束。

复杂度分析:n次迭代,第k次迭代时,先遍历第k列寻找1,最差情况是这一列全是1,也就是说,更新的时候需要把整个矩阵更新(n^2),因此,warshall算法时间复杂度为O(n^3)

(2)法二(判断给定v0和v1是否可达):搜索法(DFS和BFS)

DFS和BFS思路简单,在此不做分析。DFS和BFS中,每条边最多探测一次,时间复杂度为O(m)

2.3欧拉道路与回路

1.【定义】(无向图)欧拉回路:所有边经过且仅经过一次,回到原点

2.【判定】无向图有欧拉回路的充要条件:各节点度数为偶

3.【构造】求图中的欧拉回路:从图G中找到一条简单回路C,G1=G-C,G1中一定存在一个度不为0的点v,同时满足v在C中(否则原图G不连通),以v为始点,在G1中找到一个简单回路C1,C∪C1也是一个简单回路,重复该动作,直到简单回路中包含了G中所有边。

4.【推论】若无向连通图只有两个度为奇的节点,则存在欧拉道路

5.【推论】(有向图)G中各个节点正度负度相等,则存在欧拉回路

2.4哈密顿道路与回路

1.【定义】哈密顿回路:所有节点经过且仅经过一次 回到原点

2.【判定】简单图G有哈密顿回路的充分条件:

(1)简单图G任意两点度数之和>=n-1,则G中存在哈密顿道路

证明思路:(构造法)先有一条极长初级道路,基于这条极长初级道路构造出初级回路,再由这条初级回路拓展出更长的初级道路,最终拓展出所有点。

(2)简单图G任意两点度数之和>=n,则G中存在哈密顿回路

证明思路:(反证法)由(1)可知有H道路,假设无H回路,d(v0)=k,则d(vl)<=n-k-1,d(v0)+d(vl)<=n-1

(3)若G中每个节点的度都>=n/2,则存在H回路

3.【判定】简单图G存在哈密顿回路的充要条件:闭合图存在哈密顿回路

【定义】闭合图:若uv不相邻,且d(u)+d(v)>=n则增加边(u,v),重复该过程直至不能增加边,最终可得闭合图

4.【判定】一般情况下,判断一个图是否存在H回路需要用搜索法,复杂度为O(n!)

2.5旅行商问题(给定赋权完全图,求总长最短的H回路)

1.法一:分支与界法

理解:分支与界法本质上就是采用DFS的搜索,只不过适当剪枝,不用遍历所有情况

注意:每一步先计算d(s)值并与界值比较,若>=界值,则后续比d(s)更大的所有情况都不再考虑。

2.法二:便宜算法(近似算法)

每一步选取到回路最近的节点j,插入其中。假设(t,j)是相应的边,则需考虑将j插入t的前边还是后边:如果插入前边之后回路长度更小,则插入前边;否则插入后边。

2.6最短路径(负权无回路)

1.法一:Dijkstra算法(正权图 单源最短路径)

步骤:维护一个点集S,初始时S中只有源点,每次从E-S中选取距离源点最近的点,用这个点更新E-S中各点到源点的最短距离,并将这个点放入S中。

复杂度分析:每次操作分为两步,第一步是选取到原点距离最短的点,第二步是更新距离。因为每次放入一个点,所以共操作n次。对于第一步,选取最短点时,若采取遍历数组的方式,则复杂度为O(n),总共的复杂度为O(n^2);对于第二步,我们从整体上看,实际上我们更新时每条边用了1次,总共的复杂度为O(m). 综上,采取遍历数组时,D算法复杂度为O(m+n^2)

但是,实际上我们不一定需要采取遍历数组的方式选取到源点距离最短的点,我们可以使用优先队列,此时复杂度为O(nlogn),总体复杂度为O(nlogn+m)

2.法二:BFS(边权为一 单源最短路径)

过于straightforward 略

3.法三:Ford算法(边权可为负 单源最短路径)

我们先要明白为什么边权为负时Dijkstra算法失效:假设目前E-S中i到源点的距离最短,dist[i]=6;E-S中j到源点的距离为7,即dist[j]=7。此时,按照D算法的思路,我们应该把i加入S中(vis[i]=true),同时锁定dist[i]=6,即S中的所有点的dist都不会再被更新(我们更新时dist时,只更新未vis的点的dist)。下一步,我们要把j加入S中,再用j更新未vis的点的dist,实际上可能存在边(j,i)=-2,但是由于vis[i]==true,dist[i]已被锁定,所以此时dist[i]不会被更新为正确的7-2=5,而是维持原来的6.

Ford算法步骤:还是维护一个dist数组,每次迭代,我们用一个点的所有入度的dist去更新这个点的dist;迭代直到全部dist未变化。(“所有入度”这个说法来自于教材,网上大部分人的说法是每次迭代,“松弛每条边”,其实这两种说法体现在算法上是一样的)

复杂度分析:每次迭代都要遍历m条边,每次的复杂度是O(m),下面考虑迭代次数:最多为n次,因此总的复杂度为O(mn).为什么最多为n次呢?实际上,迭代次数与检查节点的顺序相关,但第i次后至少能得到i步之内的最短路。由于任意节点到源点最多m步,因此最多迭代次数为m.

2.7关键路径分析

1.PT图:

(1)节点表示工序,每个点的出度表示完成该节点所需的时间

(2)最早完工时间:v0到vi的最长路径长度

计算最长路径的步骤:

第一步,为节点重新标序。我们按照如下顺序寻找节点,依次从小到大标号:每次在图中寻找入度为0的节点,给它标号,并删去所有以它为始点的边。这个过程可以理解为,“完成”了该节点所代表的工序,因而“解除”了一些先决条件。

第二步,按照编号从小到大的顺序,依次计算每个点到源点(v0)的最长路径π(vi)。π(v0)=0。因为我们已经重新标号了,所以从v0到vi的最长路径上经过的点的标号一定小于i。又因为我们是从小到大计算π(vi)的,因次计算π(vi)时,比i小的节点的π我们都已经算完了。因此计算π(vi)只需从所有{入度节点的π+入边权值}中寻找最大值即可。

(3)工序的最晚启动时间

关键路径上的点时不能延误的,但是其他路径上的点或许可以晚一些启动。比如关键路径长度为39,v2不在关键路径上,而我们计算出来的π(v2)=10,这意味着v2工序最早在时间为10时启动,但是v2也许可以在11时启动,不影响整个工程在39时完工。但是V2启动的时间明显不能无限延迟,极端情况,如果v2在40时启动,整个工程肯定不能在39时完工了。现在问题来了,v2最晚能在什么时候启动不影响整个工程在39时完工呢?

计算公式:τ(vn)=π(vn)从后往前计算,即按照节点编号从大到小计算,每个节点的最晚启动时间τ(vi)为所有{出度节点最晚启动时间-出边权值}中的最小值

2.PERT图

(1)边代表工序,每条边的权值表示这个工序所花时间。节点表示"所有入边都完成了"。

(2)最早启动时间:依然可以用PT图的算法进行计算,得到π(vi)。此时每个节点的π值表示所有出边对应工序的最早启动时间

(3)最晚启动时间:依然可以用PT图的算法进行计算,得到τ(vi)。此时每条边(vi,vj)对应工序的最晚启动时间=τ(vj)-(vi,vj)边的权值

PT图和PERT图计算关键路径的复杂度都是O(m)

2.8中国邮路

中国邮路描述的问题是这样的:每条边都必须被访问到,如果原图有欧拉回路,则每条边都只需访问一次;但如果原图没有欧拉回路,则势必有的边需要被重复访问。我们想求满足条件的所有回路中长度最短的回路,这就是中国邮路问题。

1.无向图的中国邮路

【判定】判定一个回路是最佳邮路的充要条件:(1)每条边最多重复一次(2)在任意一个回路上,重复的边权之和小于未重复的边权之和

【构造】第一步:找出所有度为奇数的节点(一定可以找出偶数个),假设找出k个,在图中增加k/2条边,使得每个节点度数都变为偶数。第二步:按照判定条件(2)检查每一个回路,如果不满足要求,就把该回路上的重复的边变成不重复的,不重复的边变成重复的。直到所有回路都满足要求。

2.有向图的中国邮路

只考虑存在中国邮路的情况。(某些情况,比如某个点正度或负度为0,时,不存在中国邮路)

【构造】第一步,设立超发点s和超收点t。第二步,增加边。第三步,寻找从s到t的d(s)条最短路径,这d(s)条最短路径经过的边的就是原图中需要重复的边。文章来源地址https://www.toymoban.com/news/detail-448004.html

到了这里,关于离散数学(2) 第二章 道路与回路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【考研数学】概率论与数理统计 —— 第二章 | 一维随机变量及其分布(2,常见随机变量及其分布 | 随机变量函数的分布)

    承接前文,我们继续学习第二章,一维随机变量及其分布的第二部分内容。 (一)(0-1)分布 设随机变量 X X X 的可能取值为 0 或 1 ,且其概率为 P P P { X = 1 X=1 X = 1 } = p , =p, = p , P P P { X = 0 X=0 X = 0 } = 1 − p ( 0 p 1 =1-p(0 p 1 = 1 − p ( 0 p 1 ,称 X X X 服从(0-1)分布,记为 X ∼ B

    2024年02月11日
    浏览(47)
  • 离散数学·通路与回路、图的连通性、连通度

    通路 —— 点边点边……点(点边可以重复) 注意 长度 的概念 ——边数 回路 —— 最后又回到自己,如其字面意思 简单 —— 边互异(边不可重复) 初级 —— 点互异(点不可重复,除了起点终点) 注意 路径 和 圈 所指代的 复杂通路 应该不是很重要,先不看 注意是在 无

    2024年02月03日
    浏览(75)
  • 第二章(第二节):无穷小量和函数

    若 lim f(x) = 0 , 则称函数 f(x) 当 x → x 0 时是无穷小量,简称: 无穷小 。      x→ x 0 定理1. 有限多个 无穷小量的代数和仍是无穷小量 定理2. 有限多个 无穷小量的积也是无穷小量 定理3.常数与无穷小量的积也是无穷小量 定理4.有界变量与无穷小量的积是无穷小量 当 x→

    2024年02月08日
    浏览(53)
  • 离散数学 --- 图论基础 --- 图的同构,通路与回路,可达性与最短通路

    同一个图(这里的图是抽象的数学定义)可以有不同的图形表示方法 1.重数:两点之间的平行边的个数   1.得到 n! 的过程,一个图中的一个结点在另一个图中对应的结点有n种可能(黄框中定义的图来讨论),这个对应好后下一个结点有 n - 1 种可能,再下一个有n-2种,直到最

    2024年01月25日
    浏览(43)
  • 第二章 变量和引用

    目录 2.1. 深入认识变量 2.1.1. 什么是变量 2.1.2. 变量的名称 2.1.3. 变量的类型 2.1.4. 变量的定义 2.1.5. 自定义变量 2.1.6. 环境变量 2.1.7. 位置变量 2.2. 变量赋值和作用域 2.2.1. 显示赋值:变量名=变量值 2.2.2. read 从键盘读入变量值 2.2.3. 变量和引号 2.2.4. 变量的作用域 变量是在程序

    2024年02月20日
    浏览(54)
  • 第二章 编程基础

    内容框图 单行注释: 快速注释: 多行注释: 使用+号拼接 使用拼接函数 列表 列表是一个有序的序列结构,可以存放不同数据类型的数据。 列表每一个元素有一个索引。 列表可以进行一系列操作,添加,删除,修改元素。 元组是一个有序的序列结构,基本结构和列表类似。

    2024年02月06日
    浏览(65)
  • 第二章:基本概念(下)

    人们往往将信号称为**“软件中断”**。进程收到信号,就意味着某一事件或异常情况的发生。 信号的类型很多,每一种分别标识不同的事件或情况。采用 不同的整数 来标识各种信号类型,并以SIGxxxx 形式的符号名加以定义。 内核、其他进程(只要具有相应的权限)或进程自

    2024年02月08日
    浏览(48)
  • 信息系统安全(第二章)

    2.1.1基本概念 在网络开放环境中,信息系统易遭受各种各样的攻击,例如消息窃听,身份伪装,消息伪造与篡 改,消息重放等。这种入侵行为的实施相当一部分建立在入侵者获得已经存在的通信通道或伪装身 份与系统建立通信通道的基础上。因此,在信息系统中,用户在登

    2024年04月09日
    浏览(88)
  • 第二章 翻译

    Section Ⅲ Translation Directions: In this section, there is a text in English. Translate it into Chinese. Write your translation on ANSWER SHEET 2. (15points) “Sustainability” has become a popular word these days, but to Ted Ning, the concept will always have personal meaning. Having endured a painful period of unsustainability in his own life made it

    2024年02月08日
    浏览(66)
  • 第二章 进程管理

    目录 2.1  进程的引入 2.1.1程序的顺序执行 1.程序的顺序执行 2.程序顺序执行时的特征 2.1.2  程序的并发执行及其特征 1.并发执行的概念 2.程序并发执行时的特征 2.1.3  进程的定义与特征 1.进程的定义 2.进程的特征 2.1.4  进程的基本状态及转换 1.进程的三个基本状态

    2024年02月04日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包