東京大学 情報理工学系研究科 コンピュータ科学専攻 2016年8月実施 専門科目I 問題2
标签:
Author
祭音Myyura (co-authored with GPT 5.6 SOL)
Description
给定带权无向图 。最小生成树是连接全部顶点、无环且总权值最小的子图。记顶点数、边数分别为 。算法 A 如下:
- 任取一个顶点,以该点为唯一顶点的子树记为 ;
- 从空格(a)所指定的边中选择权值最小者,将该边及其端点加入 ;
- 重复步骤 2,直至 包含 的全部顶点。
(1)填写(a)。
(2)若 为稠密图(),且以邻接矩阵给出,说明算法 A 的高效实现及其时间复杂度。
(3)若 为稀疏图(),且以邻接表给出,回答同一问题。
(4)证明算法 A 得到的 是 的最小生成树。
Kai
(1)
(a)应填:恰有一个端点属于当前 的边,即割
上的边。这就是 Prim 算法。
(2)
对每个尚未加入 的顶点 ,维护
及取得该最小值的父顶点。每轮线性扫描所有未选顶点,取 最小者加入;再扫描邻接矩阵中 所在的一行以更新各 。每轮耗时 ,共 轮,故时间为 ,额外空间为 。
(3)
仍维护 ,但用以 为键的最小堆保存未选顶点。取最小值后,只沿新顶点的邻接表检查相邻边,并执行减键操作。二叉堆实现的时间为
空间为 。在 时优于邻接矩阵实现。
(4)
归纳证明:算法每轮后,都存在一棵包含当前 的最小生成树 。初始时结论显然成立。
设本轮选择跨割的最轻边 。若 ,结论不变。若 ,把 加入 会形成唯一环;环上从割的一侧走到另一侧时必经过另一条跨割边 。由 的选择,。于是
仍是生成树,且总权值不大于 ,所以也是最小生成树,并包含扩张后的 。归纳成立。算法结束时 本身含 条边并覆盖全部顶点,故 ,即为最小生成树。