NetworkX all_simple_paths给出了内存错误

时间:2015-07-13 06:35:16

标签: python networkx

我正在使用 NetworkX 库来查找我的任务的路径查找问题。我当然只需要找到简单的路径。以下是我使用的示例代码:

paths = list(nx.all_simple_paths(G, startnode, endnode)) 

以下是控制台显示的错误:

Traceback (most recent call last):
File "run_duc.py", line 130, in <module>
main()
File "run_duc.py", line 78, in main
m1.main()
File "C:\Users\User\Desktop\all_model_run_script\abstractive_ilp\main.py", line 119, in main
paths = mygraph.generate_graph(mytext, mystartnode, myendnode, financial_corpus)
File "C:\Users\User\Desktop\all_model_run_script\abstractive_ilp\graph_node.py", line 241, in generate_graph
paths = self.find_paths(G, self.START, self.END, financial_corpus)
File "C:\Users\User\Desktop\all_model_run_script\abstractive_ilp\graph_node.py", line 153, in find_paths
paths = list(nx.all_simple_paths(G, startnode, endnode))
MemoryError

1 个答案:

答案 0 :(得分:1)

我想这是因为你的图表太大了。请参阅documentation for all_simple_paths()

  

此算法使用修改后的深度优先搜索来生成       路径。可以在O(V+E)时间找到单个路径,但是       图中的简单路径的数量可以非常大,例如, O(n!) in       订单n的完整图表。

如果你的图表连接良好(你有很多边缘),这个过程的计算成本可能很高。

您可以使用remove_edges_from()

尝试使用相同的方法减少图表中的边数
In [20]: import networkx as nx

In [21]: g = nx.Graph()

In [22]: g.add_path(range(20))

In [23]: g.edges()
Out[23]:
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9), (9, 10), (10, 11), (11, 12), (12, 13), (13, 14), (14, 15), (15, 16), (16, 17), (17, 18), (18, 19)]

In [24]: g.remove_edges_from( g.edges()[0:10] )

In [25]: g.edges()
Out[25]:
[(10, 11), (11, 12), (12, 13), (13, 14), (14, 15), (15, 16), (16, 17), (17, 18), (18, 19)]

如果它的边缘较少,那么这意味着你首先没有足够的内存。