2014-12-23 51 views
1

我试图用一些任意大小绘制一个完整的图。然后,我想修剪每个顶点可以具有的相邻边的数量。我怎样才能做到这一点?作为一个例子,如果我有一个包含20个顶点的完整图,那么每个顶点最初将有19个相邻的边。现在我想修剪那些边缘,使每个顶点至多有10个边缘。在igraph中设置顶点的相邻边的上限

编辑

下面是当前的代码我已经为这个写的。它倾向于形成断开的顶点和连接顶点的小群集。

library(igraph) 
node_number = 20 
g=erdos.renyi.game(node_number, 1) 

testfun = function(g, maxVert, node_number){ 
    neighbor_nodes = NULL; delete_edge = NULL; delete_these = NULL 
    total_nodes = 1:node_number 

    for (i in 1:node_number){ 
    neighbor_nodes <- unlist(neighborhood(g, order = 1, nodes = total_nodes[i])) 
    neighbor_nodes[1] <- NA 
    neighbor_nodes <- neighbor_nodes[!is.na(neighbor_nodes)] 
    neighbor_nodes <- sample(neighbor_nodes, maxVert) 

    delete_edge <- which(total_nodes%in%neighbor_nodes == FALSE) 
    delete_edge <- which(delete_edge%in%total_nodes[i] == FALSE) 

    for (j in 1:length(delete_edge)){ 
     if (isTRUE(edgeFinder(g, total_nodes[i], delete_edge[j]))){ 
     g = delete.edges(g, E(g, P=c(i, delete_edge[j]))) 
     } 
    } 
    } 
    return(g) 
} 

edgeFinder = function(g, v1,v2){ 
    if (g[v1,v2] == 1){ 
    return(TRUE) 
    } else { return(FALSE) } 
} 

g2 = testfun(g, 10, node_number) 
+0

我认为你需要提供更多信息。例如,是否有与边缘相关的优先级?可以吗,如果您将某些顶点的边减少到小于10?你需要一个最佳的解决方案吗?或者是一个启发式足够?您还应该就如何解决问题提出自己的初步想法。这表明你做了一些研究工作。目前你的问题似乎过于宽泛。 – honk

+0

@honk没有与边缘相关的优先级。如果每个顶点都有可以自己设置的相邻边的最大数量,那将是理想的。我确实想出了自己的解决方案,但它并不按照我想要的方式工作,因为它会耗尽大多数顶点的边缘,而少数边缘仍然存在边缘。我将编辑我的帖子以分享我的当前代码。 – user3141121

回答

2

我能够使用以下方法解决此问题。

library(igraph)  

SetEdge = rep(10, 20) 
g=degree.sequence.game(SetEdge, method='vl')  
degree(g) 
[1] 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 

我现在绘制了一个包含10个相邻边的20个顶点的图。比我最初的方法更简单...

相关问题