4

我正在分析 R 中的无向图。我试图(最终)编写一个函数来获取最大连通分量的大小(顶点数)与最大双连通分量大小的比率 - 任何随机图. 我能够提取最大连接组件的大小,但在最大双连接组件的大小方面遇到问题。我开始在图 g 上使用 igraph 函数 biconnected_components:

bicomponent_list <- biconnected_components(g)
bicomponent_list$components # lists all of the components, including size and vertex names
length(bicomponent_list$components[[1]]) # returns number of vertices of first bicomponent

然后我半生不熟的想法是以某种方式以递减的顶点数量对该列表进行排序,这样我就可以始终调用 length(bicomponent_list$components[[1]]) ,它将成为最大的双连接组件。但我不知道如何正确排序。也许我必须将其转换为矢量?但我也不知道如何指定我想要向量中的顶点数。有谁知道,或者有更好的方法吗?非常感谢!

library(igraph)

# generating sample graph
g1 <- barabasi.game(100, 1, 5)
V(g1)$name <- as.character(1:100)

g2 <- erdos.renyi.game(50, graph.density(g1), directed = TRUE)
V(g2)$name <- as.character(101:200)

g3 <- graph.union(g1, g2, byname = TRUE)

# analyzing the bicomponents
bicomponent_list <- biconnected_components(g3)
bi_list <- as.list(bicomponent_list$components)
bi_list <- lapply(bi_list, length) # lists the sizes of all of the components that I want to reorder

我想要的结果是这样排序bi_list,以length(bicomponent_list$components[[1]])返回具有最多顶点的双分量。

4

1 回答 1

1

components属性是一个包含顶点列表的列表。您可以遍历它们并像这样找到它们的长度

sapply(bicomponent_list$components, length)

如果你只想要最大的,把它包在一个max()

max(sapply(bicomponent_list$components, length))
于 2015-11-28T02:19:47.537 回答