【问题标题】:How to calculate minimum spanning tree in R如何计算R中的最小生成树
【发布时间】:2020-01-07 08:46:24
【问题描述】:

给定一个包含 N 个顶点的图,以及存储在元组 T1 = (d11, d12, …, d1n) to Tn = (dn1, dn2, …, dnn) 中的顶点边缘之间的距离。从顶点 V1 开始找出该图的最小生成树。此外,打印通过这棵生成的树所需的总行程。

Example:
For N =5 
T1 = (0, 4, 5, 7, 5)
T2 = (4, 0, 6, 2, 5)
T3 = (5, 6, 0, 2, 1)
T4 = (7, 2, 2, 0, 5)
T5 = (5, 5, 1, 5, 0)

Selection of edges according to minimum distance are:
V1 -> V2 = 4
V2 -> V4 = 2
V4 -> V3 = 2
V3 -> V5 = 1

Thus, MST is V1 -> V2 -> V4 -> V3 -> V5 and the distance travelled is 9 (4+2+2+1)

从字面上看,我不知道如何在 R 中创建一个包含 n 个顶点的图。

我在谷歌搜索但我不明白如何解决上述问题。

请帮帮我。

【问题讨论】:

  • 你检查了igraph package,或this questionthis function吗?
  • 其实我没有图,我需要创建一个有 n 个顶点的图吗?对这个问题有点困惑
  • 如果我们有图,我认为我们可以计算最小生成树。如何获得代表问题的 N 个顶点图?
  • 我认为你可以只使用mst(g),但也许也可以使用mst(g, weights = E(g)$weights)
  • sum(E(mg)$weight),其中mg 是最小生成树图

标签: r minimum-spanning-tree


【解决方案1】:

您的问题似乎与标题不符 - 您是在创建图表而不是 MST 之后?正如@user20650 所说,一旦您获得了图表,MST 本身就很容易。

创建大小为 n 的图很容易,但是关于连接哪些节点以及它们的权重(距离)有很多复杂性,你没有告诉我们,所以这是一个非常基本的插图。

如果我们假设所有节点都连接到所有其他节点(完整图),我们可以使用make_full_graph。如果不是这种情况,您要么需要数据来说明哪些节点已连接,要么使用随机图。

# create graph
n <- 5
g <- make_full_graph(n)

下一个问题是距离。您没有向我们提供有关这些距离如何分布的任何信息,但我们可以演示将它们分配给图表。在这里,我将只使用随机统一的 [0-1] 数字:

# number of edges in an (undirected) full graph is (n2 - n) /2 but
# it is easier to just ask the graph how many edges it has - this
# is more portable if you change from make_full_graph
n_edge <- gsize(g)
g <- set_edge_attr(g, 'weight', value=runif(n_edge))
plot(g)

下一位只是 MST 本身,使用 minimum.spanning.tree:

mst <-  minimum.spanning.tree(g)

mst 的输出如下所示:

IGRAPH dc21276 U-W- 5 4 -- Full graph
+ attr: name (g/c), loops (g/l), weight (e/n)
+ edges from dc21276:
[1] 1--4 1--5 2--3 2--5

【讨论】:

  • 我也不知道距离是如何计算的,这就是我感到困惑的原因。我已经发布了完整的问题。他们只提供了这么多信息。我是这个 MST 主题的新手。
  • 我们无能为力。如果你没有得到关于 n 个节点之外的图结构的信息,那么只能给出一个带有一些假设的通用答案。您可以使用随机图和不同的边长分布,代码仍然会给出答案
  • 是的,我知道没有图表和距离信息很难提供帮助。有了这些信息user20650 帮助了我。够了。
  • 顺便说一句,您的回答对我很有用,因为我开始知道如何在 R 中制作 n 图。谢谢。
猜你喜欢
  • 1970-01-01
  • 2014-12-04
  • 1970-01-01
  • 2014-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多