【问题标题】:How to know which nodes in a graph are removable如何知道图中的哪些节点是可移除的
【发布时间】:2015-11-24 00:26:18
【问题描述】:

我有一个图 g 大约有 200 个顶点和一些属性,我想知道哪些节点可以被删除,也就是说,这意味着 g 在删除它们后仍然是一个连接的子网络,我也会想知道哪个节点会产生我需要的属性的最高增加。

这是一个可能更容易理解的例子

g <- erdos.renyi.game(200, 0.03)
V(g)$name <- 1:vcount(my_graph) 
V(g)$weight <- rnorm(200) 
V(g)$RWRNodeweight <- runif(200, min=0, max=0.05)

#Criteria to meet
cumsum <- sum(V(g)$weight*V(g)$RWRNodeweight)/sqrt(sum(V(g)$RWRNodeweight^2))

我想知道哪些节点是“可移动的”,即在删除它们之后,图形仍然是完全连接的,然后如果删除“可移动”节点cumsum 增加,则删除增加最大的节点。一旦删除了具有最高增加的“可移动”节点,我想再次开始该过程,直到删除“可移动”节点时cumsum 没有增加

【问题讨论】:

  • 算法问题...查看其他 SE 网站。
  • 你的节点有什么属性?您可以在删除节点后运行 DFS 或 BFS,以检查到达的节点数是否为 |V(g)|-(n+1)|,其中 n 是删除的节点数。
  • @MarcoGetrost,我的节点有两个属性weightRWRnodeweight,用于计算cumsum
  • @user2380782 你怎么知道连接了哪些节点?你必须以某种方式存储这些信息?
  • @MarcoGetrost,图是全连接的,即所有节点都是连接的。我没有存储在任何节点属性中的有关连接性的信息,但我想我可以创建一个属性,如 sapply(V(my_graph), function(x) is.connected(delete.vertices(my_graph, x)) -> V(my_graph)$removable

标签: r algorithm graph-theory igraph


【解决方案1】:

我想知道哪些节点是“可移除的”,即移除它们后,图形仍然是完全连接的

articulation.points 告诉您删除会增加连接组件数量的节点列表。此列表中的任何节点都可以安全删除。然后你必须遍历这个列表并计算cumsum 的新值(一一排除每个节点)以找到最好删除的一个。

【讨论】:

  • 感谢@Tamas 的回答,articulation.points 给了我一个很好的起点
【解决方案2】:

您可以计算spanning tree,然后您可以在末尾删除节点(具有单个顶点的节点),直到您到达单个节点(如果需要)。

【讨论】:

    猜你喜欢
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    相关资源
    最近更新 更多