我正在使用 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
答案 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)]
如果它的边缘较少,那么这意味着你首先没有足够的内存。