图的连通度问题

合集下载

图的连通性问题

图的连通性问题

G
H
图1 有向图G
A C
B D
F
G H
E
图2 逆置图G’
Step3:根据步骤1得到的遍历序列,按照结点结束访问时间递减 排序后的结果 EFGHACBD 下面,按照该结点序列顺序对逆置图G’所深度优先遍历,得到 的深度优先遍历森林如图3所示。森林中共有4棵树,其中(a)和(d) 只有一个结点,这里认为单结点也是一个强联通分量(在实际应 用中可以根据实际需要将这种情况过滤掉)。 A C E B D 图2 逆置图G’ F G A B D F G H
二、Kosaraju算法求解过程实 例
下面结合实例说明Kosaraju算法的基 本策略。图1给出了一个有向图G。

A
C
B
D
图1 有向图G
F
E
G H

Step1:假设从DFS在遍历时按照字母顺序进行,根据 Kosaraju算法,在步骤1中我们得到的遍历顺序可以表达为 [A,[C,[B,[D,D],B],C],A][E,[F,[G,[H,H],G],F],E] 越后出栈的点先访问 第一步所得到的顺序即为:EFGHACBD Step2:根据算法第2步,将图G逆置,得到对应的反向图G’ 如图2所示。 A C B D F E
有向图和它的转置的 强连通分量相同
所有SCC构成一个 DAG
求强连通分量使用 Kosaraju算法
一、Kosaraju算法步骤: Step1、对有向图G做dfs(深度优先遍历),记录每个结点结束访 问的时间(即节点出栈顺序,后出栈的点第二次先扫描) Step2、将图G逆置,即将G中所有弧反向。 Step3、按Step1中记录的结点结束访问时间从大到小对逆置后的 图做dfs Step4、得到的遍历森林中每棵树对应一个强连通分量。

(4-2)图的连通性

(4-2)图的连通性

(3)
(4)
(5)
(6)
(7)
欧拉图
设G=<V,E>是连通无向图 欧拉通路:在图G中存在一条通路,经过图G 中每条边一次且仅一次。 欧拉回路:在图G中存在一条回路,经过图 G中每条边一次且仅一次。(能一笔画) 欧拉图:具有欧拉回路的图。
欧拉图的判定定理
定理7-4 无向图G=<V,E>具有欧拉回路,即是 欧拉图的充分必要条件是这个图是连通的,并且 图G中所有结点的度数都是偶数,即都与偶数条 边相连。 定理7-5 无向图G=<V,E>具有欧拉通路的充分 必要条件是图G是连通的,并且图G中恰有两个度 数是奇数的结点或者没有度数是奇数的结点。
v1
e6
e1
v5
e5
e7 e4
v2
e2
v4
e3
v3
通路和回路 给定图G V , E
通路: G中前后相互关联的点边交替序列 w=v0e1v1e2…envn称为连接v0到vn的通路。 W中边的数目K称为通路W的长。 回路:在点边序列v0e1v1e2…envn中,当 v0=vn时称此通路为回路。
图1
图2
哈密尔顿图
设G=<V,E>是连通无向图 图G中存在一条经过图中的每个结点一次且仅
一次的通(回)路,称此通路为哈密顿通(回)路
哈密顿图:具有哈密尔顿回路的图。
目前还没有找到连通无向图具有哈密顿通(回)
路的充分必要条件。
?
课堂思考题:
学习了欧拉图、哈密尔顿图,请总 结他们的区别。
哈密尔顿回路与欧拉回路的区别
连通
连通、一笔
案例3
周游世界问题
1856年,英国数学家哈 密尔顿设计了一个周游世界的 游戏,他在一个正十二面体的 二十个顶点上标上二十个著名 城市的名字,要求游戏者从一 个城市出发,经过每一个城市 一次且仅一次,然后回到出发 点。

离散数学中的图的连通度与割点

离散数学中的图的连通度与割点

在离散数学中,图是一种重要的数据结构,它能够描述事物之间的关系和连接性。

图由顶点和边组成,顶点表示事物,而边表示两个事物之间的连接。

图的相关概念包括连通度和割点,它们在图的理论中起着重要的作用。

连通度是指图中任意两个顶点之间,存在一条路径相连。

如果一个图的连通度为1,那么这个图是连通的;如果连通度大于1,就代表这个图是非连通的。

连通度可以用来衡量图的强度和与外部环境的联系程度。

例如,在社交网络中,某个用户是否能够和其他用户通过共同的朋友连接在一起,就与图的连通度相关。

割点是指删除一个顶点及其相连的边后,图变为非连通的点。

换句话说,如果一个顶点是一个图中唯一的桥,那么这个顶点就是一个割点。

割点的存在会影响图的连通性和强度。

当我们删除一个割点时,原本连通的图会变得不连通。

因此,割点常常用来识别图中的脆弱点和瓶颈。

考虑一个简单的例子:一个城市的地图可以用图来表示,每个交叉路口是一个顶点,而街道则是相连的边。

在这个图中,连通度可以描述这个城市的整体交通情况。

如果城市的连通度较高,那么无论从哪个交叉路口出发,都能方便地到达其他任意交叉路口;而如果城市的连通度较低,那么有些交叉路口可能只有一条街道与之相连,这样就会导致交通流量堵塞和不便利。

割点则可以识别出城市中的环形路口或者重要的交通枢纽,当这些关键节点被破坏或者发生故障时,城市的交通系统可能会受到严重影响。

除了城市地图以外,连通度和割点还可以应用于其他领域。

例如,在计算机网络中,一台计算机与其他计算机之间的连通度可以用来评估网络的稳定性和传输速度。

在电力网络中,连通度可以用来研究电力供应的鲁棒性和可靠性。

在社会网络中,连通度和割点的概念可以揭示人际关系的紧密程度和信息传递的效率。

总结来说,离散数学中的图的连通度和割点是图的关键概念。

连通度可以衡量图的强度和连接程度,割点可以识别图中的脆弱点和瓶颈。

在不同领域中,这些概念都有着重要的应用。

通过研究和理解连通度和割点,我们能够更好地分析和优化图及相关问题。

图的点连通度边连通度总结

图的点连通度边连通度总结

图的点连通度边连通度总结点连通度的定义:一个具有N个点的图G中,在去掉任意k-1个顶点后(1<=k<=N),所得的子图仍然连通,去掉K个顶点后不连通,则称G是K连通图,K称作图G的连通度,记作K(G)。

独立轨:A,B是图G(有向无向均可)的两个顶点,我们称为从A到B的两两无公共内顶点的轨为独立轨,其最大的条数记作p(A,B)。

在上图中有一个具有7个定点的连通图,从顶点1到顶点3有3条独立轨,即p(1,3)=3; 1—2—3 , 1—7—3 , 1—6—5—4—3如果分别从这3条独立轨中,每条轨抽出一个内点,在G图中删掉,则图不连通。

若连通图G的两两不相邻顶点间的最大独立轨数最小的P(A,B)值即为K(G)。

若G为完全图(两两点可达),则K(G)=n-1,即完全把某个点的所有边删掉后才不连通。

既然独立轨是只能经过一次的边,那么可以构造网络流模型,其中每条边的容量为1,就可以限制只经过一次。

构建网络流模型:若G为无向图:(1)原G图中的每个顶点V变成N网中的两个顶点V`和V``,顶点V`至V``有一条弧容量为1;(2)原图G中的每条边e=UV,在N网中有两条弧e`=U``V`,e``=V``U`与之对应,e`与e``容量均为无穷;(3)以A``为源点,B`为汇点,求最大流。

若G为有向图(1)原G图中的每个顶点V变成N网中的两个顶点V`和V``,顶点V`至V``有一条容量为1的弧;(2)原G图中的每条弧e=UV变成一条有向轨U`U``V`V``,其中轨上的弧U``V`的容量为无穷;(3)以A``为源点,B`为汇点求最大流。

上面的模型只是求出了以A为源点B为汇点的最大流max_flow,等价于在G中只要去掉max_flow个点就会使得A与B不连通。

而图的连通度是要求去掉最少的点使得整个图不连通,做法是固定一个点为源点,枚举与源点不相邻的点为汇点,求最大流。

在所有的枚举结果中最小的max_flow值就是要求的K(G).注意如果某次枚举的汇点求出的最大流为无穷则说明此此枚举的源点与汇点是强连通的。

应用离散数学图论图的连通性题库试卷习题及答案

应用离散数学图论图的连通性题库试卷习题及答案

§5.2 图的连通性习题5.21.证明或否定:(1)简单图G 中有从点u 到点v 的两条不同的通路,则G 中有基本回路。

(2)简单图G 中有从点u 到点v 的两条不同的基本通路,则G 中有基本回路。

解:(1)简单图G 中有从点u 到点v 的两条不同的通道,则G 中有回路。

(2)简单图G 中有从点u 到点v 的两条不同的路,则G 中有回路。

解 (1)不一定:如下图,点1与点3之间有两条通道:(1、2、3)和(1、2、1、2、3),但图中没有回路。

(2)一定:设两条路分别为),,,,,(211v x x x u L m =和),,,,,(212v y y y u L n =。

若对m i ≤≤1,n j ≤≤1有j i y x ≠,则),,,,,,,,,,(12121u y y y y v x x x u n n m -是一条回路。

否则假设l k y x =且是离u 最近的一对(即对k i ≤≤1,l j ≤≤1,不存在j i y x =),则),,,,,,,,,(12121v y y y x x x u l k -是一条回路。

2.设G 是简单图,)(G δ≥2,证明G 中存在长度大于或等于1)(+G δ的基本回路。

证:以图G 中一点v 1出发,与之相邻的点设为v 2,由于)(G δ≥2,则v 2至少还有一个邻接点,设为v 3,若v 3与v 1邻接,则形成长度为1)(+G δ的基本回路,则若v 3不与v 1邻接,则至少还有一个邻接点,设为v 4,若v 4与v 1或v 2邻接,则形成长度为大于或等于1)(+G δ的基本回路,若v 4与v 1和v 2都不邻接,至少还有一个邻接点,设为v 5,…,依次类推,一定可以到达最后一个顶点v i ,由于)(G δ≥2,则除了v i -1外,一定会与前面的某个顶点邻接,就会形成长度为大于或等于1)(+G δ的基本回路。

3.证明:若连通图G 不是完全图,则G 中存在三个点w v u ,,,使E v u ∈)(,,E w v ∈)(,,E w u ∉)(,。

图的连通性问题

图的连通性问题
遍历到它所在的连通子图上的所有顶点。 依次从每个未访问过的顶点出发进行遍历,就可以遍历完所 有的顶点,并且可以得到非连通图的连通分量个数。
//依次从每个未访问过的顶点 //出发DFS subnets=0; for( int n=1; n<=nodes; n++ ) { if(!visited[n]) { DFS(n); subnets++; } } //从顶点n出发,DFS遍历 int DFS( int n ) { visited[n]=1; for(int i=1; i<=nodes; i++) { if( node[n][i]==1 && !visited[i] ) DFS(i); } return 0; }
11
3 1
2 4 3 2 4 1 5 0
0
5 6
8 7
9
1
(c) 2 4 8 10
6 7
7 8 9 9
(a)
前进 回退
3
5
6
在DFS的回退 Low[u]=Min{ dfn[u], 过程计算每个 Min{ low[w] | w是u的一个子女}, 顶点的low值: min{ dfn[v] | (u,v)是一条回边} } 2 3 3 1 4 2 5 6 6 7 7 8 8 10 10 9 9 9 1 1 6 6
6
求关节点的算法
从顶点3出发进行深度优先搜索,得到图(b)所示的生成 树,并改画成图(c)所示的树形形状。 图(c)中每个顶点外侧的数字标明了进行深度优先搜索时 各顶点访问的次序,称为顶点的深度优先数,可以记在 数组dfn中。
0 1
2 4 (a)
8 7
9

7.4 图的连通性问题

7.4 图的连通性问题
L: u v a c a a c c length 0 5 0 5 6 4
5
6 e
5
c 4 6
d 2 f
1 2 3 4 5 6
a b c d e f
选择距离当前生成树最近的顶 点f。 加入到生成树中并更新。
6
a 1
5
b 3
L: u v a c a a c c length 0 5 0 5 6 0
5
7.4 图的连通性问题
7.4.1 无向图的连通分量和生成树
•连通:顶点v至v’之间有路径存在 •连通图:无向图图 G 的任意两点之间都是连通的,则称 G 是 连通图。 •连通分量:无向图的极大连通子图
无向图G
A B
无向图G的三个连通分量
A B F G
E
H K
F
I
G
J L H
E
I
J L
M
C D C
M
D K
6 e
5
c 4 6
d 2 f
1 2 3 4 5 6
a b c d e f
6
a 1
5
b 3
L: u v a c a a c c length 0 5 0 5 6 0
5
6 e
5
c 4 6
d 2 f
1 2 3 4 5 6
a b c d e f
bc=5<bf= ∞,不用更新 da=5>df=2,需要更新
6
J L
7.4.3 最小生成树
在修建道路(或者铺设线路、管道)的时候, 常常考虑的是如何既能够达到连通各个地点又能够 使得所耗费的资源最少的问题。最好的办法就是把 这些现实的问题抽象成图,比如把城市抽象成顶点 (假设有n个),把城市之间的可能存在的道路抽象 成边,从该图中寻找n-1条边,使得这n-1条边不仅 能把这n个顶点连成一个连通图,并且他们所代表的 路程之和最短。这样的连通图,形态上就是一棵树。 求解这种耗费最少的问题,就转化成为求相应图的 最小生成树(Minimum Cost Spanning Tree)的问题。

图的连通性问题

图的连通性问题

思考题
给定一系列网络之间的关系,若1与2连通,2与3 连通那么1与3就是连通的,问能否找到一个节点使它 故障后导致整个网络都崩溃,输出找到的点以及故障 后禅僧的连通的子网络数。
思考题
一国有n个党派,每个党派在议会中都有2个代表, 现要组建和平委员会,要从每个党派在议会的代表中 选出1人,一共n人组成和平委员会。已知有一些代表 之间存在仇恨,也就是说他们不能同时被选为和平委 员会的成员,现要你判断满足要求的和平委员会能否 创立?
2.割点和桥
证明: 如图,考虑u的任意子结点v。 如果v及其后代不能连回f,则删除 u之后,f和v不在联通; 反之,如果v或者它的某一个后代 存在一条反向边连回f,则删除u之 后,以v根的整棵子树中的所有结 点都可以利用这条反向边与f连通。 如果所有子树中的结点都和f连通, 根据“连通”关系的传递性,整 个图就是连通的。
3.强连通分量
Kosaraju算法
3 12 11 8 10 9 6 2 1
7
5
4
第一遍DFS进行标号,根据搜索的顺序不同,标号结果也不同
3.强连通分量
Kosaraju算法
3
12
11
8
9
6
2
10
7 反向之后的图
5
4
1
11 12 8,9, 10
2,3
5,6, 7
4
1
根据反向后的图,确定联通分量
3.强连通分量
w u v w u v
? 图1
? 图2
3.强连通分量
Tarjan算法代码实现
思考题
某省调查城镇交通状况,得到现有城镇道路统 计表,表中列出了每条道路直接连通的城镇。省 政府“畅通工程”的目标是使全省任何两个城镇 间都可以实现交通(但不一定有直接的道路相连, 只要互相间接通过道路可达即可)。问最少还需 要建设多少条道路?Βιβλιοθήκη A BABD
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

图的连通度问题研究1.图的连通度的定义图要么是连通的,要么是不连通的。

但对于任意连通图来说,它们的连通程度也可能是不同的。

为了精确地体现连通的程度,下面将引入两个概念:边连通度和顶点连通度。

设G = (V, E)是一个n阶图。

如果G是完全图K n,那么我们定义它的顶点连通度为κ(K n) = n– 1否则,定义它的顶点连通度为κ(G) = min{|U| : G v-u是非连通的}即最小顶点数,删除这些顶点便是非连通图。

图G的边连通度定义为从图G中删除边而使G非连通的最小边数,用λ(G)表示。

这里的图G=(V, E)代表无向图或有向图,且没有自环和重边。

下面将主要讨论无向图的边连通度,有向图的边连通度和顶点连通图可以以此类推。

2.无向图的边连通度在无向图G中,令顶点v的度数deg(v)表示与顶点v相连的边的数目。

无向图G的最小度δ(G)定义为:δ(G) = min{deg(v) | v属于G}。

考虑有向图G中,v 的入度表示为in-deg(v),v的出度表示为out-deg(v),相应的最小度为:δ(G) = min{in-deg(v), out-deg(v)| v属于G}。

在整篇文章中,图的点数用n表示,边数用m表示。

另u和v表示图G中的一对不相同的点。

定义λ(u, v)表示从图G中删除最少的边,使得u和v之间不存在任何路径。

在有向图G中,λ(u, v)表示从G中删除最少的弧(有向边),使得不存在任何从u到v的有向路径。

注意到,在无向图中,有λ(u, v) =λ(v, u),在有向图中却不符合这个等式。

显然,λ(u, v)就是图中u和v的最小割。

求两点之间的最小割,根据最大流最小割定理,可以用最大流算法求解:令u为网络的源点,v为网络的汇点,每条边的容量为1,u到v的最大流便是u和v之间的最小割。

预流推进算法可以在O(nm)时间复杂度下求出最大流。

另外,每条边的容量都为1,可以用Hoproft算法在)O的时间复杂度下求出单位容量网络的最大流。

具体算法的实现不在本文讨论范围之内,这里不再赘述。

显然,图G的λ(G)即所有点对的λ(u, v)的最小值。

对于有n个点的无向图中,有n(n-1)/2个无序点对需要计算,而在有向图中有n(n-1)个有序点对需要计算。

然而,经过证明,计算λ(G),远远不需要枚举这么多点对计算λ(u, v)。

考虑如下一个连通图G的抽象图,令S为图G中的一个最小边割集。

图1在图1中,L和R分别表示被S分割开的两个点集,不妨叫L位于S的左侧,R位于S的右侧。

注意到,u为位于S一侧的任意一个顶点,那么至少存在一个顶点v在S的另一侧,使得λ(u, v) =λ(G)。

因此可以按如下方法求出λ(G):算法1输入图G = (V, E)1.令u为V中任意一个顶点,令X = V– {u}。

2.枚举X中的所有点v,用网络流求出λ(u, v)。

3.则λ(G) min{λ(u, v) | v X}。

继续观察图1,如果能找到一个集合Y,满足Y既包含L中的点又包含R中的点,即Y∩L≠ Ø 且Y∩R≠ Ø,那么就能把算法一第一步中的V替换成Y,仍能求得正确的λ(G)。

这样一个集合Y,叫做图G的λ覆盖(λ– covering)。

显然,T越小,需要求网络流的次数越少。

下面的分析将得到一个新的算法。

定理1:如果λ(G) < δ(G) 那么有|L| > δ且|R| > δ (δ = δ(G))证明:设L = {v1, v2, …,v k},显然有deg(v1) + deg(v2)+…+deg(v k) >= k·δ(1)同样有deg(v1)+deg(v2)+…+deg(v k) = 2|E(<L>)| + |S| (2)这里,|E(<L>)|表示点集L包含的所有边的集合。

(1)(2)两式的等号成立,当且仅当是完全图的情况。

因此联合(1),(2)两式可以得到δ·k≤k(k– 1) + |S|。

因为|S|=λ(G) < δ(G),所以有δ·k < k(k– 1) + δ。

又因为L > 1即k >1(否则λ(G) = δ(G)),所以不等式两边同除以(k – 1),得到k > δ,即有|L| > δ 。

同理可以证明|R| >δ。

根据定理1,可以得到下面的一些推论:推论1 :当λ(G) < δ(G)时,那么L中至少存在一个点与S中的边不直接相连,R也同样。

推论1显然成立,否则|L| = δ。

推论1也说明在这个情况下,图的直径大于等于3。

推论2 :T为G的一个生成树,Y是T的非叶子顶点集合。

如果λ(G) < δ(G),那么Y 是G的一个λ覆盖,也就是说L,R中至少有一个点在Y中。

分析:若L中顶点都是Y中的叶子顶点,那么就有|L| = |S| = δ,矛盾。

由推论2可以得到算法2:算法2:1.找到一棵生成树T,Y是T的非叶子顶点集合。

2.任选一个u,X = Y /{u}。

3.对于所有v属于X,求出λ(u, v)。

4.{}X v v u c ∈=|),(min λ5.λ(G ) = min{c , δ(G )}容易证明算法2的正确性:如果λ(G ) < δ(G ),那么Y 是G 的一个λ覆盖,则c 便是λ(G );否则λ(G ) = δ(G ),步骤5将得到正确答案。

然而,求一个叶子顶点最少的生成树是NP-难问题。

因此算法2比较算法1的优势是,仅仅减少了λ(u , v )的计算量,而并没有降低时间复杂度的级别。

下面介绍一种另一种求解较小的λ覆盖方法,也是基于生成树的。

注意到推论2的证明也说明了当λ(G ) < δ(G ),L 或R 集合不可能只包含生成树的叶子顶点。

也就是说在λ(G ) < δ(G )的情况下,令Y 为生成树T 的非叶子顶点集合,那么Y 和V (T )都是图G 的一个λ覆盖。

下面的算法中,对于G 中的任意顶点u ,I (u )所有与u 相邻的边的集合,A (u )表示所有与u 相邻的顶点集合。

算法3 输入:图G输出:生成树H (V , E ) 1.令V (H ) ← Ø,E (H ) ← Ø。

2.任选一个顶点,V (H ) ←)(}{u A u ⋃,E (H ) ←I (u )。

3.选择H 中的一个叶子结点w ,对于所有H 中的叶子结点r ,满足|))()(()(||))()(()(|H V G V r A H V G V w A -⋂≥-⋂。

4.对于所有))()(()(H V G V w A v -⋂∈,把v 加入V (H ),把边wv 加入E (H )。

5.如果|E (H )| < |V (H )| - 1,那么转第3步,否则算法终止。

算法3是用贪心的方法生成叶子结点尽量多的生成树。

由此可以得到求λ(G )的另一个算法:算法4:1.用算法3找到一棵生成树H ,Y 是H 的非叶子顶点集合。

2.任选一个u ,若|Y | < |V (H ) – Y |,则X = Y /{u },否则X = (V (H ) – Y )/{u } 3.对于所有v 属于X ,求出λ(u , v )。

4.{}X v v u c ∈=|),(min λ5.λ(G) = min{c, δ(G)}根据算法第2步可以知道,算法4最多进行n / 2次网络流求解λ(u, v)。

还可以利用定理1和支配集改善了边连通度的算法。

在图G=(V, E)中,集合D∈叫做支配集,当且仅当对于V中的任意点u,要么u属于D,要么和G中V的一个顶点相邻。

推论3设D为G的一个支配集,当λ(G) <δ(G),那么D是G的一个λ覆盖,也就是说L,R中至少有一个点在D中。

因为根据推论1可以知道,当λ(G) <δ(G)时,L和R中至少存在一个点与S中的边不直接相连,因此若D只属于L或R,那么另一侧集合中至少有一个顶点不被支配。

因此可以用贪心的方法求出极小支配集,然后利用与算法2类似的方法求出边连通度。

根据均摊计算D中的每个顶点的λ(u,v)的复杂度,Matual能够将求解λ(G)总的时间复杂度降到O(nm)。

具体的实现和证明方法,由于缺乏资料,所以这里不能够提供,有兴趣的读者请上网寻找Matual的论文(我没有找到 )。

三、图的连通度的一些研究成果四、总结大部分关于图连通度的算法都是几乎基于网络流的。

算法4和支配集的算法,经过实践,对于n < 500的随机数据都很快。

但存在一些极端情况:如非叶子结点个数为n/2的树等等。

如果在实践过程利用增广路算法求解λ(u, v),将会比预流推进算法更好,因为总是求λ(u, v)的最小值,所以可以利用δ(G)和已求出的λ(u, v)进行限界,而且可以避免某些极端情况。

很可惜的是,没有能在网络上找到Matula目前最优算法的论文。

参考文献《On the Evolution of Graph Connectivity Algorithms》Abdol–Hossein Esfahanian。

相关文档
最新文档