在一个连通网的所有生成树中,各边的代价之和最小的那颗生成树称为最小代价生成树,简称为最小生成树。
MST :假设N=(V,{E})是一个连通网,U是顶点集V的一个非空子集。若(u,v)是一条具有最小权值(代价)的边,其中u∈U,v∈V-U,则必存在一棵包含边(u,v)的最小生成树。
在书中有两种算法:Prim和Kruskal算法。
一、Prim算法(加点法)
Prim算法归并顶点,与边无关,适用于稠密图。设子集u为图的顶点集v的子集,将起始顶点k存入子集u中,在v-u中找到其余顶点,使k与u的权值最短。将k放入u中,并将k视为起始顶点,重复该操作,直到u与v相等为止。
二、Kruskal算法
这个算法又称为加边。首先,将所有的顶点设置为独立的连通量(其实就是将每个点给一个单独的序号),然后在边的集合中找权值小的边。如果这个边的两个连通分量不等,则将该边输出,让这两个边的连通分量相等(这个连通分量法首先解决了边的匹配问题,然后将分量置相等,解决了回路的问题),重复操作,直到所有的点的分量一致。