工学

填空题对于含有N个顶点E条边的无向连通图,利用Kruskal算法生成最小代价生成树的时间复杂度为()。

题目
填空题
对于含有N个顶点E条边的无向连通图,利用Kruskal算法生成最小代价生成树的时间复杂度为()。
如果没有搜索结果,请直接 联系老师 获取答案。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

图的生成树是不唯一的,一个连通图的生成树是一个最小连通子图,n个顶点的生成树有n-1条边,最小代价生成树是唯一的。( )

此题为判断题(对,错)。


正确答案:正确

第2题:

对(),用Prim算法求最小生成树较为合适,而Kruskal算法适于构造()图的最小生成树。

A.完全图

B.连通图

C.稀疏图

D.稠密图


参考答案:D,C

第3题:

●对于n个顶点e条边的无向连通图,利用Prim算法生成最小生成树的时间复杂度为 (24) ,利用Kruskal算法生成最小生成树的时间复杂度为 (25) 。

(24) A.O((n+1)2 )

B.O(n2 )

C.O(n2-1)

D.(n2+1)

(25) A.O(log2e)

B.O(log2e-1)

C.O(elog2e)

D.以上都不对


正确答案:B,C
【解析】此题是考查数据结构图的应用。

第4题:

Prim算法和Kruscal算法都是无向连通网的最小生成树的算法,Prim算法从一个顶点开始,每次从剩余的顶点中加入一个顶点,该顶点与当前的生成树中的顶点的连边权重最小,直到得到一颗最小生成树;Kruscal算法从权重最小的边开始,每次从不在当前的生成树顶点中选择权重最小的边加入,直到得到一颗最小生成树,这两个算法都采用了 (请作答此空) 设计策略,且 ( ) 。

A.分治
B.贪心
C.动态规划
D.回溯

答案:B
解析:
Prim算法从扩展顶点开始,每次总是"贪心的"选择与当前顶点集合中距离最短的顶点,而Kruscal 算法从扩展边开始,每次总是"贪心的"选择剩余的边中最小权重的边,因此两个算法都是基于贪心策略进行的。
Prim 算法的时间复杂度为O(n2),其中n 为图的顶点数,该算法的计算时间与图中的边数无关,因此该算法适合于求边稠密的图的最小生成树;Kruscal 算法的时间复杂度为O(mlgm) ,其中m 为图的边数,该算法的计算时间与图中的顶点数无关,因此该算法适合于求边稀疏的图的最小生成树。当图稠密时,用 Prim 算法效率更高。但若事先没有关于图的拓扑特征信息时,无法判断两者的优劣。由于一个图的最小生成树可能有多棵, 因此不能保证用这两种算法得到的是同一棵最小生成树。

第5题:

下列叙述中正确的是( )。A.连通分量是无向图中的极小连通子图 B.生成树是连通图的一个极大连通子图 C.若一个含有n个顶点的有向图是强连通图,则该图中至少有n条弧 D.若一个含有n个顶点的无向图是连通图,则该图中至少有n条边


正确答案:C
有向图是一个二元组,其中   1.V是非空集合,称为顶点集。   2.E是V×V的子集,称为边集。   直观来说,若图中的每条边都是有方向的,则称为有向图。有向图中的边是由两个顶点组成的有序对,有序对通常用尖括号表示,如表示一条有向边,其中vi是边的始点,vj是边的终点。代表两条不同的有向边。如果在有向图中任意两个顶点都是连通的,则称图为连通图。因此如果有向图是连通图,则该图中至少有n条弧。 一个无向图(undirected graph)是一个二元组,其中:   1.E是非空集合,称为顶点集。   2.V是E中元素构成的无序二元组的集合,称为边集。   直观来说,若一个图中每条边都是无方向的,则称为无向图。

第6题:

n个顶点的连通图的生成树有()条边。

A.n

B.n-1

C.n+1

D.不确定


参考答案:B

第7题:

对于含n个顶点、e条边的无向连通图,利用Prim算法构造最小生成树的时间复杂度(),用Kruskal算法构造最小生成树的时间复杂度为()。

A.O(n)

B.O(n²)

C.O(e)

D.O(eloge)

F.O(e²)


参考答案:B,D

第8题:

阅读下列函数说明和C函数,将应填入(n)处的字句写在对应栏内。

[说明]

Kruskal算法是一种构造图的最小生成树的方法。设G为一无向连通图,令T是由G的顶点构成的于图,Kmskal算法的基本思想是为T添加适当的边使之成为最小生成树:初始时,T中的点互相不连通;考察G的边集E中的每条边,若它的两个顶点在T中不连通,则将此边添加到T中,同时合并其两顶点所在的连通分量,如此下去,当添加了n-1条边时,T的连通分量个数为1,T便是G的一棵最小生成树。

下面的函数void Kruskal(EdgeType edges[],int n)利用Kruskal算法,构造了有n个顶点的图 edges的最小生成树。其中数组father[]用于记录T中顶点的连通性质:其初值为father[i]=-1 (i=0,1,…,n-1),表示各个顶点在不同的连通分量上;若有father[i]=j,j>-1,则顶点i,j连通;函数int Find(int father[],int v)用于返回顶点v所在树形连通分支的根结点。

[函数]

define MAXEDGE 1000

typedef struct

{ int v1;

int v2;

}EdgeType;

void Kruskal(EdgeType edges[],int n)

{ int father[MAXEDGE];

int i,j,vf1,vt2;

for(i=0;i<n;i+ +) father[i]=-1;

i=0;

j=0;

while(i<MAXEDGE && j<(1))

{ vf1=Find(father,edges[i].v1);

vf2=Find(father,edges[i].v2);

if((2))

{(3)=vf1;

(4);

printf("%3d%3d\n",edges[i].v1,edges[i].v2);

}

(5);

}

}

int Find(int father[],int v)

{ int t;

t=v;

while(father[t]>=0) t=father[t];

return(t);

}


正确答案:(1) n-1 (2) vf1! =vf2 (3) father[vf2] (4) j++ (5) i++
(1) n-1 (2) vf1! =vf2 (3) father[vf2] (4) j++ (5) i++ 解析:(1)由上下文可知,变量j记录了添加进最小生成树的边数,当j超出n-1时循环终止,构造过程结束;
(2)此处的判别条件应该是:v1和V2连通。由于Vf1和 vf2分别是边edges[i]两顶点v1、v2所在连通分支的根,v1和v2连通当且仅当vf1和vf2相等;
(3)~(4)根据程序说明,当v1和v2不连通时,需添加 edges[i]进最小生成树且合并v1和v2所在连通分支。后者就是令j自增1;后者即连接vf1和vf2。
(5)对图中的边循环,继续考虑下一条边。

第9题:

Prim算法和Kruscal算法都是无向连通网的最小生成树的算法,Prim算法从一 个顶点开始,每次从剩余的顶点加入一个顶点,该顶点与当前生成树中的顶占的连边权重 最小,直到得到最小生成树开始,Kruscal算法从权重最小的边开始,每次从不在当前的生成树顶点之间的边中选择权重最小的边加入,直到得到一颗最小生成树,这两个算法都采用了( )设计策略,且( )。

A.分治 B.贪心 C.动态规划 D.回溯 A.若网较稠密,则Prim算法更好 B.两个算法得到的最小生成树是一样的 C.Prim算法比Kruscal算法效率更高 D.Kruscal算法比Prim算法效率更高


正确答案:B,A

第10题:

Prim算法和Kruscal算法都是无向连通网的最小生成树的算法,Prim算法从一个顶点开始,每次从剩余的顶点中加入一个顶点,该顶点与当前的生成树中的顶点的连边权重最小,直到得到一颗最小生成树;Kruscal算法从权重最小的边开始,每次从不在当前的生成树顶点中选择权重最小的边加入,直到得到一颗最小生成树,这两个算法都采用了 ( ) 设计策略,且 (请作答此空) 。

A. 若网较稠密,则Prim算法更好
B. 两个算法得到的最小生成树是一样的
C. Prim算法比Kruscal算法效率更高
D. Kruscal算法比Prim算法效率更高

答案:A
解析:
Prim算法从扩展顶点开始,每次总是"贪心的"选择与当前顶点集合中距离最短的顶点,而Kruscal 算法从扩展边开始,每次总是"贪心的"选择剩余的边中最小权重的边,因此两个算法都是基于贪心策略进行的。
Prim 算法的时间复杂度为O(n2),其中n 为图的顶点数,该算法的计算时间与图中的边数无关,因此该算法适合于求边稠密的图的最小生成树;Kruscal 算法的时间复杂度为O(mlgm) ,其中m 为图的边数,该算法的计算时间与图中的顶点数无关,因此该算法适合于求边稀疏的图的最小生成树。当图稠密时,用 Prim 算法效率更高。但若事先没有关于图的拓扑特征信息时,无法判断两者的优劣。由于一个图的最小生成树可能有多棵, 因此不能保证用这两种算法得到的是同一棵最小生成树。

更多相关问题