singhsumit链接了Hassin and Tamir的相关论文,题目为“最小直径生成树问题”,但他的答案目前已被删除。该论文的主要思想是,在无向图中找到一棵最小直径生成树可以通过找到图的“绝对1中心”并返回以此为根的最短路径树来实现。绝对1中心是距离最远顶点最小的点,可以在Kariv和Hakimi的算法(网络位置问题的算法方法I:p中心)或Hakimi、Schmeichel和Pierce的早期算法(关于网络中心问题的p中心)中找到,我将尝试仅从运行时间和数十年的经验中重建该算法。(愚蠢的付费壁垒)使用Floyd-Warshall算法或Johnson算法计算所有节点之间的距离。对于每条边u-v,如下找到该边上最佳的1中心候选项。让边界上u-v之间的点以µ为索引,范围从0(u本身)到len(u-v)(v本身)。从索引µ到顶点w的距离为min(µ + d(u, w), len(u-v) - µ + d(v, w))。作为µ的函数,此数量先增加后减少,并在µ = (len(u-v)+ d(v,w)- d(u,w))/2时达到最大值。按照这个argmax排序顶点。对于数组的每个左子数组和右子数组的分区,计算引起相同argmax分区的µ的区间[a,b]。将此区间与[0,len(u - v)]相交;如果交集为空,则继续。否则,在从索引为a的u-v上的点到左子数组中的最大距离L,并在从索引为b的u-v上的点到右子数组中的最大距离R之间找到最大距离。 (可以通过在开始时从左到右和从右到左扫描来摊销每个分区的计算这些最大值的成本到O(1)。)最佳选择是在[a,b]中最小化max(L-(µ-a),R +(b-µ))的µ。