随机删除n条边而不断开图

标签 r graph-theory igraph

我正在使用igraph R 中的包。我有一个连通图 G=(V,E) ,如何随机删除一些边(例如 n < |E| )但不断开给定的图形。换句话说,我不能删除任何 bridges 。关于如何做到这一点有任何提示吗?

最佳答案

一种简单的方法是不断随机选择和删除 n 个节点集,直到找到一个不会增加图形组件数量的集合:

remove.edges <- function(g, n) {
  num.tries <- 0
  while (TRUE) {
    num.tries <- num.tries + 1
    g2 <- delete.edges(g, E(g)[sample(seq_along(E(g)), n)])
    if (no.clusters(g2) == no.clusters(g)) {
      print(paste("Total number of tries:", num.tries))
      return(g2)
    }
  }
}

让我们用一个示例图表来尝试一下:

library(igraph)
set.seed(144)
g <- erdos.renyi.game(10, 0.4)
g2 <- remove.edges(g, 5)
# [1] "Total number of tries: 3"

对于一个大型、稀疏的图加上一个大的 n 值来说,这可能非常低效。在这种情况下,您可能需要运行类似 Tarjan's Bridge-Finding Algorithm 的命令。在每次迭代时限制你的随机选择不成为桥梁。不幸的是,我无法在 R 中找到该算法的实现,因此您可能需要执行一些实现才能使其正常工作。

关于随机删除n条边而不断开图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23226544/

相关文章:

r - 在 R 中使用 set.seed() 和 foreach()

r - 什么是回调机制以及它如何在 R 中应用

r - 在 Rstudio 上浏览 R 代码的高效递归方式?

algorithm - 证明最小循环覆盖的不可近似性

r - 从 igraph 到 ggplot 对象

r - Quantmod Heikin-Ashi 绘图不可用

algorithm - 强连通分量有什么用?

python - 列出有向图中顶点属于单个簇的所有路径

r - 如何在 R 中的多个模拟图形上应用一个函数

r - 在igraph中生成社区图