如何在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])
}
}
答案 0 :(得分:3)
比较所有是O(n ^ 2),这很慢。
相反,我会使用digest
哈希每个顶点列表,然后您可以将其用作识别因素:
example(graph.edgelist)
require(digest)
hash <- sapply(g15, digest)
length(unique(hash))