我们如何才能找到最小化节点v
(在所有最小生成树中)的最小生成树?
修改Kruskal算法会使得如果有多个边具有相同的权重,我们会选择不触及v
的那个边来解决问题吗?
答案 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
度最小化的解决方案。但是,该方法不会产生多项式时间算法。