当在Kruskal算法上使用贪婪策略时,子问题正在解决什么?



Kruskal的算法在每次迭代中选择最小的边。虽然最终目标是获得MST,但要解决的子问题是什么?是要得到一个重量最小且完全连接的森林吗?

就像在维基百科中一样,我们知道:

Kruskal 算法是一种最小生成树算法,它找到连接森林中任意两棵树的最小可能权重的边。

这意味着它会找到形成包含每个顶点的树的边子集,其中树中所有边的总权重最小化。

所以Kruskal正在寻找一个最小生成树,但这意味着什么?它正在寻找一棵总成本(权重总和(最小化的树。根据最优原则,我们已经知道最短路径的任何子路径都是其终端节点之间的最短路径。

为了更好地回答您的问题,在每次迭代中,您都在寻找连接两个顶点而不进行循环的最短边。

在算法的每一步,您都有给定数量的边k和 (a( 可以由k条边组成的最小权重森林。在最后一次迭代之后,该林实际上将是一棵树。该森林仍然具有该属性:它是一个最小权重的森林,可以由n-1条边组成。

由于它也是一棵树,并且由于它必须包含图的所有节点(因为没有循环(,因此它也是一个最小生成树。

最新更新