python - 查找有向图中包含指定节点的所有长度为 n 的循环的最快方法

标签 python networkx graph-theory directed-graph

我有一个大型有向图,包含约 250 个节点和约 750 个加权边。我正在寻找一种方法来查找包含指定节点的长度为 n 的所有循环。例如,如果我想要定向图中 DG 中包含节点 A 的长度为 n 的所有循环,我会这样做:

import networkx as nx
DG = nx.DiGraph() # assume this is a large graph
cycles = nx.simple_cycles(DG)
n = 4
node = 'A'
relevant_cycles = []
for cycle in cycles:
    if len(cycle) == n and node in cycle:
        relevant_cycles.append(cycle)

但是,对于我正在处理的大型图表来说,这非常慢。这个问题有更好的解决办法吗?

最佳答案

对于那些感兴趣的人,我改编了乔尔的回答 here创建一种更有效的方法来做到这一点。

def findPaths(G,u,n):
    if n==0:
        return [[u]]
    paths = [[u]+path for neighbor in G.neighbors(u) for path in findPaths(G,neighbor,n-1)]
    return paths

def find_cycles(G,u,n):
    paths = findPaths(DG,u,n)
    return [tuple(path) for path in paths if (path[-1] == u) and sum(x ==u for x in path) == 2]

cycles = find_cycles(DG,'A',4) # example usage

关于python - 查找有向图中包含指定节点的所有长度为 n 的循环的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57661314/

相关文章:

OraclePropertyGraphDataLoader 从 HDFS 加载数据

python - 对于我的数据,为什么基于树的学习算法的准确率只有50%左右?

python - 如何在wxpython中改变wx.TextCtrl小部件的形状?

python - 用三个表连接一对多?

python - 在 Gephi 中打开之前在 Networkx write_graphml 中添加属性

python - Networkx(或 Graphviz)围绕绘图中心顺时针旋转节点标签

python - 在带有 Matplotlib 的 Python 中,如何检查图中的子图是否为空

graph-theory - 在数据记录中添加循环边缘 (bddbddb)

javascript - Dijkstra 算法实现

Python 正则表达式 字母和空格