问答题 已知一个无向图如下图所示,要求分别用Prim和Kruskal算法生成最小生成树(假设以①为起点,试画出构造过程)。
【正确答案】正确答案:设连通网N=(V,{E}),设V是N的顶点的集合,E是N上边的集合。Prim算法从U={u 0 }{u 0 ∈V),TE={}开始,重复执行下述操作:在所有u∈U,v∈V—U的边(u,v)∈E中找一条代价最小的边(u 0 ,v 0 )并入集合TE,同时v 0 并入U,直至U=V为止。此时,TE中必有n一1条边,则T=(U,|TE|)为N的最小生成树。Prim算法适合边稠密的情况,算法的时间复杂度为O(n 2 )。Kruskal算法:开始令最小生成树的初始状态为只有刀个顶点而无边的非连通图T=(V,{}),图中每个顶点自成一个连通分量。在E中选择代价最小的边,若该边依附的顶点落在T中不同的连通分量上,则将此边加入T中,否则舍去此边而选择下一条代价最小的边,直到T中所有顶点都在同一连通分量上为止。算法的时间复杂度为O(eloge),适合于求稀疏网的最小生成树。Prim算法构造最小生成树的步骤如26题所示,为节省篇幅,这里不再用Prim方法做,而是用Kruskal算法来构造最小生成树,过程过程如下(下图也可选(2,4)代替(3,4),选(5,6)。代替(1,5)):
【答案解析】