2015-03-09 4 views
1

Как эффективно сравнивать элементы элемента по элементу в 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]) 
    } 
} 

ответ

3

Сравнение всех все O (N^2), который медленный.

Вместо этого, я бы хэш каждый список вершин, используя digest, то вы можете использовать это в качестве идентифицирующего фактора:

example(graph.edgelist) 

require(digest) 
hash <- sapply(g15, digest) 
length(unique(hash)) 
Смежные вопросы