博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Kruskal算法的思想、证明及步骤
阅读量:7229 次
发布时间:2019-06-29

本文共 880 字,大约阅读时间需要 2 分钟。

Kruskal算法思想:

         把n个顶点看成看成n棵分离的树(每棵树只有一个顶点),每次选取可连接两个分离树中权值最小的边把两个分离的树合成一个新的树取代原来的两个分离树,如果重复n-1步后便得到最小生成树。

Kruskal算法步骤:

T0存放生成树的边,初值为空

C(T0) 最小生成树的权,初值为0

VS 分离树顶点的集合,初值为 { {v1} {v2} … {vn} }

A B W分别为边的顶点和权值数组,由用户输入

1)         T0←0, C(T0)←0, VS←{ {v1} {v2} … {vn} }, A, B, W按W排序后构成队列Q

2)         If n(VS)==1 then stop else goto 3

3)         取Q第一组数组(u, v, w) 并从Q中将其删除.

4)         If u, v 属于同一个集合 then goto 3 else 分属两个集合X, Y, goto 5.

5)         T0←T0∪(u, v), C(T0)←C(T0)+w, VS←VS-X-Y+X∪Y goto 2.

 

Kruskal算法证明:

树定义:无圈连通图。

引理1:一个图是树 等价于 一个图无圈且任意不相关联的顶点u, v ,图G+(u, v)则必存在唯一一个圈。

         设由Kruskal算法生成的T0序列为e1, e2, e3 … ev-1,假设其不是最小生成树。任意最小生成树T定义函数f(T):T0中不存在于T中边在T0的下标。设T1是使f(T)最大的变量,设f(T1)=k,即ek不存在于T1中,T1为树且ek不在T1中,所以由引理1得T1+ek必存在圈C,C上必有e,k ≠ek,e,k不在T0 中。现令T2 = T1 - e,k + ek,则T2也为生成树但由Kruskal算法可知ek是使e1, e2 … ek-1, ek无圈的权值最小的边,e1, e2 … ek-1, e,k是树的子图必无圈故e,k的权值必定小于ek即T2的总权值不大于T1的权值,因T1是最小生成树,故必T2也是最小生成树,但f(T2)>k与k是f函数最大取值矛盾,故T0是最小生成树。

转载地址:http://elsfm.baihongyu.com/

你可能感兴趣的文章
CACTI 95th模版导入 及95th模板下载
查看>>
请求头header里的contentType为application/json和capplition/x-www-form-urlencoded
查看>>
迁云的那些事
查看>>
jquery ui 和ext.js一些区别,欢迎给位指正批评
查看>>
clj-xmemcached: memcached client for clojure
查看>>
SecureCRT日志自动记录
查看>>
磁盘 io 测试
查看>>
客户不提供开发者账号打包上传应用的处理方法
查看>>
Netfilter与FreeBSD的网络包过滤
查看>>
闲谈IPv6-现状和过渡
查看>>
我的友情链接
查看>>
Xcode3.2.6+iOS4.2無法上傳iPhone
查看>>
XMPP开发环境的搭建
查看>>
Docker 数据卷,数据卷容器详细介绍
查看>>
使用rman备份到挂载的NFS目录,提示ORA-19504-27054报错
查看>>
通过 rsync 搭建 CentOS 本地 yum 源服务器
查看>>
hadoop hive 常见问题解决持续更新
查看>>
如何做不浮躁的人
查看>>
终端服务设施方案共享(Part3)
查看>>
linux的基本指令--第三节
查看>>