首页 > 试题广场 >

(稀疏图的最小生成树) 对于非常稀疏的图G=(V, E)来

[问答题]
(稀疏图的最小生成树)  对于非常稀疏的图G=(V, E)来说,  我们可以对Prim算法进行进一-步改善,改善后的时间将优于使用斐波那契堆时的O(E+V lgV)的运行时间。改善所用的方法就是对图G进行预处理来减少结点的数量,然后在减少结点数量后的图G,上运行Prim算法。具体来说,对于每个结点u,我们选择与结点u邻接的边中最小权重的边(u,v),将其加入到正在构建的最小生成树里。然后对所有选择的边进行收缩。不过,我们不是一条一条地收缩每条边,而是首先找出连接到同一个新结点的结点集合。然后创建一个新的图,这个新的图就如每次收缩这样一条边所得出的一样,但我们是通过“重新命名”来实现。重新命名是根据每条边的端点所在的结点集合来进行。原始图中的多条边可能被重命名为同样的名。在这种情况下,重名的边中只有一条边留下,这条边对应原始边中最小权重的边。
       在初始时,我们把将要构建的最小生成树T设为空,对于每条边(u,  v)∈E,对其属性进行如下的初始化操作: (u, v).orig= =(u, v),  (u,  v).c=w(u,v)。  我们使用orig属性来引用原始图中与收缩后的图的边相关的边。属性c记录边的权重,  随着边的收缩,我们根据上面选择边权重的方法来更新这个属性。下面的MST-REDUCE算法以图G和树T作为输入,返回一个收缩后的图G'和更新后的属性orig'与c'。该算法同时选出图G中的边来构成最小生成树T。

MST-REDUCE(G,T)
1for each v EG. V
2v. mark= FALSE
3MAKE- SET(v)
4 for each uG.V
5if u. mark== FALSE
6choose v G. Adj[u]such that(u. o). c is minimized
7UNION(u,v)
8T= TU((u,v)Y. orig)
9u. mark= v. mark= TRUE .
10G'. V= (FIND SET(v) :vG. V)
11G'.E= 12for each(x,y)G. E 
13  u= FINDSET(x)
14  v== FIND-SET(y)
15  if(u. v)G'. E
16  G'. E=G. E U (u,v)
17  (u,v). orig' = (x,y). orig
18  (u,v).c= (x,y).c
19  else if(x.y)(u,v). c
20  (u,v). orig' = (x,y). orig
21  (u,v).c'=(x,y).c
22  construct adjacency lists G' :Adj for G'
23  return G' and T

a.设T为算法MST-REDUCE所返回的边的集合,设A为调用MST-Prim(G', c', r)所生成的图G'的最小生成树,  这里c'是G'.E中边的权重属性,r是G'. V中的任意结点。证明:  TU{(x, y).orig' :(x, y)∈A}是图G的一-棵最小生成树。
b.证明: G'.V|≤lV|/2。
c.请说明要如何实现算法MST-REDUCE,才能让其运行时间为O(E)。  (提示:使用简单的数据结构。)
d.假定运行MST-REDUCE算法k次,使用前一次输出的图G'作为下一次的输人图G,并在T中将边累积起来。证明:算法运行k次的总时间为O(kE)。
e.假定在运行MST-REDUCE算法k次后,就如在本题的(d)部分那样,我们通过调用算法MST-Prim(G',c', r)来运行Prim算法,  这里图G'是最后一个阶段所返回的图,其权重属性为c',r是G'. V中的任意结点。请说明应当如何选择k,才能使得整体的运行时间为O(ElglgV)。并证明你所选择的k使得总体的渐近运行时间为最短。
f.对于|E|的何种取值(以|V|为单位来度量),这种带预处理的Prim算法的时间在渐近意义上要优于没有预处理的Prim算法的运行时间?




这道题你会答吗?花几分钟告诉大家答案吧!