Kruskal算法的思想、证明及步骤

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Kruskal算法的思想、证明及步骤
Kruskal算法思想:
把n个顶点看成看成n棵分离的树(每棵树只有⼀个顶点),每次选取可连接两个分离树中权值最⼩的边把两个分离的树合成⼀个新的树取代原来的两个分离树,如果重复n-1步后便得到最⼩⽣成树。

Kruskal算法步骤:
T0存放⽣成树的边,初值为空
C(T0) 最⼩⽣成树的权,初值为0
VS 分离树顶点的集合,初值为 { {v1} {v2} … {v n} }
A B W分别为边的顶点和权值数组,由⽤户输⼊
1) T0←0, C(T0)←0, VS←{ {v1} {v2} … {v n} }, 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 … e v-1,假设其不是最⼩⽣成树。

任意最⼩⽣成树T定义函数f(T):T0中不存在于T中边在
T0的下标。

设T1是使f(T)最⼤的变量,设f(T1)=k,即e k不存在于T1中,T1为树且e k不在T1中,所以由引理1得T1+e k必存在圈C,C上必有e,k ≠e k,e,k不在T0中。

现令T2 = T1 - e,k + e k,则T2也为⽣成树但由Kruskal算法可知e k是使e1, e2 … e k-1, e k⽆圈的权值最⼩的边,e1, e2 … e k-
1, e ,
k是树的⼦图必⽆圈故e
,
k的权值必定⼩于e k,即T2的总权值不⼤于T1的权值,因T1是最⼩⽣成树,故必T2也是最⼩⽣成树,但f(T2)>k与
k是f函数最⼤取值⽭盾,故T0是最⼩⽣成树。

相关文档
最新文档