2016-03-29 16 views
1

I N düğümleri ve E selfloops ve multilinks içerebilir bağlantılar içeren bir grafik bilgisi içinde selfloops ve multilinks sayısını bulun. Selfloops sayısını ve içerdiği multilonların sayısını nasıl hesaplayabilirim?bir grafik

R'de bir grafik oluşturdum ve sonra bunu bir bitişik matrisine dönüştürüyorum. İki değeri hesaplaması gereken ancak her zaman çalışmayan bir işlev oluşturdum.

Kodum: Örneğin

ident <- function(...) { 
    args <- c(...) 
    if(length(args) > 2L) { 
    # recursively call ident() 
    out <- c(identical(args[1], args[2]), ident(args[-1])) 
    } 
    else { 
    out <- identical(args[1], args[2]) 
    }  
    return(all(out)) 
} 

net <- static.power.law.game(no.of.nodes = 10, 
          no.of.edges = 15, 
          exponent.out = 3, 
          exponent.in = 3, 
          loops = TRUE, 
          multiple = TRUE) 

netmatr <- as_adjacency_matrix(net) 

n_self_mul <- function(network_matrix) { 
    selfloops <- 0 
    multiarchi <- 0 
    for(j in 1:nrow(network_matrix)) { 
    if(ident(netmatr[j, j], 1)) { 
     selfloops <- selfloops + 1 
    } 
    for(i in 1:ncol(network_matrix)) { 
     if(netmatr[i, j] > 1) { 
     multiarchi <- multiarchi + 1 
     } 
    } 
    } 
    ret <- list("self" = selfloops, "mul" = multiarchi) 
    return (ret) 
} 

, ben bu graph, benim işlevi getiri varsa: selfloops = 2 ve multilinks = 1.

Nasıl çözebiliriz?

Teşekkür

cevap

0

Çok basit bitişiklik matrisi kullanarak yapabilirsiniz. Bir düğüm kendi başına bir kenara (kendi kendine döngü) sahipse, bitişik matrisin köşegeninde sıfır olmayan bir giriş olacaktır. Eğer bir çoklu-link varsa, o zaman 1'den daha büyük olan bitişik matrisinde bir girdi olacaktır.

İşte bir örnek. [4 üç multiedges olduğu görsel inceleme ile görebilir bu küçük örnek üzerinde

set.seed(42) 
net <- static.power.law.game(no.of.nodes = 5, 
           no.of.edges = 10, 
           exponent.out = 3, 
           exponent.in = 3, 
           loops = TRUE, 
           multiple = TRUE) 

# Get the adjacency matrix. I like it with zeros (sparse=F) 
# but if your graph is really big leave sparse 
netmatr <- as_adjacency_matrix(net, sparse=F) 
netmatr 
     [,1] [,2] [,3] [,4] [,5] 
[1,] 0 0 0 0 0 
[2,] 0 0 0 0 0 
[3,] 0 0 0 0 2 
[4,] 0 0 0 2 1 
[5,] 3 1 0 0 1 

([3,5], [4,4] ve [5,1]) ve iki öz döngüler, 4] ve [5,5]. Ancak, bu şu şekilde hesaplanabilir:

no.of.selfloops <- sum(diag(netmatr)) # This counts each edge in multi-edged self-loop 
no.of.multilinks <- sum(netmatr>1)