今天听了CLRS的第二作者讲的课程,关于最小生成树的算法。
其实就是先模拟一下小样例(不是单纯模拟,而是发现其中的规律,要思考)
然后发现最优子结构-如果(u,v)是一条唯一连接两点的边,那么将原图拆分为两块(一块包含u,一块包含v),两图分别最优解+dist[u,v]就是原图的最优解了。
然后发现这样做会有很多很多的重叠子问题:把每次的(u,v)换一换顺序就一堆重叠子问题。于是就有动态规划的思路了……
别急!
这里还有一个性质:如果(u,v)在当前图中边权最小,则(u,v)必在此图的最小生成树中。
证明:
我们把此图(V,E)的点集合分为两个点集集合(A,B)且u∈A,v∈B,且A+B=V,A&B=?;则在(V,E)的最小生成树中,必有一条边连接(跨越)A,B两个集合。
然而(u,v)必定比这条边优。所以(u,v)必在此图的最小生成树中。
贪心证明完毕!
时间: 2024-12-19 05:51:50