IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 深入理解最小生成树的几种贪心算法 -> 正文阅读

[数据结构与算法]深入理解最小生成树的几种贪心算法

在数据结构中比较熟知的最小生成树的几种算法,知道可以这样去做,但是正确性却没有特别强调,也没有重点验证,下面从理论证明最小生成树的几种算法还有它们正确性的验证。

一、概念

对一个带权重的无向连通图,有权重以后生成树的所有的权才有大小,如果权重都为1的话那就没有必要去比较了。

生成树的概念是首先有一个图,从图里面要找到一颗树来,这个树要包含所有顶点,树是连通的,从图里找出一些边来构造这个树,这个树的选择就有很多种,要包含这些点的路径就有很多种,但是其中有一个是最小的,比较的是最小的生成树的权重,所最小的生成树的权重如果能达到最小,那就是最小生成树。
mtree-001
G 的一棵生成树T 是包含了G 的所有顶点的树, 树中各边的权之和W(T) 称为树的权,具有最小权的生成树称为G 的最小生成树.

二、实例

1、图示

G=(V,E,W),V={1,2,3,4,5,6},W 如图所示.
E = {{1,2},{1,3},{1,4},{2,3},{2,5},{3,4},{3,5},{3,6},{4,6},{5,6}}
mtree-002
左边是一个图,图里面连接的权重有顶点:1,2,3,4,5,6。顶点1与它相临的顶点有顶点2、3、4。顶点3相邻的顶点1、2、4、5、6……权重都在边上。

2、构造最小生成树

(1)从顶点1出发,权值最小的边是1,所以到达顶点3
(2)从顶点3出发,权值最小的边是4,所以到达顶点6
(3)从顶点6出发,权值最小的边是2,所以到达顶点4
(4)从顶点4出发,任意一条边都会构成回路,退回顶点6
(5)从顶点6出发,任意一条边都会构成回路,退回顶点3
(6)从顶点3出发,除权值为4外权值最小的为5,到达顶点2
(7)从顶点2出发,权值最小的边是3,所以到达顶点5

右边这颗树包含了所有顶点,这颗树里面有很多边,这些边的所有的权重加起来是最小的,其实它的构造过程就是由这些边来构成的,这些生成树由这些性质

三、性质

如果是生成树,这个树是没有环的,只有n-1条边,所有的顶点数是n,图G是n个顶点,接下来连接所有顶点。找到任何一颗生成树,如果在加入任何一条不在这颗树上的任意一条边,那么都会形成一个圈。

1、命题 设G是n 阶连通图

那么

(1) T 是G 的生成树当且仅当T 无圈且有n-1条边.

(2) 如果T 是G 的生成树,e?T,那么T∪{ e }含有一个圈C(回路).

mtree-003
把不在这个树以外的任何一条边加进来就形成圈了,在这个圈里面可以去掉任何一条边,由一颗生成树变化成另外一个生成树,这两个生成树之间有不同,所有点都在里面不同就只能在边上不同,另外一个不同就是生成树的权重(所有边之和)

(3) 去掉圈C的任意一条边,就得到G的另外一棵生成树T’

mtree-004
这些性质在证明Prim算法和Kruskal算法会在证明的时候用到

四、生成树性质的应用

如果能够改进生成树的性质,加上一条本来不在这个树里面的边,因为加进去之后形成回路,去掉一条边得到一个新的树。如果这个树的权重有降低的话,那就找到了一个更好的生成树。

1、算法步骤

选择边.
约束条件:不形成回路
截止条件:边数达到n-1.

2、改进生成树T 的方法

在T 中加一条非树边e , 形成回路
C,在C 中去掉一条树边ei,形成一棵新的生成树T’
mtree-005

五、求最小生成树

1、问题:

给定连通带权图G = (V, E, W),w(e)∈W是边e 的权。求G 的一棵最小生成树。

在无向连接带权图里面,如何寻找一颗最小生成树,就是我们熟悉的Prim算法和Kruskal算法。

2、贪心法:

Prim 算法,Kruskal算法

生成树在网络中有着重要的应用,网络传输的时候有很多数据要从一个地方发到另外一个地方去,当这个网络拓扑是确定的情况下,知道传输代价的时候,怎么样让传输代价达到最小,那么数据的跳转,整个拓扑里找到通路。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-14 10:09:04  更:2022-05-14 10:10:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:40:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码