给定一个无向和连通图G,找到直径最小的生成树。最小直径生成树算法
1
A
回答
3
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)]相交;如果十字路口是空的,然后继续前进。否则,从由u索引的点开始的左子阵列中找出最大距离L,并从由u索引的点开始的右子阵列中的最大距离R索引b。 (计算这些最大值的成本可以分摊到每个分区的O(1),通过从左到右和从右到左的扫描开始。)最佳选择是[a,b]中的μ使最大值(L - (μ - a),R +(b - μ))最小化。
相关问题
- 1. 约束度+有界直径最小生成树的算法?
- 2. 最快最小生成树算法
- 3. Sollin的最小生成树算法
- 4. 通用最小生成树
- 5. 动态最小生成树
- 6. 这个最小生成树算法是否正确?
- 7. krukshal的算法或Prims算法哪个更适合寻找最小生成树?
- 8. 遗传算法:最小生成数?
- 9. 设计一个图,其中最短路径树比最小生成树长
- 10. 最小路径算法
- 11. 生成树DFS算法不创建树
- 12. 使用Kruskal算法计算最小生成树时出现错误的答案
- 13. 什么是计算直线最小斯坦纳树的最佳算法?
- 14. 什么是最小叶生成树?
- 15. Java最小生成树问题
- 16. 关于切入最小生成树
- 17. R:深度最小生成树
- 18. 关于最小生成树图
- 19. Networkx最小生成树 - 精度问题?
- 20. 多重最小生成树图
- 21. 边缘长度受限时的最小生成树的快速算法?
- 22. 在{1,2,3}中为边缘权重寻找最小生成树的算法
- 23. 使用prim算法的最小生成树,不知道错在什么地方
- 24. Java:使用JGraphT生成最小生成树?
- 25. 使用Prim算法寻找最大生成树
- 26. 最小生成树的运行时间? (Prim方法)
- 27. 如何最小化最短路径树的总成本
- 28. 关于路径生成算法
- 29. Dijkstra的算法不会生成最短路径?
- 30. 有没有算法来计算最短的树(不是路径)?
什么意思是“计算导致相同argmax分区的μ的区间[a,b]。” ? – galath 2017-03-12 10:18:59
@galath如果从边缘中间到顶点的距离在μ= 0,0.2,0.5,0.7,0.9,1处具有argmaxes,则取决于分区[0,0.2,0.5]的[a,b]间隔[ 0.7,0.9,1]是区间[0.5,0.7]。 – 2017-03-12 13:28:44