我有一个大图,我会找到涉及一对顶点的最大集团。我认为igraph的maximal.clique函数的子集参数会这样做,但要么我使用它错了它,要么它做了完全不同的事情。我花了相当多的时间在网上搜索没有运气。
以下是显示问题的最小示例:
> library(igraph)
> packageVersion('igraph')
[1] ‘1.0.1’
> g = graph.empty(n=10, directed=FALSE)
> g = add.edges(g, c(1, 2))
> str(g)
IGRAPH U--- 10 1 --
+ edge:
[1] 1--2
> # This correctly results a clique.
> maximal.cliques(g, min=2)
[[1]]
+ 2/10 vertices:
[1] 2 1
> # These don't return anything!
> maximal.cliques(g, min=2, subset=1)
list()
> maximal.cliques(g, min=2, subset=c(1, 2))
list()
答案 0 :(得分:0)
subset
参数不用于计算图的子集上的最大派系;它只是在查找最大派系时限制在Bron-Kerbosch algorithm过程中用作起点的顶点集。 Bron-Kerbosch算法本身仍会搜索整个图形,并允许在其认为可以随意添加或删除当前集合中的顶点。
subset
参数的唯一角色是,它允许您通过将图的顶点集划分为多个子集来并行化大图上的最大集团计算,然后在具有不同子集的多个CPU或CPU核心上运行maximal.cliques
。如果起始子集包括其顶点的任何或全部,则不能保证找到最大集团;例如,在我的机器上,如果我使用仅由顶点9组成的起始子集,则会找到最大集团1--2:
> maximal.cliques(g, subset=c(9))
[[1]]
+ 2/10 vertices:
[1] 2 1
如果您想在原始图表的子图表中搜索最大派系,请先使用induced_subgraph
,然后使用max_cliques
。