我有一个无向图,我想做的是检测其中有三个或更多节点的周期 . R中有一个库可以做到吗?如果没有,我可以实现一个简单的算法 .
test <- data.frame(start=c(1,2,3,4), stop=c(2,3,1,5))
我希望它能以1,2,3以及它找到的任何其他周期返回 .
好吧,这不会给你周期中的实际节点,但它会计算图表中每个等级的周期,所以这是一个开始 .
library(igraph) test <- data.frame(start=c(1,2,3,4), stop=c(2,3,1,5)) g <- graph.data.frame(test) cycles <- t(sapply(3:dim(test)[1], function(x) {v=graph.motifs.no(g, size=x); c(x,v)})) colnames(cycles) <- c("size","count") size count [1,] 3 1 [2,] 4 0
无论如何,我建议你到处使用 igraph 库:我无法找到你的答案 . graph.motifs 看起来很有希望,但我无法解释结果 .
igraph
graph.motifs
如果它不必是 R ,python中的 networkx 库有一个simple_cycles()函数,应该足以满足您的需要 .
R
networkx
import networkx as nx from networkx.algorithms.cycles import simple_cycles g = nx.DiGraph() g.add_edge(1,2) g.add_edge(2,3) g.add_edge(3,4) g.add_edge(3,1) g.add_edge(4,1) simple_cycles(g) # [[1,2,3,1],[1,2,3,4,1]]
1 回答
好吧,这不会给你周期中的实际节点,但它会计算图表中每个等级的周期,所以这是一个开始 .
无论如何,我建议你到处使用
igraph
库:我无法找到你的答案 .graph.motifs
看起来很有希望,但我无法解释结果 .如果它不必是
R
,python中的networkx
库有一个simple_cycles()函数,应该足以满足您的需要 .