破圈法vs避圈法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 3; c 1
3 6; c 4
6 4; c 2
3 2; c 5 2 5; c 3
最终得到的最小生成树如图 1.1.3 所示。
图 1.1.2 带权图 G
图 1.1.3 带权图 G 的最小生成树示意图
1.1.1.2 Kruskal 算法 给定无向连通带权图 G = (V, E), V = {1,2,...,n}。Kruskal 算法构造 G 的最小生成树的基 本思想是: (1) 将 G 的 n 个顶点看成 n 个孤立的连通分支,并将所有的边按权从小到大排序; (2) 从第一条边开始,依据每条边的权值递增的顺序检查每一条边,并按照下述方法连 接两个不同的连通分支:当查看到第 k 条边(v, w)时,如果端点 v 和 w 分别是当前两个不同 的连通分支 T1 和 T2 的端点时,就用边(v, w)将 T1 和 T2 连接成一个连通分支,然后继续查 看第 k+1 条边;如果端点 v 和 w 在当前的同一个连通分支中,就直接查看第 k+1 条边,这 个过程一个进行到只剩下一个连通分支时为止。此时,已构成 G 的一棵最小生成树。 仍以图 1.1.2 所示的带权图 G 为例说明其最小生成树的生成过程,生成过程如下所示:
边。由于权值为 1、2、3、4 的边分别连接着独立的节点,故都必须保留,得到的最小生成
图 1.1.5 去掉权值为 5 的 G 的示意图
树结果与图 1.1.3 也是一样的。
1.1.3 避圈法与破圈法比较
Prim 算法是从空图出发,将点进行二分化,从而逐步加边得到最小生成树。它是近似 求解算法, 虽然对于大多数最小生成树问题都能求得最优解, 但相当一部分求得的是近似最 优解,具体应用时不一定很方便。但是它可以看作是很多种最小树算法的概括,在理论上有 一定的意义。 Kruskal 算法也是从空图出发。它是精确算法,即每次都能求得最优解,但对于规模较 大的最小生成树问题,求解速度较慢。 破圈法是从图 G 出发,逐步去边破圈得到最小生成树。它最适合在图上工作,当图较 大时,可以几个人同时在各个子图上工作,因此破圈法在实用上是很方便的。
Hale Waihona Puke Baidu
1 3; c 1
4 6; c 2
2 5; c 3 3 6; c 4
2 3; c 5
最终得到的最小生成树和图 1.1.3 所示是一样的。
1.1.2 破圈法
破圈法可以描述如下: (1) 如果我们给的连通图 G 中没有回路,那么 G 本身就是一棵生成树; (2) 若 G 中只有一个回路,则删去 G 的回路上的一条边(不删除结点) ,则产生的图仍 是连通的且没有回路,则得到的子图就是图 G 的一棵生成树; (3) 若 G 的回路不止一个,只要删去每一个回路上的一条边,直到 G 的子图是连通没 有回路且与图 G 有一样的结点集,那么这个子图就是一棵生成树。 由于我们破坏回路的方法可以不一样, 所以可得到不同的生成树, 但是在求最小生成树 的时候,为了保证求得的生成树的树权最小,那么在删去回路上的边的时候,总是在保证带 权图仍连通的前提下删掉权值较大的边, 保留权值较小的边。 破圈法就是在带权图的回路中 找出权值最大的边,将该边去掉,重复这个过程,直到图连通且没有圈为止,保留下来的边 所组成的图即为最小生成树。下面仍利用图 1.1.2 对破圈法进行说明。 首先是去除权值大的边,并且检测去除该边后整个图是否连通,对于图 1.1.2 来说,即 第一步去掉权值为 6 的边,如图 1.1.4 所示。
1.1.1 避圈法
避圈法的主要思想就是:开始选一条最小权的边,以后每一步中,总从与已选边不构成 圈的那些未选边中,选择一条权最小的(每一步中,如果有两条或两条以上的边都是权值最 小的边,则从中任选一条) 。避圈法主要分为两种:Prim 算法和 Kruskal 算法,下面分别进 行介绍。 1.1.1.1 Prim 算法 设 G = (V, E)是连通带权图, V = {1,2,…,n}。 构造 G 的最小生成树 Prim 算法的基本思想 是:首先置 S = {1},然后,只要 S 是 V 的真子集,就进行如下的贪心选择:选取满足条件 i∈S, j∈V – S,且 c[i][j]最小的边,将顶点 j 添加到 S 中。这个过程一直进行到 S = V 时为 止。在这个过程中选取到的所有边恰好构成 G 的一棵最小生成树。图 1.1.2 显示了某一带权 图。最小生成树的生成过程如下:
1.1
最小生成树
最小生成树: 一个有 n 个结点的连通图的生成树是原图的极小连通子图, 且包含原图中
的所有 n 个结点,并且有保持图连通的最少的边,如图 1.1.1 所示。
图 1.1.1 最小生成树示意图
设 G = (V, E)是无向连通带权图, 即一个网络。 E 中的每一条边 (v, w) 的权为 W(v, w)。 如果 G 的子图 G’是一棵包含 G 的所有顶点的树,则称 G’为 G 的生成树。生成树上各边权 的总和称为生成树的耗费。 在 G 的所有生成树中, 耗费最小的生成树称为 G 的最小生成树。
图 1.1.4 去掉权值为 6 的 G 的示意图
从图中可以看出,去掉权值为 6 的边后整个图仍是连通的。所以接下来去除权值为 5 的边,并且检测去除该边后图是否连通,结果如图 1.1.5 所示。由图可知,去掉所有权值为 5 的边会造成图 G 不连通,因此 2 3; c 5 这条边是必须保留的。然后再去除权值为 4 的