最小化生成树,最小化特定节点的程度

时间:2017-02-22 06:18:45

标签: graph graph-algorithm minimum-spanning-tree kruskals-algorithm

我们如何才能找到最小化节点v(在所有最小生成树中)的最小生成树?

修改Kruskal算法会使得如果有多个边具有相同的权重,我们会选择不触及v的那个边来解决问题吗?

1 个答案:

答案 0 :(得分:1)

为了部分回答这个问题,修改问题中草绘的Kruskal算法并不能解决问题。考虑图G=(V,E,w)其中

V = {1,2,3},
E = {{1,2}, {2,3}, {3,1}},
w({1,2}) = 1,
w({1,3}) = 1,
w({2,3}) = 2

1是最小生成树中度数最小化的节点。然后,边集

S1={{1,2},{1,3}}

构成权重2的最小生成树。但是,Kruskal算法的修改版本不会失去通用性选择边{1,2},这将导致{1,3}被禁止,从而选择{2,3}。总计,在选定的边集中

S2={{1,2},{2,3}}

节点1的程度低于S2,但S2的总权重为3,这意味着它不构成最小生成树。

此外,请注意,要最小化的节点v的度数必须至少为3才有可能在最小跨度中有多个v邻域树。

在详尽搜索中,选择任何可能的v邻域。由于v最多有n个邻居,因此最多只有2^n个邻居。使用Prim的算法,将每个算法扩展到生成树,这对于包含v的选定邻域而言成本最低;在所有这些成本最低的解决方案中,选择v度最小化的解决方案。但是,该方法不会产生多项式时间算法。