我有一个带有未加权边缘的无向连通图。如何构建生成树(解决方案可能不是唯一的),以便最小化所有节点的深度总和?这显然没有找到最小生成树,因为边缘的“权重”实际上取决于孩子的深度。
我认为,给定一个指定的根,可以通过贪婪地将所有可以作为子节点连接的所有树连接到以广度优先顺序连接到每个节点来形成具有最小深度总和的树。因此,我将通过应用相同的过程N次来找到具有最小总深度的树,将N个节点中的每一个指定为根,并且在N个候选中选择最小的一个。这是一个有效的算法吗?请指出它是否错误,或者是否存在更高效的效果。
答案 0 :(得分:3)
这是一个有效的算法吗?
是的,算法是正确的。
如果节点R
被认为是生成树的根,则生成树中节点N
的深度至少是{{1}的最短路径的长度在图中{}为R
,所以深度之和至少是最短路径长度之和(来自N
)。
由算法构造的树将每个节点与最短路径之一连接到R
,因此深度之和是距离的总和,我们在上面看到的是下限。
作为一个小优化,如果节点数量至少为3,则不需要将度数为1的节点视为树的根。 (对于以1度为节点R
生根的树,请考虑相同的图,将其视为以R
邻居为根的树。R
的深度增加1,所有其他节点的深度减少1,因此深度总和减少R
。)