R中列表中列表元素的有效比较

时间:2015-03-09 19:47:17

标签: r

如何在R中有效地比较列表元素的元素?下面的代码完成了这项工作,但速度很慢。

上下文:我的实际问题是在图的连通组件之间找到同构。该图具有~500k顶点和~200k连通分量。但是,所有图形内容都可以忽略不计。我想类似的问题是如何找到相等的向量元素。

以下代码的直觉:先后将列表中的每个元素与前面的元素进行比较(已考虑先前找到的匹配)

g=graph.edgelist(m,directed=T)
dg <- decompose.graph(g, mode = c("weak"))    
x=1
for(i in 2:length(dg)){
  print(i)
  a=1
  for(j in unique(x[1:i-1])){
    #print(j)
    if(graph.isomorphic(dg[[i]],dg[[j]])==T){
      x[i]=j
      a=0
      break
    }
    if(a==1) x[i]=i   
    #print(dg[i])
  }
}

1 个答案:

答案 0 :(得分:3)

比较所有是O(n ^ 2),这很慢。

相反,我会使用digest哈希每个顶点列表,然后您可以将其用作识别因素:

example(graph.edgelist)

require(digest)
hash <- sapply(g15, digest)
length(unique(hash))