证明为什么题解里的做法是对的
查看原帖
证明为什么题解里的做法是对的
201499
OneMore14楼主2024/1/14 18:59

题解里都只有说要怎么做的,没有解释为什么这样做是对的。选了3 * (n - 1)边,不怕这些边不够组成一颗生成树吗?不怕存在更小的边没有使用吗?下面证明。

  1. 证明能够生成一个生成树

比较好证明,只考虑x这一维,是排序后的点依次连接组成边,那么就已经足够组成一个生成树了,相当于一个链表的结构。再加上y,z这两个维度的边,肯定足够构造出生成树

  1. 证明能够生成最小生成树

虽然已经证明可以得到一颗生成树,但仍然担心用这些边得到的生成树不是最小生成树。我们称只用这3(n-1)条边构成的生成树是T。再假设存在一种最小生成树T',T'使用了在这3(n-1)条边之外的边(a, b),就是说这条边连了a和b两个点。

因为(a, b)不在我们构造的3(n-1)条边中,因此无论从x, y, z哪个维度排序,a和b中间都有别的点。以x维度举例: a.x 和 b.x之间,必然存在至少一个点c,使得 a.x <= c.x <= b.x,然后可以进一步得到 (a, c) + (c, b) <= (a, b)。我们将(a, c)和(b, c)替换原来T'中的(a, c)边,T'的总权值不会增加,但会多一条边构成环。我们可以删除一条边,使T'的总权值更小,由此证明T'不是最小生成树,与假设矛盾。

因此,不存在一颗包含3(n-1)条边以外的最小生成树。

2024/1/14 18:59
加载中...