【发布时间】:2015-07-17 07:41:45
【问题描述】:
我正在尝试实现 Kou 算法以使用 igraph 识别 R 中的 Steiner 树。
寇氏算法可以这样描述:
- 找到完整的距离图 G'(G' 有 V' = S(斯坦纳节点),并且对于 VxV 中的每一对节点 (u,v),有一条边的权重等于最小的权重这些节点之间的成本路径 p_(u,v) in G)
- 在 G' 中找到最小生成树 T'
- 通过用 G 的相应最短路径替换 T' 的每条边来构造 G 的子图 Gs,这是 G' 的一条边(有几条最短路径,选择任意一条)。
- 求 Gs 的最小生成树 Ts(如果有多个最小生成树,则任意选择一个)
- 从 Ts 构造一棵 Steiner 树 Th,方法是删除 Ts 中的边(如有必要),使 Th 中的所有叶子都是 Steiner 节点。
前两个步骤很简单:
g <- erdos.renyi.game(100, 1/10) # graph
V(g)$name <- 1:100
# Some steiner nodes
steiner.points <- sample(1:100, 5)
# Complete distance graph G'
Gi <- graph.full(5)
V(Gi)$name <- steiner.points
# Find a minimum spanning tree T' in G'
mst <- minimum.spanning.tree(Gi)
但是,我不知道如何将 T' 中的边替换为 G 中的最短路径。我知道使用 get.shortest.paths 我可以从一对节点中获取 vpath,但是我如何替换和在 T' 中与 G 中的 shortest.path 边缘?
提前非常感谢
【问题讨论】: