最小生成树问题

来源:互联网 发布:cnc数控编程入门教程 编辑:程序博客网 时间:2024/06/06 07:00

1.概念

    http://www.tyut.edu.cn/kecheng1/site01/suanfayanshi/minispantree.asp

    根据权值递增的顺序连接两个点

2.概述

在一给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即),而 w(u, v) 代表此边的权重,若存在 T 为 E 的子集(即)且为无循环图,使得的 w(T) 最小,则此 T 为 G 的最小生成树
最小生成树其实是最小权重生成树的简称。
3.求最小生成树的一个典型实例

问题:假设要在 n 个城市之间建立通讯联络网,则连通 n 个城市只需要修建 n-1条线路,如何在最节省经费的前提下建立这个通讯网?

解释:n个城市间,若任意两个城市都有一条通讯线,则最多可设置n(n-1)/2条线路,但实际上仅需n-1条线路,即可实现n个城市连通通讯。

问题演化

要在n个城市间建立通信联络网,

顶点——表示城市;

边的权——城市间建立通信线路所需花费代价;

问题分析

n个城市间,最多可设置n(n-1)/2条线路;

n个城市间建立通信网,只需n-1条线路;

如何在可能的线路中选择n-1条,能把所有城市(顶点)均连起来,且总耗费(各边权值之和)最小。

该问题等价于:在n个顶点的连通网中,构造网的一棵最小生成树, 即:在 e 条带权的边中选取 n-1 条边(不构成回路), 使“权值之和”为最小。

如何求最小生成树?有两种方法:Prim算法和Kruskal算法。


原创粉丝点击