【数据结构】 最小生成树(一)——什么是最小生成树?

  小编近日翻书,看见最小生成树问题,小编表示茫然不知最小生成树是干什么,看字面意思猜最小生成树就是自己造一棵树呗,然后,然后……就不知道有什么用处了;听着这个名字就一直当做是一种关于树的知识,没想到竟然和图也有关系,什么关系呢?又要用在何处呢?说来话长……

最小生成树的概念:

  这个概念可是很难说啊,光看一堆百度上枯燥的文字倒不用说了,这得从一个情景导入:假设你是XX探险队的大队长,有一天你突发奇想要在各个探险营地放上一个无线通信设备(有时在诸如北极的地区通信是件麻烦事),这个通信设备还受到距离要求,最大距离越远就造价越高,现在你要干的工作就是用最少的钱让每一个探险营地都能直接/间接地与其他任何一个营地通讯。随便画张图加深理解:

  接着再看一幅图:

  这幅图相比来说有了权值,放在之前我现编的故事中则是每两营地之间通信所要画的钱;随便画出了个图,图也有了,故事也有了,怎么算呢?不着急,先来说几个问题:假设这图里一共有n个顶点,那一共有多少条边呢,谁也不知道,数据样例组数可多的呢,但要说起连接这n个顶点最少会有几条边呢?当然是n-1条边;既然要通信,还可以间接,比如1传给2,2传给3,那么1,3之间也可以通信,那有何必要回路呢?没有回路的图就不是真正的图,没有回路的图那不就是树吗?所以这才叫最小生成;“最小生成树”这个名字得分开看,拆成“最小”和“生成树”,先讲一讲什么是生成树:生成树要满足图中的n个顶点都在生成的树中,且生成树必须是一颗树,不允许有回路,那么问题来了,生成树是唯一的吗?不是!如下图所示,红色部分点亮的边为生成树的边,这几幅图都是生成树,可见生成树是不唯一的,在故事中求的是最小花费,所以才引来了最小二字;紧接着,咱们来说一说什么是最小?这个相对来说更容易理解,说白了就是在所有生成树中挑一棵权值和最小的,但是,最小生成树是唯一的吗?不一定!假如一棵树所有边权值都一样,我才不信只有一个最小生成树呢!忘了强调一点,求最小生成树的前提是这个图是联通图,假设有一点与其他点没有连边,就不可能凑够n-1条边那么了解了最小生成树是什么,但是又能适用于哪些问题呢?就像小编最初现编的故事一样,要求最小权重的题。

  

  了解了什么是最小生成树及其用处,那么如何计算最小生成树,又要用什么算法?欲知后事如何,且听下回分解。

专栏:

【数据结构】 最小生成树(一)——什么是最小生成树?

【数据结构】 最小生成树(二)——kruskal算法

【数据结构】 最小生成树(三)——prim算法

【数据结构】 最小生成树(四)——利用kruskal算法搞定例题×3+变形+一道大水题

posted @ 2019-02-02 17:32  c1714-gzr  阅读(2825)  评论(0编辑  收藏  举报