求图的最小生成树的Prim、Kruscal算法,其实都是由最小生成树的性质推来的,掌握了该性质,便能较容易地推导出这两种算法。
最小生成树的性质
无向图G的顶点集为 V V V,设 U U U为 V V V的真子集, u ∈ U u\in U u∈U, v ∈ ( V − U ) v\in (V- U) v∈(V−U),边u-v是连通 U U U、的所有边中权重最小的一条,则边u-v一定在G的最小生成树(MST)中。
反证法证明:假设T是一个MST,边u-v不在该MST中,先把它加入到T,则出现包含该边的环;T中必存在另一条边 u ′ − v ′ u^\prime-v^\prime u′−v′,连接题中两个集合,删除它后,环消失,出现新的MST,并且比原MST的权重更小,矛盾。
Prim算法
思路就是任取一个顶点作为初始U,不断寻找连接两个子集的所有边中权重最小的一条,把此边在 V − U V-U V−U上的顶点移到 U U U,重复这个操作,直至U包含全部顶点。